当我使用输入(3)执行下面的语法时,我得到了这个解析树:

它不能识别右括号。可能的问题是什么?
term
: IDENT | '(' term ')' | INTEGER
;
INTEGER : '0'..'9'+;
IDENT : ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9')*;
WS : (' ' | '\t' | '\r' | '\n' | '\f')+{$channel = HIDDEN;};发布于 2011-11-26 23:30:26
我认为这可能是UI中的错误。我认为解析器看到了)。您是否尝试过从Java调用解析器?
public static void main(String[] args)
throws Exception
{
// TODO Auto-generated method stub
ANTLRStringStream strstrm = new ANTLRStringStream("(3)");
ffLexer lex = new ffLexer(strstrm);
CommonTokenStream tokStrm = new CommonTokenStream(lex);
ffParser prs = new ffParser(tokStrm);
prs.term();
}如果将操作添加到术语规则中:
term
: IDENT | a='(' term b=')' {System.out.println($a.text + " " + $b.text);} | INTEGER
;您应该会得到输出
( )此外,如果您创建另一个解析器规则:
prog: term+;然后向输入(3)(4)(5)提供预期的解析树
https://stackoverflow.com/questions/8279017
复制相似问题