相信计算机系的学生都学过一门必修课:编译原理,这个代码库就是当时最终的编译原理课程设计的大作业。
之所以叫MiniC是因为课程的要求是使用任何编程语言实现C语言语法的子集。
此编译器是在编译原理经典教程龙书附录A中的代码的基础上开发而来的。龙书上的代码只实现一部分语法的前端,我们在此基础上扩充了一些语法:函数定义,函数调用,for语句,添加了一些常见的语法糖:变量定义与赋值合一的语法,对穿插变量定义,变量使用的支持等。
除此之外此编译器的后端是我们独立编写的,因为时间方面的压力此编译器的后端用的完全是一些朴素的方法,效率方面堪忧,但是最基本的功能是能实现的。
- int数据类型(前端其实还实现了char,float,数组,但是迫于时间压力相应后端没有实现。
- 各类循环语句:for,while,do-while
- 选择语句:if,if-else语句
- 函数的定义与调用(因为只实现了int类型所以函数的返回类型也必须是int而且函数调用暂时不能单独作为一条语句,只能作为表达式的一部分。
本编译器面向的是masm32汇编套件,因此只支持windows平台,可以从http://www.masm32.com/download.htm出下载masm32。
已知的问题:
- 对除法仍然存在问题
- 函数的定义与调用部分的语义合理性分析缺失
- for语句的更新语句最后必须要加上一个分号(这是因为在进行语法分析时是将for语句的括号内的三部分匹配为三个表达式的)