编译原理 语法分析

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

编译原理 语法分析_第1张图片

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

编译原理 语法分析_第2张图片

 

编译原理 语法分析_第3张图片

上下文无关文法:

编译原理 语法分析_第4张图片

编译原理 语法分析_第5张图片

 

 

 

编译原理 语法分析_第6张图片

编译原理 语法分析_第7张图片

 

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

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

编译原理 语法分析_第8张图片

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

编译原理 语法分析_第9张图片

语法分析:

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

编译原理 语法分析_第10张图片

 

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

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

分析树和二义性

语法分析树 parse tree  

编译原理 语法分析_第11张图片

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

编译原理 语法分析_第12张图片

编译原理 语法分析_第13张图片

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

编译原理 语法分析_第14张图片

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

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

编译原理 语法分析_第15张图片

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

编译原理 语法分析_第16张图片

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

编译原理 语法分析_第17张图片

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

递归下降算法:

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

编译原理 语法分析_第18张图片

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

编译原理 语法分析_第19张图片

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

编译原理 语法分析_第20张图片

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

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

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

编译原理 语法分析_第21张图片

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

编译原理 语法分析_第22张图片

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

你可能感兴趣的:(编译原理)