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')
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")