我在AnTLR4中实现了
Python语法,但我遇到了与此处讨论的INDENT和DEDENT相同的问题:
ANTLR4- dynamically inject token
我正在尝试的解决方案是转换Ter的解决方案,可以在这里找到http://antlr3.org/grammar/1078018002577/python.tar.gz(覆盖nextToken并插入虚构的标记).
问题是这个解决方案假设我们有一个词法分析器规则,如:
LEADING_WS : {getColumn()==1}? // match spaces or tabs,tracking indentation count ( ' ' { spaces++; } | '\t' { spaces += 8; spaces -= (spaces % 8); } | '\014' // formFeed is ok )+ { } ...
但是我一直都会收到错误,因为词法分析器中的操作必须是单个altermost替代方案的最后一个元素.
任何人都可以帮我找到解决方案吗?
非常感谢!!!
解决方法
您需要将涉及空格的计算移动到LEADING_WS规则的末尾或nextToken的实现.在LEADING_WS结束时,它可能如下所示.
LEADING_WS : {getColumn()==1}? // match spaces or tabs,tracking indentation count [ \t]+ {spaces = computeSpaces(_input.getText());} ;