如何将缩进驱动的代码解析为AST

时间:2016-12-02 15:45:27

标签: java antlr antlr4 abstract-syntax-tree

这是我需要解析为AST的代码:

one
 two
  three
   four
 five
 six
  seven

正如您所见,它是缩进驱动的。我真的找不到解释我的解析器的方法(我正在使用Antlr4),前导空格是子级别的指示符。

1 个答案:

答案 0 :(得分:3)

基本上,如果没有lexer的帮助,你无法向解析器解释它。

相反,你所做的就是破解词法分析器,以便在扫描空间时跟踪开始行的空格数。如果空间计数从前一行更改,则词法分析器会发出令牌。如果计数增加,则发出一个INDENT令牌。如果计数下降,则发出DEDENT令牌。

现在,您可以将INDENT和DEDENT标记添加到解析器规则中。它们在逻辑上与C语言中的{和}相似。