コード例 #1
0
def handle_type():
	ice9_parser_global.logger.debug("Entering type")
	
	if ice9_parser_global.tok.type == 'ID':
		derived_data_type = ice9_parser_global.tok.value
		ice9_parser_global.consume()
		ice9_parser_global.logger.debug(ice9_parser_global.tok)
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting id"
		sys.exit()

	if ice9_parser_global.tok.type == 'EQ':
		ice9_parser_global.consume()
		ice9_parser_global.logger.debug(ice9_parser_global.tok)
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting '='"
		sys.exit()

	if ice9_parser_global.tok.type == 'ID':
		type_node = ice9_parser_var.typeid()
		type_node.derived_data_type = derived_data_type
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting id"
		sys.exit()
	
	if ice9_parser_global.tok.type == 'SEMI':
		ice9_parser_global.consume()
		ice9_parser_global.logger.debug(ice9_parser_global.tok)
	else:
		print "Line", ice9_parser_global.tok.lineno, ": on token", ice9_parser_global.tok.value, "expecting ';'"
		sys.exit()

	data_type_entry = ice9_st_type.st_type_entry(str(type_node.data_type), type_node.dimension)
	ice9_st_type.add_entry_to_st_type(str(type_node.derived_data_type), data_type_entry)
	ice9_parser_global.logger.debug("Exiting type")
コード例 #2
0
def setup():
	global lexer, op_file_name
	op_file_name = sys.argv[-1]

	input_string = ''
	for line in sys.stdin.readlines():
		input_string += line

	lexer.input(input_string)
	
	# Set the scope to setup
	scope.append('SETUP')

	# Enter basic data type in the type symbol table for 'GLOBAL' scope
	bool_type_entry = ice9_st_type.st_type_entry('bool', 0)
	ice9_st_type.add_entry_to_st_type('bool', bool_type_entry)
	
	int_type_entry = ice9_st_type.st_type_entry('int', 0)
	ice9_st_type.add_entry_to_st_type('int', int_type_entry)
	
	string_type_entry = ice9_st_type.st_type_entry('string', 0)
	ice9_st_type.add_entry_to_st_type('string', string_type_entry)
	
	scope.pop()
	scope.append('GLOBAL')