55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
"""
|
|
主程序
|
|
"""
|
|
from lexical.lexical import Lexical
|
|
from syntax.syntax import Syntax
|
|
from syntax.syntax import LL1Generator
|
|
import sys
|
|
|
|
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)
|
|
else:
|
|
print('错误原因:\t', syntax.get_error().info)
|
|
else:
|
|
print('错误原因:\t', lexical.get_error().info)
|