If statement bison中的if-else语句

If statement bison中的if-else语句,if-statement,bison,shift-reduce,If Statement,Bison,Shift Reduce,我想在bison中做if-then语句。问题是,我正在制定一个解决方案,每个人都说这个解决方案是可行的,但事实并非如此:(我的代码是: 声明:matchedsmt |不匹配的mt ; matchedstmt:if'('expression')matchedstmt else matchedstmt | otherstmt ; unmatchedstmt:if'('expression')'语句 | if '('expression ')' matchedstm

我想在bison中做if-then语句。问题是,我正在制定一个解决方案,每个人都说这个解决方案是可行的,但事实并非如此:(我的代码是:

声明:matchedsmt
|不匹配的mt
; matchedstmt:if'('expression')matchedstmt else matchedstmt

| otherstmt                 
;
unmatchedstmt:if'('expression')'语句

| if '('expression ')' matchedstmt else unmatchedstmt   
;
其他stmt:expressionstmt

| compoundstmt  

| iterationstmt     

| returnstmt    
;

其中“if”和“else”是%token

!!在终端,它说我有一个班次/减少

我还尝试了%nonassoc和%left


我能做些什么???

野牛可以在没有任何冲突的情况下处理以下事项:

statement : matchedstmt     
    | unmatchedstmt                 
    ;
matchedstmt : if '(' expression ')' matchedstmt else matchedstmt 
    | otherstmt                 
    ;
unmatchedstmt : if '(' expression ')' statement 
    | if '('expression ')' matchedstmt else unmatchedstmt   
    ;
otherstmt :  expressionstmt 
    | compoundstmt  
    | iterationstmt     
    | returnstmt    
    ;
这并不奇怪,因为您正在使用标准机制来消除
if…else
语句的歧义

据推测,shift-reduce冲突在语法中的其他地方,可能涉及与此片段的交互。我建议您一次添加更多语句类型,直到找到导致冲突的规则为止。不幸的是,LR语法组合不好:两个完全没有冲突的片段很有可能当它们组合在一个语法中时产生冲突


总的来说,如果您遵循中的指导原则,您会发现在StackOverflow问题上会得到更好的答案。特别是,您应该首先尝试找到显示您正在体验的问题的最小程序,然后将所有这些都放到您的问题中。这就是我们所说的a,它的优点是有人尝试回答你的问题可以准确地看到你在做什么


无法编译或执行的代码摘要不是MCVE。创建MCVE可能看起来是一项艰巨的工作,有时也是如此。但除了帮助人们回答你的问题外,它还可以帮助你回答自己的问题,因为它可以帮助你专注于问题。因此,这是一项非常有用的练习。

r使用
%nonassoc
解决此问题

%nonassoc THEN

%nonassoc ELSE

%%


statement:              TIF TLPAREN expression TRPAREN TTHEN statement %prec THEN

                        | TIF TLPAREN expression TRPAREN TTHEN statement TELSE statement


%%

到底是什么让你认为问题出在语法的那一部分?请使用
{}格式化你的代码
按钮。@rici这是因为我删除了我的语法部分,terminal成功地编译了我的代码。很抱歉我的代码格式不好,因为我是一个新用户。我知道你是一个新用户,我知道如何格式化代码并不总是显而易见的。但这并不难。你可以用mini编辑你自己的问题然后,只需几秒钟即可正确格式化代码:选择代码并点击
{}
按钮。打开编辑控件后,花几分钟时间阅读编辑帮助(请参见
图标)。