【问题标题】:ANTLR Token auto-generated in lexer词法分析器中自动生成的 ANTLR 令牌
【发布时间】:2017-10-18 11:39:47
【问题描述】:

我必须编写一个解析器来将输入解析为解析树,但我遇到了我的令牌和自动生成的令牌的问题。以下示例是我的问题的简短版本。这是语法:

    s : a B a;
    a : '-' C | C;
    B : '-' | '+';
    C : '1' | '2';>
    WS : ( ' ' | '\t' | '\r' | '\n')+ -> skip ;

我的输入:- 1 - 2

我的输出树是(s (a - 1) <missing B> (a - 2))

我想要的输出树是(s (a - 1) - (a 2))

在文件 lexer.java 中有一些像 T__* 这样的标记是自动生成的。我相信其中一个会是T__* : '-',它与我的令牌 B 重复。因为它首先出现,所以没有符号 - 导致 B。所有符号 - 都会导致 T__*。我想这就是原因。我说的对吗?

我应该怎么做才能得到正确的树?

【问题讨论】:

    标签: antlr lexer auto-generate


    【解决方案1】:

    好的,我找到了解决方案。新语法应该是这样的。

        s : a b a;
        a : '-' c | c;
        b : ADD | SUB;
        c : ONE | TWO;
        ADD : '+';
        SUB : '-';
        ONE : '1';
        TWO : '2';
        WS : ( ' ' | '\t' | '\r' | '\n')+ -> skip ;
    

    虽然我找到了解决方案,但我仍然不知道我的错误语法发生了什么。无论如何,希望这可以帮助遇到同样问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多