如何将缩进驱动的代码解析为 AST
How to parse indentation-driven code into AST
这是我需要解析成 AST 的代码:
one
two
three
four
five
six
seven
如您所见,它是缩进驱动的。我真的找不到一种方法来解释我的解析器(我使用的是 Antlr4),前导 space 是子级别的指示器。
基本上,如果没有词法分析器的帮助,您无法向解析器解释它。
相反,您要做的是破解词法分析器,以在扫描 space 时跟踪开始一行的 space 的数量。如果 space 计数从上一行发生变化,则词法分析器发出一个标记。如果计数上升,则发出 INDENT 令牌。如果计数下降,则发出 DEDENT 令牌。
现在您可以将 INDENT 和 DEDENT 标记添加到解析器规则中。它们在逻辑上类似于类 C 语言中的 { 和 }。
这是我需要解析成 AST 的代码:
one
two
three
four
five
six
seven
如您所见,它是缩进驱动的。我真的找不到一种方法来解释我的解析器(我使用的是 Antlr4),前导 space 是子级别的指示器。
基本上,如果没有词法分析器的帮助,您无法向解析器解释它。
相反,您要做的是破解词法分析器,以在扫描 space 时跟踪开始一行的 space 的数量。如果 space 计数从上一行发生变化,则词法分析器发出一个标记。如果计数上升,则发出 INDENT 令牌。如果计数下降,则发出 DEDENT 令牌。
现在您可以将 INDENT 和 DEDENT 标记添加到解析器规则中。它们在逻辑上类似于类 C 语言中的 { 和 }。