"编译原理实验报告1:PL/0语言词法分析及关键字识别"
编译原理实验报告1 实验题目:PL/0 语言编译器 学号: 日期:5.27 班级:17.4 姓名: Email:623581439@qq.com 一、实验环境 硬件环境:个人电脑 软件环境:C 二、实验说明 本项目是一个PL/0语言编译器,实现了词法分析功能。具体文件夹的作用如下: - test文件夹为完整项目 - input文件夹为输入 - pl0文件夹存放词法分析输出 - table文件夹存放符号表输出 - parse文件夹存放语法树输出 - code文件夹存放中间代码输出 - vm文件夹存放虚拟机输入输出 - 运行截图文件夹存放示例程序运行截图 三、实验内容 本实验是针对PL/0语言建立一个词法分程序。要求识别关键字(关键字表已给出)、标识符、常量。为方便处理,设置了三个全局变量:SYM、ID、NUM。 - SYM用于存放每个单词的类别,为内部编码的表示形式 - ID用于存放用户定义的标识符的值,即标识符字符串的机内表示 - NUM用于存放用户定义的数值 四、GETSYM函数的任务和实现 GETSYM函数需要完成以下任务: 1. 滤掉单词间的空格 2. 识别关键字,使用查关键字表的方法进行识别。当单词是关键字时,将对应的类别放在SYM变量中。例如,IF的类别为IFSYM,THEN的类别为THENSYM。 3. 识别标识符,标识符的类别为IDENT 4. 识别常量,常量的类别为NUM 具体实现过程如下: void GETSYM() { // 滤掉单词间的空格 while (isspace(ch)) { ch = getchar(); } // 识别关键字 if (isalpha(ch)) { int i = 0; while (isalnum(ch) || ch == '_') { token[i++] = ch; ch = getchar(); } token[i] = '\0'; // 查找token是否为关键字 for (int j = 0; j < KEYWORD_NUM; j++) { if (strcmp(token, keywords[j]) == 0) { SYM = keyword_type[j]; return; } } // 不是关键字则为标识符 SYM = IDENT; return; } // 识别常量 if (isdigit(ch)) { int i = 0; while (isdigit(ch)) { token[i++] = ch; ch = getchar(); } token[i] = '\0'; NUM = atoi(token); SYM = NUM; return; } // 识别其他符号 switch (ch) { case ';': SYM = SEMICOLON; break; // 其他符号处理... default: // 错误处理... break; } ch = getchar(); } 通过GETSYM函数的实现,我们可以实现对PL/0语言的词法分析。在获取每一个单词时,滤掉了空格,识别了关键字、标识符和常量,并存放在相应的全局变量中。 综上所述,通过本次实验我们成功构建了一个PL/0语言编译器,并实现了词法分析的功能。通过GETSYM函数的实现,可以准确地识别各种类型的单词,并进行相应的处理。这对于后续的语法分析和代码生成步骤有着重要的意义。在实验过程中,我们也遇到了一些问题和挑战,如错误处理和符号表管理等,但通过不断的调试和优化,我们最终成功完成了实验目标。期望通过这次实验,我们对编译原理的相关知识有了更深入的理解,并能够在实践中灵活运用。
![](https://csdnimg.cn/release/download_crawler_static/86368378/bgc.jpg)
![](https://csdnimg.cn/release/download_crawler_static/86368378/bgd.jpg)
![](https://csdnimg.cn/release/download_crawler_static/86368378/bge.jpg)
剩余67页未读,继续阅读
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/82b4f64997294fed9b0e52fab9c35805_weixin_35784370.jpg!1)
- 粉丝: 71
- 资源: 301
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)