AnTLR4:INDENT和DEDENT令牌

pin*_*ker 5 python grammar lexer antlr4

我在AnTLR4中实现了Python语法,但我遇到了与此处讨论的INDENT和DEDENT相同的问题:ANTLR4-动态注入令牌

我正在尝试的解决方案是转换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
        )+
        {
        }
        ...
Run Code Online (Sandbox Code Playgroud)

但是我一直都会收到错误,因为词法分析器中的操作必须是单个altermost替代方案的最后一个元素.

任何人都可以帮我找到解决方案吗?

非常感谢!!!

Sam*_*ell 3

您需要将涉及的计算移至规则spaces末尾LEADING_WS或 的实现nextToken。最后LEADING_WS可能如下所示。

LEADING_WS
  : {getColumn()==1}?
    // match spaces or tabs, tracking indentation count
    [ \t]+
    {spaces = computeSpaces(_input.getText());}
    ;
Run Code Online (Sandbox Code Playgroud)