1 前言
最近一直在学习编译原理的内容,深知如果不自己动手实现一个编译器,那么这就是在谈一场不以结婚为目的的恋爱,这就是耍流氓。所以从现在开始我要自己实现一个类似于c语言的编译器,把设计的方案与细节总结在这里。也希望大家多给我提一些宝贵的意见。
2 介绍
这个语言与c语言非常相似,也与现有的很多程序设计语言有很多共同点。但也有很多地方与c语言不同,比如c-mini包含了foreach循环语句,在函数体中变量的声明顺序也与c语言不同。
不同元素的类型使用不同的字体来表示:
- 关键字(eg. for,while,static)使用这种字体
- 记号TOKEN(ID,NUMLITERAL,STRLITERAL)使用这个字体
- 非终结符Nonterminals使用这个字体
2.1 TOKEN 的定义
- letter = a | … | z | A | … | Z
- digit = 0 | … | 9
- NUMLITERAL = [+ | -] digit+
- ID = letter (letter | digit)∗
- STRLITERAL= “任何除了” 以外的字符”
- CHARLITERAL =
- BOOLITERAL = true | false
- Comments= /* ……anything but except * /…… */
- White space=制表符