""" 主程序 """ from lexical.lexical import Lexical from syntax.syntax import Syntax from syntax.syntax import LL1Generator import sys from Optimizer.Optimizer import optimize, output_ir_str from semantic.rule import symbol_table_pool # print(PredictingAnalysisTable().compile()) # obj = LL1Generator() # obj.compile() # obj.show_me_what_you_got("LL1Table_id_2.csv",show_by_id=False) # 新建词法分析器 lexical = Lexical() if len(sys.argv) < 2: print("请提供源代码文件名作为参数。") sys.exit(1) source_filename = sys.argv[1] # 载入源代码 lexical.load_source(open(source_filename, encoding='utf-8', errors='ignore').read()) # 执行词法分析 lexical_success = lexical.execute() # 打印结果 print('词法分析是否成功:\t', lexical_success) if lexical_success: lexical_result = lexical.get_result() print() print('词法分析结果:') for i in lexical_result: print(i.type, i.str, i.line) print() # 开始执行语法分析 syntax = Syntax() syntax.put_source(lexical_result) syntax_success = syntax.execute() print('语法分析和语义分析是否成功\t', syntax_success) if syntax_success: print(symbol_table_pool.debug()) print() print('语义分析结果:\t') print('四元式代码:\t') i = -1 for code in syntax.get_result().root.code: i += 1 print(i, ' \t', code) quads = [tuple(map(str.strip, str(item).strip("()").split(","))) for item in syntax.get_result().root.code] optimized_quads = optimize(quads) print() print(f"优化后的四元式:\t") print(output_ir_str(optimized_quads)) else: print('错误原因:\t', syntax.get_error().info) else: print('错误原因:\t', lexical.get_error().info)