首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与antlr语法谓词不匹配的predicates

与antlr语法谓词不匹配的predicates
EN

Stack Overflow用户
提问于 2010-05-03 21:31:17
回答 1查看 299关注 0票数 1

我的语法文件中有以下词法分析器规则:

代码语言:javascript
复制
   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上的单个字母应该是规则。

知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2010-05-04 01:23:49

请注意,规则:

代码语言:javascript
复制
RULE
  :  (('->' ('F' | 'G')) => 'F' | 'G')
  |  LINE LINE + 
  |  LINE * (ROTATE + LINE+)+ 
  ;

匹配不带谓词的单个G。上面的规则可以重写为:

代码语言:javascript
复制
RULE
  :  ( ('->' ('F' | 'G')) => 'F' 
     | 'G'
     )
  |  LINE LINE + 
  |  LINE * (ROTATE + LINE+)+ 
  ;

它反过来等于:

代码语言:javascript
复制
RULE
  :  ('->' ('F' | 'G')) => 'F' 
  |  'G'
  |  LINE LINE + 
  |  LINE * (ROTATE + LINE+)+ 
  ;

也许你想做这样的事情:

代码语言:javascript
复制
RULE
  :  ('->' ('F' | 'G')) => ('F' | 'G')
  |  LINE LINE + 
  |  LINE * (ROTATE + LINE+)+ 
  ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2758360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档