意外的ANTLR语法行为

时间:2013-11-08 17:04:37

标签: antlr antlr3

使用最新的ANTLR Works 1.5,以及以下语法:

语法TestMethod;

ID:('a'..'z'|'A'..'Z'|'')('a'..'z'|'A'..'Z'|' 0' .. '9' | '')*     ;

WS :('''         | '\ t'         | '\ r'         | '\ n'         )     ;

ws:(WS)*     ;

id:ID     ;

表达     : ID     |方法     ;

方法
    :标识符ws'('ws')'     ;

标识符     :(id(selector)*'。')? ID     ;

选择器     :     '' ID     | '['ws表达ws']'     ;

在提交以表达式开头的abcd时,我得到NoViableAltException。从id开始时我没有得到这个错误,所以因为表达式有id作为替代,为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

很多时候,没有EOF(文件末尾),无论你开始使用它都会导致问题。 试试

  

表达式:(id | method)EOF;

另外,作为旁注,放[a-zA-Z0-9]而不是('a'..'z'|'A'..'Z'|'0'要容易得多。 .'9'|'')和[\ r \ t \ n]而不是(''''\ t'|'\ r'|'\ n'),但您的版本也可以正常工作。