加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – AnTLR4:INDENT和DEDENT令牌

发布时间:2020-12-16 21:39:12 所属栏目:Python 来源:网络整理
导读:我在AnTLR4中实现了 Python语法,但我遇到了与此处讨论的INDENT和DEDENT相同的问题: ANTLR4- dynamically inject token 我正在尝试的解决方案是转换Ter的解决方案,可以在这里找到http://antlr3.org/grammar/1078018002577/python.tar.gz(覆盖nextToken并插入
我在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); }
        |   '14' // 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());}
    ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读