【问题标题】:Chomsky Hierarchy and LL(*) parsersChomsky Hierarchy 和 LL(*) 解析器
【发布时间】:2009-01-14 08:57:13
【问题描述】:
我想解析一种编程语言。我阅读了很多关于形式语言、乔姆斯基层次结构和 ANTLR 的内容。但是我找不到有关如何将 ANTLR v3 语言作为 LL(*) 递归下降解析器接受的乔姆斯基层次结构的信息。
Chomsky 类型如何与 LL(*) 混合?非常感谢任何信息(在线、书籍、论文)。
编辑:ANTLR 的句法/语义谓词和回溯如何映射到此?
【问题讨论】:
标签:
parsing
compiler-construction
antlr
theory
chomsky-hierarchy
【解决方案1】:
乔姆斯基层次结构基本上是:
- 常规语言
- 上下文无关语法
- 上下文相关语法
- 递归可枚举(图灵完备)语法
LL 语法(和解析器)是上下文无关语法的一个子集。之所以使用它们,是因为常规语言对于编程目的来说太弱了,并且因为一般的上下文无关解析器是 O(n^3),这对于解析程序来说太慢了。
事实上,用辅助函数增强解析器确实使它更强大。
The Wikipedia entry on LL parsers 解释了其中的一些内容。The Dragon Book 被认为是关于编译器的领先教科书,并且可能会进一步解释。
【解决方案2】:
LL(*) 是上下文无关语言的一个子集。然而,一个不同的问题是 antlr 可以解析什么,给定谓词和回溯,这扩展了它的能力。
请注意,如果我们谈论 LL(*),则表示 ANTLR v3,而不是 2。