如果需要测试源程序的正确性,请进入到“src”文件夹,然后利用终端执行命令
make
在当前目录下会生成可执行文件minic
使用命令
./minic ../testbench/filename.c
即可分析filename.c文件,在终端中会出现语法树AST,报错信息、符号表、中间代码、在当前文件夹下会生成object.s的MPIS汇编代码。
在“LogisimCPU”文件夹下有CPU的源文件,需要用Logisim打开。把code.hex导入到CPU的指令RAM中,点击时钟模拟就可以开始执行源程序了。
设计自己的mini-c语言编译器,借助Flex和Bison这两个工具。
mini-c的功能包括:
- 变量的定义,函数的声明;
- 变量的赋值,函数的定义;
- char类型的识别
- 算术运算,比较运算,逻辑运算,自增自减运算,复合赋值语句
- 控制语句if和while
- 数组(定义、访问)、结构体(定义、访问)、for循环
- break、contiune
[1] 17696 segmentation fault ./minic test.c
原因:没有编写.y文件正则匹配后的ast结点生成导致错误。
自行准备好若干个测试用例,测试用例中包含的语义错误 类别可以参考实验指导中参考教材[2]。
– 回答老师的问。可根据老师的要求,在程序的合适位置 加上符号表的显示。
– 评分依据: (1) 完成的时间;(2)完成的质量(主要看能检查出多少静态语义错误)。
能够检测出的错误:
- 没有main函数
- 变量类型不匹配
- 变量未定义
- 变量重复定义
- 非法赋值
- 被除零
- 常量越界(无效常量定义)
- 函数参数列表不匹配
- 无效的类型转换
- break、continue位置错误
- 不能计算该表达式
- 数组索引类型错误
- 数组下标为负数
- 返回值类型错误
- 不是一个函数
- 缺少bool表达式
- 赋值语句需要左值
添加的功能包括:
- for循环的代码
- 自增、自减
- 取反(-)、取非(!)
- break和continue