mismatchedtoken ANTLR的语法谓词
我在语法文件以下词法规则:mismatchedtoken ANTLR的语法谓词
LINE : 'F' | 'G';
RULE : (('->' ('F' | 'G')) => 'F' | 'G')
| LINE LINE + | LINE * (ROTATE + LINE+)+ ;
fragment ROTATE : ('/' | '\\');
基本上,我试图匹配的制作,看起来像的F - > F/F \˚F\ F/F。它成功匹配上面的东西,但我猜我的语法谓词有问题,因为G - > G会产生MismatchedTokenException。谓词用于消除在' - >'的lhs上的单个字母之间的歧义,我希望将其识别为LINE令牌,而在rhs上的那些符号应该是RULE。
任何想法我做错了什么?
注意以下规则:
RULE
: (('->' ('F' | 'G')) => 'F' | 'G')
| LINE LINE +
| LINE * (ROTATE + LINE+)+
;
匹配单个G
没有谓语。上面的规则可以被改写为:
RULE
: (('->' ('F' | 'G')) => 'F'
| 'G'
)
| LINE LINE +
| LINE * (ROTATE + LINE+)+
;
这反过来等于:
RULE
: ('->' ('F' | 'G')) => 'F'
| 'G'
| LINE LINE +
| LINE * (ROTATE + LINE+)+
;
也许你打算做这样的事情:
RULE
: ('->' ('F' | 'G')) => ('F' | 'G')
| LINE LINE +
| LINE * (ROTATE + LINE+)+
;
你是对的,但没有帮助。我通过将'G'或'F'与LINE令牌进行匹配并将RULE的后两种选择留给RULE,然后将生成的解析器规则定义为LINE' - >'RULE或LINE' - >'LINE。 – varzan 2010-05-15 16:17:06
好的。很高兴听到你解决它! – 2010-05-15 16:56:49
不宜行片段太? – 2010-05-05 13:32:33
@安德斯:不,我的语法的其他部分需要它作为标记 – varzan 2010-05-15 16:14:10