我的语法文件中有以下词法分析器规则:
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上的单个字母和rhs上的单个字母之间的歧义,我希望将其识别为LINE令牌,而rhs上的单个字母应该是规则。
知道我做错了什么吗?
发布于 2010-05-04 01:23:49
请注意,规则:
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+)+
;https://stackoverflow.com/questions/2758360
复制相似问题