📄 开发文档.txt
字号:
simple C compiler开发文档
09002212
陈曦
本编译器可支持对.crr文件的C的子集代码的编译及汇编代码生成。
本编译器以命令行的形式运行,在程序目录下运行即可。形式为:
pas1 (目标文件名).crr
本编译器识别的字符:
保留字:
int,main,import,out;
运算符号:
+、-、*、/、%
关系符号:
=、〈、〉、&&、||、(、)、
语句符号:
;、{、}、#
本编译器文法:
1: D->@()S. 程序->主函数
2: S->@=E;. 赋值语句
3: S->{W}. 组合语句
4: S->i(G)S. if语句
5: S->i(G)SeS. if-else语句
6: S->w(G)S. while语句
7: S->zL;. 变量定义
8: S->@(E);. 函数调用
9: W->WS. 多条语句列表
10: W->S. 语句列表
11: L->@. 变量名列表
12: L->L,@. 多个变量名列表
13: G->G&M. 逻辑表达式
14: G->M.
15: M->E>E. 关系表达式
16: M->!M. 逻辑非表达式
17: M->(G). 带括号的逻辑表达式
18: E->E+T. 加法表达式
19: E->T.
20: T->T*F. 乘法表达式
21: T->F.
22: F->(E). 带括号的算术表达式
23: F->@. 变量表达式
24: F->n. 数字表达式
Compiler::preProcess():程序预处理
检验所要编译的文件是否存在,检验是否需要引入系统函数'System.out'
Symbol *Compiler::lexer():词法分析器
对输入的字符串进行分析,利用FA分析是否为合法字符串及是否为保留字,生成符号表symbolList
Compiler::parser():语法分析器
对创建的符号表symbolList进行分析,以LR分析法按以上文法进行规约,最终规约到D。以检验语法是否正确。
Compiler::nextChar():预测分析符
Compiler::lookup(string m):查找字符串
检验字符串是否存在,以检验变量是否以被定义过
Compiler::emitter():目标代码生成
按符号表symbolList创建.asm文件生成目标代码(汇编代码)
Compiler::optimize():目标代码优化
去除简单的连续出现的'push ax pop ax'类的垃圾代码,简化代码
Compiler::err(int no,int line):错误信息提示
按照分析时发现的错误号no提示错误类型,按出错行数line提示错误地点
Action::Action():符号优先级
Goto::Goto():非终结符优先级
本程序已提供a.crr测试文件。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -