首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bison语法(1 reduce/reduce 1 shift/reduce )

Bison语法(1 reduce/reduce 1 shift/reduce )
EN

Stack Overflow用户
提问于 2012-12-29 01:03:51
回答 1查看 168关注 0票数 0

已更新...我知道,我的语法是模棱两可的,但是我如何重写这个语法来消除这种歧义呢?

我有一个语法就像这样:

Bison文件

代码语言:javascript
复制
%left equal nEqual
%left gre less greOrEqual lessOrEqual
%left plus sub
%left DIV mult exp mod
%left not
%left leftB rightB
%%


S :
var "=" A ";"  
;


A:
 Aexp   
|Rexp   
;

Aexp :
Num                                     
| leftB Aexp  rightB               
| Aexp  plus    Aexp            
| Aexp  sub     Aexp            
| Aexp  DIV     Aexp            
| Aexp  mult    Aexp            
;


Rexp :
Aexp                            
| Rexp  gre Rexp                
| Rexp  less Rexp               
| Rexp  greOrEqual  Rexp                
| Rexp  lessOrEqual Rexp            
| Rexp  equal Rexp              
| Rexp  nEqual Rexp             
;

我得到了1个shift/reduce和1个reduce/reduce冲突,我如何改变语法来消除冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-29 02:16:31

你的语法模棱两可。A可以是AexpRexp。但Rexp也可以是Aexp。这会导致reduce/reduce冲突。

假设您将此令牌序列作为输入提供给解析器:

变量= Num ;

开始符号S扩展为var =A ;

非终端A必须与令牌Num匹配。但这应该是一个A,它扩展到Aexp,然后扩展到Num,或者它应该是一个A,它扩展到and Rexp<代码>E227,然后扩展到<代码>E128Aexp<代码>E229,然后扩展到<代码>E130Num<代码>E231

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14073024

复制
相关文章

相似问题

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