java - 在没有语法文件的情况下以编程方式在 Antlr 中实现语法、解析器和词法分析器需要做什么?
问题描述
从我在网上看到的示例和到目前为止阅读的内容来看,使用 Antlr 创建语言的典型方法似乎需要一个.g4
语法文件和一个类似的工具maven-antlr-plugin
来基于此生成 Java 源代码。
是否可以在没有语法文件且不必使用这样的生成器的情况下从头开始实现事物?
在不涉及太多无聊的细节的情况下,我们需要实现一种语言,该语言将在运行时定义相当多的动态部分,并且对它们进行硬编码对我们不起作用。因此我问。
以编程方式实现这一点至少需要什么?词法分析器和解析器的实现?还有什么?
有人可以提供一个不需要生成代码的简约这种实现的例子吗?
解决方案
你最好实现一个Earley 解析器,它本质上是由一组语法规则直接驱动的。
想要不同的语言?修改规则集,将其交给 Earley 解析引擎。
一个更有趣的问题可能是,“对于其中一些规则是恒定的而一些是动态的语法,什么样的解析机制是有效/高效的?” 我已经跟踪解析机器很长时间了,还没有看到这个问题,更不用说看到它的答案了。我怀疑如果您根据不同规则的占位符对 Earley 解析器与基线解析器进行部分评估,您可能会得到一些有用的东西,但这显然是一个研究项目。