我在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替代方案的最后一个元素。
任何人都可以帮我找到解决方案吗?
非常感谢!!!
答案 0 :(得分:3)
您需要将涉及spaces
的计算移至LEADING_WS
规则的末尾或nextToken
的实施。在LEADING_WS
结束时,它可能如下所示。
LEADING_WS
: {getColumn()==1}?
// match spaces or tabs, tracking indentation count
[ \t]+
{spaces = computeSpaces(_input.getText());}
;