1. 概述
本次实验是构造一个高级语言的子集的编译器,目标代码是汇编语言。按照任务书,实现的方案可以有很多种选择。
可以根据自己对编程语言的喜好选择实现。建议大家选用decaf语言或C语言的简单集合SC语言。
实验的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理解,提高学生系统软件研发技术。
2.
系统描述
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 | ε