1 Star 0 Fork 1

mengbai/compile2021

forked from Ray/compile2021 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
compile2021 @ 018674f
Loading...
README
# 编译原理实验报告

### 一、实验内容

一个简单的C语言编译器,可将 C 语言测试程序编译为目标代码——汇编程序,用汇编器转换为二

进制程序后运行无误

1. 基本要求:

​	数据类型:int

​	语句:注释,声明,赋值,循环(while 和 for),判断(if),输入输出

​	算术运算:+,-,*,/,%

​	关系运算:==,>,<,>=,<=,!=

​	逻辑运算:&&(与),||(或),!(非)

2. 完成功能:词法分析、语法分析、中间代码、类型检查、代码优化、错误分析、汇编程序
3. 加分项:手工实现词法分析语法分析

### 二、实验思路

编译程序是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。

1.词法分析

识别关键字、字面量、标识符 (变量名、数据名)、运算符、注释行(一般不处理)、特殊符号(续行、语句结束、数组)等六类符号,分别归类等待处理。

词法分析将源程序读入一个个的字符,根据一定的构词规则,识别出各类有用的单词。当输入字母时,开始识别标识符或关键宇,边拼写边从缓冲区读入下一符号,当读入一非字母数字符号时,标识符识别完成,但已多读入一个符号,所以列记数回退。然后查关键字表,判断拼出的符号串是否为关键字。若是关键字,输出其种别码。否则识别的单词就是标识符,同时输出标识符及其种别码。当输入数字时,开始识别整数或实数,输出常数及其种别码。当输入“/”时,开始识别注解或除号,若是注解时,最后两个连续读出的符号是“*/”,不需再读下一符号,计数不变。当判定是除号“/”时,已多读入一字符,输出“/”的种别码。

2.语法分析

一个语句看作一串记号 (Token)流,由语法分析器进行处理。按照语言的文法检查判定是否是合乎语法的句子。如果是合法句子就以内部格式保存,否则报错。直至检查完整个程序。

语法分析程序读取词法分析传来的token,匹配合适的产生式,若匹配成功则生成相应的语法树结点并插入语法树,若是标识符,需要在符号表中找到其地址并存储。最后全部读取完成之后遍历并打印语法树

3.中间代码生成

中间代码是向目标码过渡的一种编码,其形式尽可能和机器的汇编语言相似,以便下一步的代码生成。但中间码不涉及具体机器的操作码和地址码。采用中间码的好处是可以在中间码上做优化。

输入语法树与符号表,读取当前语法树结点,根据不同的结点类型生成四元式,将四元式存储并打印

4.代码类型检查

根据构造符号表中变量信息的检查实现简单Debug程序

5.代码优化

对中间码程序做局部优化和全局 (整个程序)优化,目的是使运行更快,占用空间最小。局部优化是合并冗余操作,简化计算,例如x:=0可用一条"清零"指令替换。全局优化包括改进循环、减少调用次数和快速地址算法等。

6.汇编程序

由代码生成器生成目标机器的目标码 (或汇编)程序

### 三、人员分工

孟嘉怡:tree.h\token.h \gencode.h\gencode.cpp

马宁:midcode.h\midcode.cpp

严丽华:Scope.h\Scope.cpp

孙宜辰、李宇琪:lexer.h\lexer.cpp\symbols.h\symbols.cpp\symbolstable.h\symbolstable.cpp\parser.h\parser.cpp\报告撰写

### 四、项目地址

https://gitee.com/seeuiceland/compile2021

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mengbai_love/compile2021.git
[email protected]:mengbai_love/compile2021.git
mengbai_love
compile2021
compile2021
master

搜索帮助