首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EBNF到Bison - Reduce/Reduce错误

EBNF到Bison - Reduce/Reduce错误
EN

Stack Overflow用户
提问于 2012-06-20 10:00:06
回答 1查看 921关注 0票数 0

我必须将这个EBNF转换为bison:

代码语言:javascript
复制
<compound-statement> ::= begin [ <statement> ( ; <statement> )*] end

<statement> ::= 
| <assignment>
| <if-statement>
| <while-statement>
| <proc-func-call>
| <compound-statement>

当我转换赋值、if、while语句和proc_func_时,bison中没有错误。但是,当我在bison中键入以下内容时,将转换复合语句:

代码语言:javascript
复制
compound_statement : BEGINKEY state ENDKEY ;
state : | statement stm ;
stm : | BQUESTIONMARK statement stm ;

有一个reduce/reduce错误。

谁能给我解释一下,为什么会有一个reduce/reduce错误,因为它对我来说没有任何意义。我真的很感激。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 22:00:44

因此,您有一种Pascal式语言,其中分号是语句分隔符,而不是结束符。

我假设BQUESTIONMARK是分号(";")的标记。

我认为,使用一种需要第一条语句的生产,然后使用另一种左递归生产来提供可选的附加语句,您会做得最好。

我可能误解了什么,但是您的语法允许statestm一样为epsilon (null),我认为这就是您的reduce/reduce错误的根源。

我会这样处理这个问题:

代码语言:javascript
复制
compound_statement : BEGINKEY first_statement statements ENDKEY
                   | BEGINKEY first_statement ENDKEY
                   ;

first_statement : statement ;

statement : assignment
          | if_statement
          | while_statement
          | proc_func_call
          | compound_statement
          ;

statements : statements statement_with_semi
           | statement_with_semi
           ;

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

https://stackoverflow.com/questions/11111876

复制
相关文章

相似问题

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