据我所知,最新的ANTLR4不再为词法分析器和解析器构建静态DFA表,现在他们在运行时就这样做了。它是否正确?有人可以解释一下ANTLR4的工作原理吗?
答案 0 :(得分:3)
我们最近的论文描述了excruciating, academic detail中的机制。第3节提供了高级概述:
ALL(*)解析器不依赖于静态语法分析,而是适应在分析时呈现给它的输入句子。解析器使用类似GLR的机制分析当前决策点(具有多个产生的非终端),以探索关于当前“进程中非终结点”的“调用”堆栈和按需的剩余输入的所有可能的决策路径。解析器逐步动态地构建每个决策的预测DFA,记录从先行序列到预测生产数的映射。如果到目前为止构造的DFA与当前的前瞻相匹配,则解析器可以跳过分析并立即扩展预测的替代方案。
我们使用增强转换网络(ATN)来表示语法,但使用非常类似于NFA到DFA转换成名的子集构造算法的算法来构建DFA。
希望这有帮助。