如何在代码中生成 antlr a g4 解析器和词法分析器?
How to generate antlr a g4 parser and lexer in code?
是否可以直接在代码中生成 antlr 词法分析器和解析器(从给定的 g4 语法),或者直接从 Python 或 C# 代码使用 Antlr 4 运行时?
我觉得每次调用外部工具会更方便。
[编辑]
看来我正在寻找类似于 C# 或 Python 的内存中 antlr 功能的东西:
解析 ANTLR4 语法并将它们转换为 ATN + 生成目标文件的代码写在 Java 中。此工具代码未翻译成目标语言(只有 运行time 是),因此无法用其他语言完成相同的工作。 inmenantlr 项目只在其自己的 Java 代码中使用来自 ANTLR4 的 Java 代码来做同样的事情,除了需要 运行 它作为外部 jar。
实现您的愿望的唯一方法是将所有工具代码也翻译成目标语言。
但是,根据您的需要,有一种方法可以为您的目标语言生成解析器解释器。我已经在我的 vscode-antlr4 extension, where users can debug their ANTLR4 grammars. For that I added an export feature of the data required for the interpreter to ANTLR4 (it's available there since 4.7.2). This data can then be used to set up the lexer + parser interpreters(其中 被 翻译成目标语言)中使用该语法解析文件。这些解释器使用与生成的解析器相同的预测引擎,但不保留解析上下文、变量等。
是否可以直接在代码中生成 antlr 词法分析器和解析器(从给定的 g4 语法),或者直接从 Python 或 C# 代码使用 Antlr 4 运行时?
我觉得每次调用外部工具会更方便。
[编辑]
看来我正在寻找类似于 C# 或 Python 的内存中 antlr 功能的东西:
解析 ANTLR4 语法并将它们转换为 ATN + 生成目标文件的代码写在 Java 中。此工具代码未翻译成目标语言(只有 运行time 是),因此无法用其他语言完成相同的工作。 inmenantlr 项目只在其自己的 Java 代码中使用来自 ANTLR4 的 Java 代码来做同样的事情,除了需要 运行 它作为外部 jar。
实现您的愿望的唯一方法是将所有工具代码也翻译成目标语言。
但是,根据您的需要,有一种方法可以为您的目标语言生成解析器解释器。我已经在我的 vscode-antlr4 extension, where users can debug their ANTLR4 grammars. For that I added an export feature of the data required for the interpreter to ANTLR4 (it's available there since 4.7.2). This data can then be used to set up the lexer + parser interpreters(其中 被 翻译成目标语言)中使用该语法解析文件。这些解释器使用与生成的解析器相同的预测引擎,但不保留解析上下文、变量等。