ANTLR令牌自动生成词法分析器

ANTLR令牌自动生成词法分析器

问题描述:

我必须写一个解析器解析输入到解析树,但我跑到一个问题,我的令牌和令牌自动生成。下面的例子是我的问题的简短版本。这是语法:ANTLR令牌自动生成词法分析器

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__* : '-',它复制我的令牌B.因为它首先出现,没有符号-导致B.所有符号-将导致T __ *。我认为这是原因。我对吗?

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

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

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

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