我的语法文件中有以下词法分析器规则:
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的那些字母。
知道我做错了吗?
答案 0 :(得分:1)
请注意规则:
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+)+
;