我目前正在参加“编译器构造”课程,并且正在Antlr 4 中开发简化的Java 语法。涉及Java 语法的部分工作得很好,只是它与原始Java 略有不同。
我被告知我不应该使用括号,而是使用缩进。我尝试了一些来自互联网的示例,只有 Antlr 3 的示例在 Antlr 4 中不起作用。
谁能帮我解决这个缩进问题,或者为我提供 Antlr 4 的 Python 语法?
我目前正在参加“编译器构造”课程,并且正在Antlr 4 中开发简化的Java 语法。涉及Java 语法的部分工作得很好,只是它与原始Java 略有不同。
我被告知我不应该使用括号,而是使用缩进。我尝试了一些来自互联网的示例,只有 Antlr 3 的示例在 Antlr 4 中不起作用。
谁能帮我解决这个缩进问题,或者为我提供 Antlr 4 的 Python 语法?
那么官方 GitHub ANTLR4 语法库呢?您可以找到许多常见的语言语法。甚至还有一个包含Python3.g4
.
这应该可以帮助你。
我写了一个小型库来帮助解决这个用例:antlr-denter。
简而言之,您在语法中定义 INDENT 和 DEDENT 标记,做一些样板文件将 antlr-denter 挂钩到 antlr 生成的词法分析器中,然后就可以走了。例如,如下所示的代码:
hello:
world
<eof>
可能会生成令牌流WORD COLON INDENT WORD DEDENT
。