编译原理课设-算符优先文法语法分析,实验目的和要求详解

需积分: 5 1 下载量 71 浏览量 更新于2024-01-09 收藏 350KB DOC 举报
编译原理课设-算符优先文法;算符优先文法语法分析;南华大学计算机科学与技术学院实验报告 1. 实验目的及要求 实验目的: - 加深对语法分析器工作过程的理解; - 加强对算符优先分析法实现语法分析程序的掌握; - 能够采用一种编程语言实现简单的语法分析程序; - 能够使用自己编写的分析程序对简单的程序段进行语法翻译。 实验要求: - 花一周时间写出表达式的文法、优先符号表等理论准备。 - 设计好程序结构,画出模块结构图,写出模块接口和调用关系。 - 描述每个模块的功能。 - 上机编制子模块代码,并测试。 - 业余继续完成代码设计。 - 第二次上机进行调试、修改,对照测试数据比对结果。 - 第三次上机要求全部通过。 - 有余力的同学可编制解释执行程序,对表达式进行求值(此时可不考虑赋值语句)。 2. 实验步骤 1)模块一:构建 firstVT()和 lastVT()集合 - firstVT(P)直接根据定义递归地构造: - 若有产生式 P→a; "...,则将a加入firstVT(P)。 - 若有产生式 P→Q "…,将Q的firstVT集合中除去ε的符号加入firstVT(P)。 - 若有产生式 P→Q "…,将Q的firstVT集合加入firstVT(P)。 - 若有产生式 P→Qa "…,将Q的firstVT集合加入firstVT(P),若ε∈firstVT(Q),则将a加入firstVT(P)。 - lastVT(P)直接根据定义递归地构造: - 若有产生式 P→a; "...,则将a加入lastVT(P)。 - 若有产生式 P→…Q,将Q的lastVT集合中除去ε的符号加入lastVT(P)。 - 若有产生式 P→…Q,将Q的lastVT集合加入lastVT(P)。 - 若有产生式 P→…aQ,将Q的lastVT集合加入lastVT(P),若ε∈lastVT(Q),则将a加入lastVT(P)。 2)模块二:构建优先关系表 - 根据给定的文法规则和计算得到的firstVT()和lastVT()集合构建优先关系表: - 若a为终结符,则比较a与b的优先关系,分为 "<", "=", ">" - 若a为非终结符,则比较a的lastVT集合与b的firstVT集合的交集是否为空,分为 "<", "=", ">" 3)模块三:构造语法分析程序 - 根据给定的表达式输入,使用自底向上的算符优先分析法进行语法分析: - 从输入中读取一个符号a; - 若a为终结符,将a与栈顶符号进行优先关系比较,根据优先关系进行相应操作; - 若a为非终结符,根据优先关系表查找应进行的操作; - 重复上述过程,直至分析完成。 4)模块四:语法翻译 - 根据语法分析得到的推导式,进行语法翻译: - 根据产生式规则进行相应的翻译操作; - 将翻译结果输出。 5)测试和调试 - 对编写的子模块代码进行测试,保证功能正确; - 进行模块间的调试,确保模块的接口和调用关系正确; - 使用测试数据对整个程序进行综合测试,通过对照结果和预期结果比对,修正错误。 3. 实验结果 通过实验步骤中的各个模块和步骤的设计和编程,生成了一个能够对表达式进行算符优先文法语法分析的程序。该程序能够根据给定的表达式,进行语法分析并翻译。 4. 实验总结 通过本次实验,加深了对语法分析器工作过程的理解,掌握了算符优先分析法实现语法分析程序的方法。编写该程序的过程中,熟悉了模块化设计的思想,学会了使用自底向上的算法进行语法分析。同时,通过测试和调试,锻炼了解决问题、修正错误的能力。 总体而言,本次实验达到了预期目的和要求,提高了对编译原理和语法分析的理解和能力。希望在以后的学习中能够进一步应用和拓展所学的知识。