📄 编译定义.txt
字号:
一、词法分析
1.关键字(0)
int float if then while do
2.用户自定义标志符/变量(1)
由字母开头的字母和数字组成的序列,区分大小写
3.数字(2)
由0-9和.组成的序列
4. 算术运算符(3)
+ - * /
5.比较运算符(4)
< > ==
6.赋值运算符(5)
=
二、语法分析
1.EBNF范式表示:
<变量说明>::=<变量类型><标志符>
<变量类型>::=int|float
<语句>::=<变量说明>|<赋值语句>|<条件语句>|<循环语句>
<赋值语句>::=<标志符>=<表达式>
<表达式>::=<项>{<算术运算符><项>}
<项>::=<标志符>|<数字>
<条件语句>::=if<条件>then<赋值语句>
<条件>::=<标志符><比较运算符><数字>
<循环语句>::=while<条件>do<赋值语句>
<标志符>::=<字母>
<算术运算符>::=+|-|*|/
<关系运算符>::=<|>|==
<赋值运算符>::==
<字母>::=a|b|...|X|Y|Z
<数字>::=0|1|2...7|8|9
备注:一行代码就是一条完整的语句,所以不需要界符。
2.为了更好的运用词法分析的中间结果,为了更方便的进行语法分析,不妨将语法G[S]重新定义为:
终结符:类型变量(a)、if(b)、then(c)、while(d)、do(e)、标志符(f)、数字(g)、算术运算符(h)、比较运算符(i)、赋值运算符(j)(、空符号串(k)、结束符(l))
非终结符:语句(S)、变量说明(A)、条件语句(B)、循环语句(C)、赋值语句(D)、表达式(E)、项(F)、条件(G)(、无意义非终结符(H))
开始符:语句(S)
该文法可以转变为LL(1)文法,所以可以用确定的自顶向下语法分析中的预测分析方法。
下面是改写后的文法:
G[S]:
S->A|B|C|D
A->ab
B->bGcD
G->fiE
E->FH
F->f|g
D->fjE
C->dGeD
H->k|hF
3.构造的预测分析表:
三、Test program:
int a
float b
a=12
if a==1 then b=a
while b<10 do b=b+1
四、心得体会
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -