从我在网上看到的示例以及到目前为止阅读的内容来看,使用Antlr创建语言的典型方法似乎需要一个.g4
语法文件和一个{{1 }},以此为基础生成Java源代码。
是否可以从头开始实现而无需语法文件且不必使用此类生成器?
在不涉及太多无聊细节的情况下,我们需要实现一种语言,该语言将在运行时定义许多动态部分,并且对其进行硬编码对我们不起作用。因此,我问。
以编程方式实施此功能至少需要什么?一个词法分析器和解析器的实现?还有什么?
有人可以提供一个不需要代码生成的简约实现示例吗?
答案 0 :(得分:2)
我认为这在一般情况下是完全不切实际的。 Antlr是一种从语法文件生成解析器的工具...如果您不使用生成语法分析器(因为这是“生成代码”)并使用语法文件,那么实际上,您只是在删除整个Antlr。
您可能会使用运行时库的某些部分(也许是ATN?还是某些较低级别的东西,例如CharacterStream),但是总的来说,您几乎需要从头开始编写自己的通用解析器/词法分析器。
让我回答您的问题:您想从使用Antlr中学到什么?
答案 1 :(得分:2)
最好实现一个Earley parser,它实际上是由一组语法规则直接驱动的。
是否要使用其他语言?修改规则集,将其交给Earley解析引擎。
一个更有趣的问题可能是,“对于某些规则是恒定的而某些规则是动态的语法,哪种语法分析机制是有效/有效的?”我已经跟踪解析机制很长时间了,没有看到这个问题,更不用说答案了。我怀疑,如果您针对带有不同规则的占位符的基线分析器部分评估Earley解析器,那么您可能会得到一些有用的信息,但这显然是一个研究项目。