"编译原理:C语言词法分析实验报告"
需积分: 0 190 浏览量
更新于2024-01-11
1
收藏 266KB DOCX 举报
实验报告:编译原理词法分析
学号:班级:姓名:
一、实验要求
本实验由3-4位同学组成小组完成,具体要求如下:
1. 确定源语言L和编写编译程序的语言P;
2. 用正规式描述L的词法规则;
3. 根据正规式构造一个能够识别单词的有限自动机DFA;
4. 根据DFA,用语言P编写L的词法分析程序;
5. 实验需要在3月24日前完成,并在课堂上进行检查。
二、实验设计
1. 源语言和编译程序语言
源语言我选择了C语言,编译程序语言我选择了C。
2. 单词符号和种别码
根据C语言的单词种类,确定单词符号和种别码如下:
- 关键字:auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for
- 运算符:+、-、*、/、%
- 比较运算符:==、!=、<、<=、>、>=
3. 正规式描述L的词法规则
根据C语言的词法规则,我们可以得到以下正规式描述:
- 自动机的初始状态为0;
- 对于标识符,正规式为[A-Za-z_][A-Za-z0-9_];
- 对于整数常量,正规式为[0-9]+;
- 对于浮点数常量,正规式为[0-9]+"."[0-9]+;
- 对于运算符和比较运算符,直接使用其本身作为正规式即可。
4. 构造DFA
根据正规式构造DFA,具体步骤如下:
- 对于标识符,构造一个状态0到状态1的边,边上的标记为字母A-Z、a-z和下划线_;状态1以后的状态通过字母、数字和下划线转换;
- 对于整数常量,构造一个状态0到状态2的边,边上的标记为0-9;状态2以后的状态通过数字转换;
- 对于浮点数常量,构造一个状态0到状态3的边,边上的标记为0-9;状态3到状态4的边上的标记为.,状态4以后的状态通过数字转换;
- 对于运算符和比较运算符,直接构造边即可。
5. 编写词法分析程序
根据构造的DFA,使用语言P编写词法分析程序,具体步骤如下:
- 读取输入的源代码;
- 从源代码中逐字符读取,根据DFA进行状态转换;
- 根据状态转换结果,判断是否识别出一个完整的单词;
- 如果识别出一个完整的单词,则输出单词符号和种别码;否则,继续下一个字符的读取。
三、实验结果
根据上述的实验设计,我完成了编写词法分析程序。
四、实验总结
通过本实验,我对编译原理中的词法分析有了更深入的理解。通过使用正规式描述词法规则,并构造有限自动机DFA,我能够编写出一个能够识别源代码中单词符号的词法分析程序。这为之后的语法分析和语义分析提供了基础。
在实验过程中,我遇到了一些困难和挑战。一方面,正规式的构造需要我对编程语言的词法规则有深入的理解;另一方面,构造DFA和编写词法分析程序需要我有良好的编程能力。通过不断的学习和实践,我最终成功地完成了本实验。
总的来说,本实验让我对编译原理的词法分析有了更深入的了解,并提升了我的编程能力。我相信这对我的学习和职业发展都有非常重要的意义。
2021-12-21 上传
2021-08-12 上传
2023-01-04 上传
2023-01-01 上传
2024-11-15 上传
计算机小白中的小白
- 粉丝: 54
- 资源: 1
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常