编译原理 语法分析

语法分析负责检查是否符合语法,并转换为语法树。

如图所示,根据语法规则,检查记号流是否符合语法,并输出语法树。

 

上下文无关文法:

 

 

 

 

针对左边蓝框中的每一条,都对应一条产生式规则。

BNF范式:非终结符<> 终结符用下划线标记

最左推导:每次总是选择最左侧的符号进行替换

语法分析:

根据文法G(蓝框)是否能完成对句子S的推导

 

图中的语法规则即是上下文无关文法。

判断是否可以推出,可以则生成语法树,不可以则指出错误的位置。

分析树和二义性

语法分析树 parse tree  

最终的边界就是parse tree的叶子节点

可以存在不同的最左推导:

在第二个图的推导中,先计算3+4,因而不正确。

分析树的含义取决于树的后序遍历。

E表达式T term 项 F Factor因子 终结符 atom 原子

先算乘法,后算加法,确保了计算的正确。

先计算3+4再计算+5,保留了加法的左结合性(最左推导对应了左结合)

递归下降算法:

对于每一个非终结符,提供一个函数。

针对每一个非终结符都存在一个函数,进行判断

注意i++,每次出去第i个元素后,将i++。然后将产生式中的字符与前看符号比对。

B和D是非终结符,也对应着递归调用的函数。

如果是终结符,那么就比对,如果不是,就调用相应的函数。

如果第一条是aBcD,第二条是aBdD,那么也可能需要回溯。如下图所示:

3是num,可以匹配E+T,也可以匹配T。

当parse E时,不决定是E+T还是T,而是parse E之后,根据是否+符号,来判断是E还是T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值