使用最新的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作为替代,为什么它不起作用?
答案 0 :(得分:1)
很多时候,没有EOF(文件末尾),无论你开始使用它都会导致问题。 试试
表达式:(id | method)EOF;
另外,作为旁注,放[a-zA-Z0-9]而不是('a'..'z'|'A'..'Z'|'0'要容易得多。 .'9'|'')和[\ r \ t \ n]而不是(''''\ t'|'\ r'|'\ n'),但您的版本也可以正常工作。