这是我的代码,我需要将其解析为ast:
one
two
three
four
five
six
seven
如您所见,它是压痕驱动的。我真的找不到解释我的解析器(我正在使用antlr4)的方法,即领先空间是子级别的指标。
基本上,如果没有Lexer的帮助,您就无法向解析器解释。
相反,您要做的就是入侵Lexer,以跟踪在跨空间扫描时启动线路的空间数量。如果空间数量从上一行发生变化,则Lexer会发出令牌。如果计数上升,请发出缩进的令牌。如果计数下降,请发出一个detent令牌。
现在,您可以在解析器规则中添加缩进和删除令牌。他们在逻辑上像{and}一样,用c般的语言。