我必须编写一个解析器来解析输入到解析树中但我遇到了令牌和令牌自动生成的问题。以下示例是我的问题的简短版本。这是语法:
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))
有一些标记,如T __ *,它是在文件lexer.java中自动生成的。我相信其中一个会T__* : '-'
复制我的令牌B.因为它首先出现,所以没有符号-
导致B.所有符号-
都会导致T __ *。我想这就是原因。我是对的吗?
我该怎么做才能得到正确的树?
答案 0 :(得分:0)
好的,我得到了解决方案。新语法应该是这样的。
s : a b a;
a : '-' c | c;
b : ADD | SUB;
c : ONE | TWO;
ADD : '+';
SUB : '-';
ONE : '1';
TWO : '2';
WS : ( ' ' | '\t' | '\r' | '\n')+ -> skip ;
虽然我找不到解决方案,但我仍然不知道我的错误语法发生了什么。无论如何,希望这有助于某人有同样的问题。