首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTLR歧义引用

ANTLR歧义引用
EN

Stack Overflow用户
提问于 2011-07-22 06:59:09
回答 1查看 404关注 0票数 2

当我编译以下ANTLR语法文件时,

代码语言:javascript
复制
conditional_expression
    : (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
    ;

我得到以下错误消息。

错误(132):nesC.g:769:109: reference $conditional_expression是模棱两可的;规则conditional_expression是封装规则并在生产中引用的(assu明封装规则)

有人能告诉我这件事的解决办法吗?谢谢。:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-22 07:23:57

ANTLR无法确定您所说的$conditional_expression的含义:规则本身,还是标记为$rhs的规则。

代码语言:javascript
复制
conditional_expression // <--- this one?
  :  (logical_or_expression -> logical_or_expression) 
     ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))?
                           //     ^
                           //     |
                           //     +--- or this one?
  ;

要使它像您现在尝试的那样工作,您需要将rhs=conditional_expression移动到自己的规则,在这种情况下,没有模糊的命名:

代码语言:javascript
复制
conditional_expression
  :  (logical_or_expression  -> logical_or_expression) 
     ('?' expression ':' rhs -> ^('?' $conditional_expression expression rhs))?
  ;

rhs
  :  conditional_expression
  ;

但这不也对你有好处吗?

代码语言:javascript
复制
conditional_expression
  :  (e=logical_or_expression                        -> logical_or_expression) 
     ('?' if_true=expression ':' if_false=expression -> ^('?' $e $if_true $if_false))?
  ;

或者:

代码语言:javascript
复制
conditional_expression
  :  (e=logical_or_expression                                                -> logical_or_expression) 
     ('?' if_true=conditional_expression ':' if_false=conditional_expression -> ^('?' $e $if_true $if_false))?
  ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6786645

复制
相关文章

相似问题

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