语义和语法结构之间的关系

 根据语法分析的难度, 可以为所有的上下文无关语法划分一个层次结构, 最常用的即: 任意CFG, LR(1)语法, LL(1) 语法, 正则语法(RG)。


语义和语法结构之间的关系_第1张图片

相比LR(1) 或 LL(1), 任意CFG需要花费更多的时间进行语法分析,  Earley 算法可以在O(n**3) 的时间内解析任意CFG, n为输入流中的单词数目, 相对低效。


LR(1)  包含了无歧义CFG的很大一个子集。 LR(1) 语法可以通过从左到右线性扫描自底向上进行语法分析, 任何时候都只需要从当前输入符号前瞻最多一个单词。 很多工具可以从LR(1)语法导出语法分析器, 这使得LR(1)语法分析器应用较为广泛。 


LL(1) 语法是LR(1) 语法的一个重要子集, LL(1) 语法可以通过从左到右线性扫描, 自顶向下进行语法分析。 只需要前瞻一个单词。利用手工编码的递归下降语法分析器或者生成的LL(1)语法分析器, 都可以解析LL(1)语法。


正则语法是生成正则语言的CFG。正则语法等价于正则表达式, 定义了DFA可以识别的那些语言。 在构建编译器的过程中, 正则语言主要用于定义词法分析器。


几乎所有的程序语言都可以用LR(1)形式表达, 通常也可以用LL(1)形式表达, 大多数编译器使用的快速语法分析算法, 是基于这两种。


你可能感兴趣的:(语言/编译/虚拟机)