第五章 代码实现
根据前期的需求调研和系统的概要设计,本系统选用Python作为基本的开发语言,使用Tkinter库来实现图形用户界面。下面是功能的代码实现:
5.1 加载文件程序
通过Tkinter的filedialog模块实现文件的加载。
def load_input_from_file():
5.2 预处理程序
从输入的代码中移除注释。注释是以“//”开头,持续到行末的文本。
def remove_comments(text): def preprocess_input():
5.3 词法分析程序
将输入的代码文本转换为一系列的词素,并对这些词素进行分类,如关键字、标识符、整数、界符还是运算符。为编译器的下一阶段——语法分析提供基础。
def tokenize(s): def analyze_tokens(tokens):
5.4 语法分析程序
通过一系列函数实现语法分析,使用递归下降分析,包括 S,I,W, G, D, A, E,R函数,以及 syntax_analysis函数,S函数处理一个完整的函数定义,I函数处理if条件判断,W函数处理while循环判断,G函数处理语句的序列,D函数处理变量声明,A函数处理赋值语句,E函数处理表达式,R函数处理返回语句。syntax_analysis 函数触发语法分析过程,并处理任何语法错误。按照预定义的语法规则逐步解析代码,确保输入的代码遵循了该语言的语法结构。
def S(): def I(): def W(): def parse_condition(): def G(): def D(): def A(): def E(): def R(): def syntax_analysis():
5.5 语义分析和中间代码生成程序
语义分析处理由词法和语法分析阶段生成的代码,并在此基础上生成语义动作,如生成赋值操作或数学运算的目标代码。使用一些辅助函数和全局变量来生成和管理临时变量,并进行语义动作的解析。
def semantic_analysis():
5.6 DAG优化程序
DAG优化主要用于改善中间代码,通过识别公共子表达式和消除冗余计算来提高效率。能够优化中间代码,减少重复计算,提高代码执行效率。
def dag_optimization(): def evaluate_expression(expr):
5.7 目标代码生成程序
将中间代码转换成目标机器可以执行的代码,如汇编语言。
def target_code_generation():
5.8 结果保存程序
使用 Tkinter库的filedialog模块来提供保存文件的对话框,并将显示区域中的内容写入到用户指定的文件中。
def save_to_file():
5.9 退出程序
通过 Tkinter GUI框架中的quit方法实现的。与一个按钮相绑定,当用户点击这个按钮时,程序会关闭。
exit_button = tk.Button(middle_frame, text="退出程序", command=root.quit) exit_button.pack(side=tk.TOP, pady=7)
第六章 测试
6.1 测试过程
本文所采用的系统是Windows10系统,使用的编译语言是python。开发环境是PyCharm Community Edition 2023.2.5。
测试源码样例如图6-1所示。
图6-1 测试源码样例
6.2 测试结果
(1)代码案例输入。
可以通过两种方式进行输入代码。一种方式是直接在输入框里面输入代码样例。另一种方式是点击加载文件按钮,直接选择需要使用的代码案例。如图6-2所示。
图6-2 代码案例输入
(2)预处理。
主要功能是从输入的代码中移除注释。注释是以“//”开头,持续到行末的文本。如图6-3所示。
图6-3 预处理
(3)词法分析
点击词法分析按钮,对输入案例进行词法分析,在结果框里显示词法分析结果。如图6-4所示。
图6-4 词法分析
(4)语法分析
点击语法分析按钮,对输入案例进行语法分析,在结果框里显示语法分析结果。如图6-5所示。当没有按照正常流程运行时,在结果框里会显示输出错误信息。如图6-6所示。
图6-5 正常流程语法分析
图6-6 错误流程语法分析
(5)语义分析
点击语义分析按钮,对输入案例进行语义分析,结果输出框显示语义分析结果。如图6-7所示。当没有按照正常流程运行时,结果输出框将不显示任何内容。如图6-8所示。
图6-7 正常流程语义分析
图6-8 错误流程语义分析
(6)DAG优化
点击DAG优化按钮,对输入案例进行DAG优化,结果输出框显示DAG优化结果。如图6-9所示。当没有按照正常流程运行时,结果输出框将不显示任何内容。如图6-10所示。
图6-9 正常流程DAG优化
图6-10 错误流程DAG优化
(7)目标代码生成
点击目标代码按钮,对输入案例进行目标代码生成,结果输出框显示目标代码生成结果。如图6-11所示。当没有按照正常流程运行时,结果输出框将不显示任何内容。如图6-12所示。
图6-11 正常流程目标代码生成
图6-12 错误流程目标代码生成
(8)结果保存
当点击结果保存按钮时,会对结果输出框的内容进行文件保存,使数据持久化。每一个功能展示输出框都可以进行文件保存。如图6-13所示。
图6-13 结果保存
(9)退出程序
当点击退出程序按钮,程序将不再运行,同时GUI界面也会消失不见。如图6-14所示。
图6-14 退出程序
评论