如何在代码中生成G4解析器和词法分析器?

时间:2019-03-05 09:00:08

标签: c# python antlr

是否可以直接从Python或C#代码中通过Antlr 4运行时直接在代码内生成antlr lexer和解析器(从给定的g4语法)?

我认为每次需要时调用外部工具会更加方便。

[编辑]

看来我正在寻找与C#或Python中的内存antlr功能类似的东西:

1 个答案:

答案 0 :(得分:3)

用于解析ANTLR4语法并将其转换为ATN +生成目标文件的代码是用Java编写的。该工具代码未翻译为目标语言(仅运行时为翻译语言),因此不可能用其他语言执行相同的工作。该inmenantlr项目只需要将ANTLR4中的Java代码用于其自己的Java代码中即可执行相同的操作,只是需要将其作为外部jar运行。

使您的愿望成为可能的唯一方法是将所有工具代码也翻译成目标语言。

但是,根据您的需要,有一种方法可以为目标语言生成解析器解释器。我已经在vscode-antlr4 extension中完成了此操作,用户可以在其中调试ANTLR4语法。为此,我向ANTLR4添加了解释器所需数据的导出功能(自4.7.2起可用)。然后,可以使用此数据set up the lexer + parser interpreters(将 翻译为目标语言)来解析具有该语法的文件。这些解释器使用与生成的解析器相同的预测引擎,但不保留解析上下文,变量等。