编译原理课设-算符优先文法语法分析,实验目的和要求详解
需积分: 5 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. 实验总结
通过本次实验,加深了对语法分析器工作过程的理解,掌握了算符优先分析法实现语法分析程序的方法。编写该程序的过程中,熟悉了模块化设计的思想,学会了使用自底向上的算法进行语法分析。同时,通过测试和调试,锻炼了解决问题、修正错误的能力。
总体而言,本次实验达到了预期目的和要求,提高了对编译原理和语法分析的理解和能力。希望在以后的学习中能够进一步应用和拓展所学的知识。
2011-03-16 上传
2011-06-24 上传
2009-01-01 上传
点击了解资源详情
2019-07-23 上传
2021-09-25 上传
2022-08-04 上传
一只快乐的野指针D
- 粉丝: 91
- 资源: 9
最新资源
- BangBang教育:家庭作业
- 145026,c语言种子解析下载源码,c语言
- AutoSplitterJourney
- 一个个人文件管理系统的源码脚手架r-pan基于此脚手架搭建快速搭建个人文件管理系统
- gchisto:GC日志分析工具,网上不容易找到原始码,这里备份一个。不确定工具是否正确,不确定是否有时间研究
- H5手机端免费问卷调查平台系统aspnet源码
- assistant:自动化的个人助理,可帮助您前进并跟踪您的成绩,以获得良好生活
- 虚拟DVD精灵 VirtualDVD 9.2 中文.zip
- evikd,c语言项目文档以及源码,c语言
- tts-40k-roller:台式模拟器上用于战锤40k的压模辊
- 【ssm管理系统】实现的在线考试系统.zip
- 音听故事个人网站
- cacheman-file:Node.JS的文件缓存库,还有cacheman的缓存引擎
- OLML:各种日常的自动化办公工具
- nix-container-perfzero:在XSEDE环境中运行perfzero基准测试的容器
- TORZ,c语言开源软件源码下载,c语言