目录
-
概述
-
系统描述
2.1. 自定义语言概述
2.2. 单词文法与语言文法
2.3. 符号表结构定义
2.4. 错误类型码定义
2.5. 中间代码结构定义
2.6. 目标代码指令集选择
- 系统设计与实现
3.1. 词法分析器
3.2. 语法分析器
3.3. 符号表管理
3.4. 语义检查
3.5. 报错功能
3.6. 中间代码生成
3.7. 代码优化
3.8. 汇编代码生成
- 系统测试与评价
4.1. 测试用例
4.2. 正确性测试
4.3. 报错功能测试
4.4. 系统的优点
4.5. 系统的缺点
-
实验小结或体会
-
参考文献
附件:源代码
- 概述
本次实验是构造一个高级语言的子集的编译器,目标代码是汇编语言。按照任务书,实现的方案可以有很多种选择。
可以根据自己对编程语言的喜好选择实现。建议大家选用decaf语言或C语言的简单集合SC语言。
实验的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理解,提高学生系统软件研发技术。
系统描述
2.1. 自定义语言概述
自定义语言是基于C语言的简化语言,具有C语言中最为基础的内容,包括基本的运算操作、if-else、for、while循环语句,自定义函数和变量等。
2.2. 单词文法与语言文法
Mini-C的文法如下:
G[program]:
program → ExtDefList
ExtDefList → ExtDef ExtDefList | ε
ExtDef → Specifier ExtDecList ;| SpecifierFunDecCompSt
Specifier → int | float | char | StructSpecifier
ExtDecList → VarDec | VarDec , ExtDecList
VarDec → ID | VarDec ( Exp )
FucDec → ID ( VarList ) | ID ()
VarList → ParamDec ,VarList | ParamDec
ParamDec → Specifier VarDec
CompSt → { DefList StmList }
StmList → Stmt StmList | ε
Stmt → Exp ; | CompSt | returnExp ; | FOR ( Exp ; Exp ; Exp ) Stmt | if ( Exp )Stmt | if( Exp ) Stmt else Stmt| while ( Exp ) Stmt
DefList → Def DefList | ε
Def →Specifier DecList ;
DecList → Dec | Dec ,DecList
Dec → VarDec | VarDec =Exp
Exp → Exp=Exp | Exp && Exp | Exp | |Exp | Exp < Exp| Exp <= Exp | Exp == Exp | Exp != Exp | Exp > Exp | Exp >= Exp | Exp +Exp| Exp -Exp | Exp *Exp | Exp /Exp | INT | FLOAT | CHAR | VarDec | Exp ++ | Exp – | ++ Exp | --Exp | VarDec += Exp | VarDec -= Exp | VarDec *= Exp | VarDec /= Exp | BREAK | CONTINUE | Exp . ID | ( Exp ) | -Exp | ! Exp | ID ( Args ) | ID ()
Args → Exp , Args | Exp
StructSpecifier → STRUCT StructName { ExtDefList } | STRUCT ID
StructName → ID | ε
本文转载自:http://www.biyezuopin.vip/onews.asp?id=15506