语法分析是编译的第二个阶段。


语法分析的主要任务

语法分析器(parser)从词法分析其输出的token序列中识别出各类短语,并构造语法分析树(parse tree),语法分析树描述了句子的语法结构。

例1:赋值语句的分析树

一个标识符或者常数本身可以构成一个表达式,一个表达式加上或者乘上另外一个表达式可以构成一个更大的表达式,一个标识符连接一个赋值号再连接一个表达式最后连接一个分号可以构成一个赋值语句。

例2:变量声明语句的分析树

文法由一系列规则构成。

<D>-><T><IDS>;
<T>->int|real|char|bool
<IDS>->id|<IDS>,id

D为Declaration首字母,表示声明语句,T为Type首字母,表示类型,IDS为IDentify Sequence缩写,表示标识符序列。

从第一条规则可以看出,一个声明语句(D)是由一个类型(T)连接上一个标识符序列(IDS)和一个分号(;)构成的。

从第二条规则可以看出,类型(T)可以是int或real或char或bool。

从第三条规则可以看出,标识符(id)本身可以构成一个标识符序列(IDS),或者一个标识符序列(IDS)连接一个逗号再连接一个id可以构成一个更大的标识符序列(IDS)。

根据上述文法,假如输入:

1
int a,b,c;

分析树如下图所示:

从分析树可以看出,一个id本身可以构成一个<IDS>,一个<IDS>连接上一个逗号再连接一个id以后可以构成一个更大的<IDS>,一个类型<T>连接一个标识符序列<IDS>和一个分号(;)可以构成一个声明语句。

最后修改日期:2020年5月23日

留言

撰写回覆或留言