问题标签 [shift-reduce]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
33 浏览

c++ - Shift-Reduce 解析器中缺少移位值

我正在使用来自 geeksforgeeks 的 Shift-Reduce Parsers 代码并更改了一些规则,我的规则是:

  • P->E,
  • E->E + T
  • T->T*F | F
  • F->( E ) | ID

我正在使用来自 geeksforgeeks.org 的代码并更改了一些规则并将输入更改为“(id + id)”并且发生了这种情况。我尝试了很多方法,但输出仍然与以前相同。这是我的输出。

一切都很好,直到它将 char '+' 转换为堆栈并变为 '\0'。代码运行到最后,堆栈 $( E.

我真的很感谢你的回答。

0 投票
1 回答
35 浏览

compiler-construction - 野牛中的嵌套移位/减少冲突?

我对此很陌生,我试图了解这里发生了什么,我得到两个班次减少冲突。我有语法(如果我遗漏了一些东西,我可以添加所需的规则):

我得到了这种转变/减少冲突:

所以我将其理解为:当我得到“(”时,我可以做两件事。首先,从 direct_declarator 我得到 LPAR 声明符 RPAR,其中 LPAR 是“(”
......或......
我可以减少 direct_abstract_declarator->array_abstract_declarator-> direct_abstract_declarator_opt->direct_abstract_declarator->LPAR abstract_declarator RPAR 其中 LPAR 又是“(”。所以我无法决定走哪条路正确?
我应该如何解决这个冲突?还是我完全看错了?