这是我需要解析为 AST 的代码:
one
two
three
four
five
six
seven
如您所见,它是缩进驱动的。我真的找不到一种方法来解释我的解析器(我正在使用 Antlr4),前导空格是子级别的指示符。
最佳答案
基本上,如果没有词法分析器的帮助,你无法向解析器解释它。
相反,您所做的就是破解词法分析器,以在扫描空格时跟踪一行开头的空格数。如果空间计数与上一行相比发生变化,则词法分析器会发出一个标记。如果计数增加,则发出 INDENT 标记。如果计数下降,则发出 DEDENT token 。
现在您可以将 INDENT 和 DEDENT 标记添加到解析器规则中。它们的逻辑行为类似于类 C 语言中的 { 和 }。
关于java - 如何将缩进驱动的代码解析为 AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936000/