编译原理课程的实验报告,实验内容如下: 1.增加保留字fi 2.增加运算符+= 3.增加fi条件语句 ::=fi <条件> then <语句> [if <语句>] 4.增加+= 赋值语句 ::=ident( :=|+=) <表达式> ### 编译原理实验报告知识点总结 #### 一、完成内容概述 本实验报告主要针对以下四个方面的内容进行了实现: 1. **增加保留字 `fi`:** - 在现有的词法分析器中加入对新保留字的支持。 2. **增加运算符 `+=`:** - 支持新的赋值运算符 `+=` 的识别与处理。 3. **增加 `fi` 条件语句:** - 新增一种条件控制结构,即 `fi` 语句,支持嵌套与分支选择。 4. **增加 `+=` 赋值语句:** - 实现 `+=` 运算符的语义,即在原基础上累加一个值。 #### 二、设计思路详解 ##### 1. 增加保留字 `fi` **1.1 修改变量定义** - **设置保留字名字**:定义 `fi` 为新的保留字。 - **设置保留字符号**:为 `fi` 分配一个唯一的符号标识。 - **向 symbol 表中添加保留字符号**:更新 symbol 表,确保 `fi` 可被正确识别。 - **修改保留字个数和符号个数**:根据新增的保留字调整总数。 **1.2 修改 GetSym() 方法** - 更新词法分析器中的 GetSym() 函数,使其能够识别并处理 `fi`。 ##### 2. 增加运算符 `+=` **2.1 修改变量定义** - **向 symbol 表中添加运算符符号**:为 `+=` 分配唯一标识。 - **修改符号个数**:调整 symbol 表中的符号总数。 **2.2 修改 GetSym() 方法** - 更新 GetSym() 函数,确保能够正确处理 `+=`。 ##### 3. 增加 `fi` 条件语句 **3.1 语句的 EBNF 范式** - `<条件语句>::= fi <条件> then <语句> [if <语句>]`:定义了 `fi` 语句的基本语法结构。 **3.2 递归下降子程序** - 设计相应的递归下降解析器来处理 `fi` 语句。 **3.3 举例设计语句生成的 pcode 代码** - **设计语句**: ``` vara, b, c; begin a:=3; b:=5; fia>bthen c:=a if c:=b; end. ``` - **pcode 代码**: ``` 1 int 06 2 lit 3 3 sto 03 4 lit 5 5 sto 04 6 lod 03 7 lod 04 8 opr 012 9 jpc 013 10 lod 03 11 sto 05 12 jmp 015 13 lod 04 14 sto 05 15 opr 00 ``` **3.4 在递归下降子程序上加入语句动作** - 在递归下降子程序中实现具体的语义动作,如条件判断等。 ##### 4. 增加 `+=` 赋值语句 **4.1 语句的 EBNF 范式** - `<赋值语句>::= ident (:= | +=) <表达式>`:定义了 `+=` 赋值语句的语法。 **4.2 递归下降子程序** - 设计相应的递归下降解析器来处理 `+=` 语句。 **4.3 举例设计语句生成的 pcode 代码** - **设计语句**: ``` vara, b; begin a:=5; b:=10; a+=3; write(a); end. ``` - **pcode 代码**: ``` 1 int 05 2 lit 5 3 sto 03 4 lit 10 5 sto 04 6 lod 03 7 lit 3 8 opr 02 9 sto 03 10 lod 03 11 opr 00 ``` **4.4 在递归下降子程序上加入语句动作** - 在递归下降子程序中实现具体的语义动作,如累加操作等。 #### 三、运行测试 1. **增加保留字 `fi` 的测试** - 验证词法分析器能够正确识别 `fi`。 2. **增加 `fi` 条件语句的测试** - 测试 `fi` 语句的逻辑是否正确,包括条件判断和分支执行。 3. **增加 `+=` 赋值语句的测试** - 验证 `+=` 赋值语句的语义是否正确。 #### 四、心得体会 本次实验通过实际操作,加深了对词法分析、语法分析的理解,特别是对保留字和运算符的处理有了更深刻的认识。此外,还学会了如何将源代码转换为 PCode 代码,这对于理解编译原理的基础概念非常有帮助。 #### 测试代码及运行结果 **测试代码示例** ``` begin read write fi id end. var a, b, c; begin a:=3; b:=5; fia>bthen c:=a if c:=b; end. var a, b; begin a:=5; b:=10; a+=3; write(a); end. ``` 通过本实验,不仅实现了对编译原理中保留字和运算符扩展的具体实践,还进一步熟悉了编译过程中的关键步骤,为后续深入学习奠定了坚实基础。


















- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 数据库基础理论—体系结构ppt课件.ppt
- 王志良jian养老服务物联网.pptx
- 中国软件投融资高峰论坛演讲稿.pptx
- 互联网产品经理的九道思考题.pdf
- 第七章项目管理班子的人员配备、素质及管理经验.doc
- 用户综合布线手册.doc
- 软件详细设计专题讲座.pptx
- 因特网信息交流与网络安全摘要.ppt
- 生化药物和基因工程药物分析概念专题知识专家讲座.pptx
- 生物学网络考试系统市公开课金奖市赛课一等奖课件.pptx
- 网站运营数据分析之内容指标.docx
- 网络营销基础知识培训.pptx
- 汽车制造企业的OTD管理与信息化ERP建设.doc
- 数字图像处理-试卷.doc
- 计算机体系结构期末考试试题及答案.doc
- actionscript程序结构与语法.pptx


