在没有语法文件的情况下,要在Antlr中以编程方式实现语法,解析器和词法分析器,我需要做什么?

时间:2019-05-19 21:38:34

标签: java antlr

从我在网上看到的示例以及到目前为止阅读的内容来看,使用Antlr创建语言的典型方法似乎需要一个.g4语法文件和一个{{1 }},以此为基础生成Java源代码。

是否可以从头开始实现而无需语法文件且不必使用此类生成器?

在不涉及太多无聊细节的情况下,我们需要实现一种语言,该语言将在运行时定义许多动态部分,并且对其进行硬编码对我们不起作用。因此,我问。

以编程方式实施此功能至少需要什么?一个词法分析器和解析器的实现?还有什么?

有人可以提供一个不需要代码生成的简约实现示例吗?

2 个答案:

答案 0 :(得分:2)

我认为这在一般情况下是完全不切实际的。 Antlr是一种从语法文件生成解析器的工具...如果您不使用生成语法分析器(因为这是“生成代码”)并使用语法文件,那么实际上,您只是在删除整个Antlr。

您可能会使用运行时库的某些部分(也许是ATN?还是某些较低级别的东西,例如CharacterStream),但是总的来说,您几乎需要从头开始编写自己的通用解析器/词法分析器。

让我回答您的问题:您想从使用Antlr中学到什么?

答案 1 :(得分:2)

最好实现一个Earley parser,它实际上是由一组语法规则直接驱动的。

是否要使用其他语言?修改规则集,将其交给Earley解析引擎。

一个更有趣的问题可能是,“对于某些规则是恒定的而某些规则是动态的语法,哪种语法分析机制是有效/有效的?”我已经跟踪解析机制很长时间了,没有看到这个问题,更不用说答案了。我怀疑,如果您针对带有不同规则的占位符的基线分析器部分评估Earley解析器,那么您可能会得到一些有用的信息,但这显然是一个研究项目。