首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bison shift/reduce错误

Bison shift/reduce错误
EN

Stack Overflow用户
提问于 2015-03-21 23:08:11
回答 1查看 60关注 0票数 1

我在野牛中有一个错误,我不知道如何修复。

当我试图编译我的语法时,我得到了1个shift/reduce错误:

代码语言:javascript
复制
START: type_specifier MAIN LBR_R RBR_R LBR_C program RBR_C

program: statement ; 

type_specifier: INT | DOUBLE | VOID;


var_declaration: type_specifier var_declist SECOLON;

var_declist: var_declist COMMA var_intialise | var_intialise;

var_intialise: var_ID | var_ID EQL simple_expression; 



assign : var_ID EQL simple_expression SECOLON; 


statement: expression_stmt | local_declaration | selection_stmt | iteration_stmt| return_stmt | break_stmt; 

local_declaration: var_declaration | assign; 

expression_stmt: expression SECOLON | SECOLON;

selection_stmt: IF LBR_R simple_expression RBR_R LBR_C statement RBR_C;

iteration_stmt: WHILE LBR_R simple_expression RBR_R LBR_C statement RBR_C;

return_stmt: RETURN SECOLON | RETURN expression SECOLON; 

break_stmt: BREAK SECOLON; 




expression: var_ID EQL expression | var_ID INCR_EQL expression | var_ID DECR_EQL expression | var_ID INCR | var_ID DECR | simple_expression; 

simple_expression: simple_expression OR and_expression | and_expression; 

and_expression: and_expression AND unary_rel_expression | unary_rel_expression; 

unary_rel_expression: NOT rel_expression | rel_expression; 

rel_expression: sum_expression relop sum_expression | sum_expression;

relop: LSS_EQL | LSS | GR | GR_EQL | EQUIV | NOT EQL;

sum_expression: sum_expression sumop term | term; 

sumop: ADD | SUB;

term: term mulop unary_expression | unary_expression; 

mulop: MULT | DIV | RMDR; 

unary_expression: factor; 

factor: immutable | var_ID; 

var_ID: ID;

immutable: LBR_R expression RBR_R | call | constant; 

call: ID LBR_R args RBR_R; 

args:  | arg_list; 

arg_list: arg_list COMMA expression | expression; 
constant: INT | CHAR | STRING; 

我得到1个班次/减少在

状态102冲突:1个shift/reduce

具体状态为:

代码语言:javascript
复制
state 102

   11 assign: var_ID EQL simple_expression . SECOLON
   32 expression: simple_expression .  [SECOLON]
   33 simple_expression: simple_expression . OR and_expression

    OR       shift, and go to state 63
    SECOLON  shift, and go to state 111

    SECOLON  [reduce using rule 32 (expression)]

有没有人可以解释一下如何修复这个错误,我知道它与优先级有关。

EN

Stack Overflow用户

发布于 2015-03-22 08:12:03

这与优先级无关。

以下是您的语法的相关子集:

代码语言:javascript
复制
statement: expression_stmt | local_declaration
expression_stmt: expression ';'
expression: var_ID EQL expression | simple_expression
local_declaration: assign
assign: var_ID EQL simple_expression ';'

这显然是不明确的;var = <simple_expression> ;既可以是expression_stmt,也可以是local_declaration。这种歧义通常会导致reduce/reduce冲突,但在这种情况下,由于处理分号的方式,您会得到shift/reduce冲突。在任何情况下,解决方案都是消除歧义。

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

https://stackoverflow.com/questions/29184258

复制
相关文章

相似问题

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