啊(充满哲♂学的呻吟)
终于在上学期完成了我航课程中的三巨头之一——编译,有了一点微不足道的收获。现在才有时间整理一下整个过程,发到博客上以记录自己的成果,顺便如果有学弟学妹需要也可以参考借鉴(但是别照搬——有查重!!)
一.需求说明
1.文法说明
文法无需改写,符合要求,解读如下:
<加法运算符> ::= +|-
分析:定义加减法运算符
样例:a+b a-b
<乘法运算符> ::= *|/
分析:定义乘除法运算符
样例:a*b a/b
<关系运算符> ::= <|<=|>|>=|!=|==
分析:定义关系运算符小于,不大于,不小于,大于,不等于,等于
样例:a>b a<=b a!=b
<字母> ::= _|a|...|z|A|...|Z
分析:定义字母,是由下划线 _ 和26个字母的大小写组成的,不允许除此之外的其他字符
样例:_ a b z A B Z
<数字> ::= 0|<非零数字>
分析:定义数字的形式,0~9
样例:0 1 2 3 4 9
<非零数字> ::= 1|...|9
分析:定义非零数字,是1~9
样例:1 2 3 4 9
<字符> ::= ‘<加法运算符>’|’<乘法运算符>’|’<字母>’|’<数字>’
分析:定义字符的形式,它是被‘’包裹的加法运算符或者乘法运算符或者字母或者数字
样例:‘+’‘-’‘*’‘a’‘_’
<字符串> ::= “{十进制编码为32,33,35-126的ASCII字符}”
分析:定义字符串的格式,字符串是被“”包裹的若干个(可以是0个)十进制ascii码值为32,33,35~126的字符组合
样例:“abcd”
<程序> ::= [<常量说明>][<变量说明>]{<有返回值函数定义>|<无返回值函数定义>}<主函数>
分析:程序定义为严格顺序的 常量说明-字符串说明-有返回值函数定义-无返回值函数定义-主函数 的字符串组合,其中常量说明和变量说明可以没有,如果有,只能出现一次(即不存在多个常量或者变量说明语句),有返回值函数定义和无返回值函数定义可以有若干个,以主程序结尾。
样例:
const int a,b,c;
int q,w,e;