ANTLR4是否在某个时候构建自动机?

ANTLR4是否在某个时候构建自动机?,antlr,antlr4,Antlr,Antlr4,据我所知,最新的ANTLR4不再为lexer和解析器构建静态DFA表,现在它们在运行时完成了这项工作。这是正确的吗?有人能大致解释一下ANTLR4是如何工作的吗?我们最近的论文描述了ANTLR4的工作机制。第3节提供了一个高层次的概述: ALL(*)解析器不依赖于静态语法分析,而是在解析时适应提供给它的输入句子。解析器使用类似GLR的机制分析当前决策点(具有多个产品的非终端),以探索与进程内非终端的当前“调用”堆栈和剩余按需输入相关的所有可能决策路径。解析器以增量和动态的方式为每个决策构建一个前

据我所知,最新的ANTLR4不再为lexer和解析器构建静态DFA表,现在它们在运行时完成了这项工作。这是正确的吗?有人能大致解释一下ANTLR4是如何工作的吗?

我们最近的论文描述了ANTLR4的工作机制。第3节提供了一个高层次的概述:

ALL(*)解析器不依赖于静态语法分析,而是在解析时适应提供给它的输入句子。解析器使用类似GLR的机制分析当前决策点(具有多个产品的非终端),以探索与进程内非终端的当前“调用”堆栈和剩余按需输入相关的所有可能决策路径。解析器以增量和动态的方式为每个决策构建一个前瞻DFA,该决策记录从前瞻序列到预测生产编号的映射。如果到目前为止构造的DFA与当前的前瞻相匹配,解析器可以跳过分析并立即扩展预测的替代方案

我们使用增强转换网络(ATN)来表示语法,但使用与NFA到DFA转换的子集构造算法非常相似的算法来构建DFA


希望这有帮助。

谢谢。我需要在用户键入代码时“实时”解析。这是用于语法突出显示等。您认为您的方法的性能足以处理此问题吗?@akonsu——很容易,但需要遵守许多警告。Primary能够在后台/非显示线程上的每次击键后启动新的完整解析,如果在下一次击键之前没有完成,则丢弃该线程。”通常情况下,每次解析都会有足够的时间进行屏幕更新。绝对足够快。看报纸上其他工具的枪战。还有许多工具将antlr用于IDE,包括NetBeans和我的Intellij插件。