### 知识点总结 #### 1. 编译原理概览 - **课程目标**:通过对PL/0编译程序的研究与改进,学生能够掌握编译程序的基础知识和技术,理解编译程序的设计思路和实现过程,为后续深入学习编译原理打下坚实的基础。 #### 2. PL/0语言简介 - **定义**:PL/0是一种简化版的Pascal语言,用于教学目的,帮助初学者理解编译器的工作原理。 - **特点**:PL/0语言简洁明了,适合教学场景,易于理解和编程实现。 #### 3. 项目概述 - **任务重点**:该项目着重于扩展PL/0编译程序的功能,同时涉及对其总体结构、词法分析、语法语义分析、目标代码生成、错误处理等方面的研究。 - **具体目标**: - 理解并掌握PL/0语言的形式描述,使用语法图和EBNF(Extended Backus-Naur Form,即扩展巴科斯-瑙尔范式)进行描述。 - 掌握PL/0语言编译程序构造和实现的基本技术和步骤。 - 理解并掌握目标程序在运行时数据空间的组织管理。 #### 4. 词法分析 - **定义**:词法分析是编译过程的第一步,其目的是将源代码分解成有意义的符号序列。 - **实现原理**: - **子程序getsym**:该子程序负责读取源程序中的单词符号(token),并将信息存入全局变量`sym`、`id`和`num`中。 - **getch过程**:用于从源程序中获取字符,利用行缓冲区技术提高效率。 - **单词识别**:通过识别字符的类型来确定是字母、数字还是特殊符号,进一步判断是否为保留字或标识符,并相应地设置全局变量。 - **流程**:从源程序中获取字符→根据字符类型构建单词→根据单词内容更新全局变量。 #### 5. 语法分析 - **方法选择**:采用自顶向下的递归子程序法。 - **组成部分**: - **分程序分析过程(block)**:处理PL/0程序的整体结构。 - **常量定义分析过程(constdeclaration)**:处理常量定义。 - **变量定义分析过程(vardeclaration)**:处理变量定义。 - **语句分析过程(statement)**:处理各种语句。 - **表达式处理过程(expression)**:处理表达式的解析。 - **项处理过程(term)**:处理表达式中的项。 - **因子处理过程(factor)**:处理表达式中的因子。 - **条件处理过程(condition)**:处理条件语句。 - **辅助过程**: - **出错报告过程(error)**:处理编译过程中的错误。 - **代码生成过程(gen)**:生成目标代码。 - **测试单词合法性及出错恢复过程(test)**:检查单词的合法性并在发生错误时恢复编译过程。 - **登录名字表过程(enter)**:记录标识符。 - **查询名字表函数(position)**:查找标识符的位置。 - **列出类PCODE代码过程(listcode)**:列出生成的PCODE代码。 #### 6. 目标代码生成与解释 - **目标代码结构**:编译器生成的是类PCODE的代码,这是一种抽象的中间代码,适用于不同的机器架构。 - **代码解释执行**:在虚拟机上解释执行生成的类PCODE代码,实现跨平台的兼容性。 #### 7. 错误处理 - **原理**:编译过程中,一旦发现错误,需要提供出错报告,并尝试恢复编译过程,使程序能够继续运行。 - **技术**:包括错误检测、错误定位和错误恢复等步骤。 #### 8. 存储分配 - **运行时数据空间**:了解并掌握PL/0语言编译程序的目标程序在运行时如何管理和分配数据空间,这对于优化程序性能至关重要。 通过以上内容的详细介绍,我们可以看到燕山大学的这份编译原理三级项目的报告不仅涵盖了编译器设计的核心技术,还强调了实践操作的重要性,有助于学生深刻理解编译原理及其应用。
- Ms-zhang2019-01-08只有一个word,用处不大
- 粉丝: 6
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助