我不太清楚如何回答我的计算机语言课的问题。我要将以下声明从EBNF表单转换为BNF表单:
EBNF:expr --> [-] term {+ term}
我知道,花括号中包含的表达式要重复0次或多次,直角大括号中包含的内容代表零或一个选项。如果我的理解是正确的,这是否正确的转换?
我的BNF:
expr --> expr - term
| expr + term
| term奖金阅读
发布于 2013-02-25 06:48:16
我觉得这不对。事实上,我不认为EBNF是有效的EBNF。How to convert BNF to EBNF问题的答案显示了如何构造EBNF,引用了国际标准化组织/IEC 14977:1996的扩展巴克斯-诺尔格式标准。
我想这句话是:
expr --> [-] term {+ term}应写明:
expr = [ '-' ] term { '+', term };这意味着表达式由一个可选的减号组成,后面是一个term,后面是一个加号和一个term的零序列。
下一个问题:你针对的是哪一种BNF方言?这里的情况很棘手,有许多方言。然而,这里有一个可能的翻译:
<expr> ::= [ MINUS ] <term> <opt_add_term_list>
<opt_add_term_list> ::= /* Nothing */
| <opt_add_term_list> <opt_add_term>
<add_term> ::= PLUS term其中减号和加号是终端(表示“-”和“+”)。这是一个非常简朴但最小的BNF。另一种可能的翻译是:
<expr> ::= [ MINUS ] <term> { PLUS <term> }*其中,{ ... }*部件意味着包含的模式...中的零或多个(在本例中为PLUS <term> )。或者您可以使用引用的字符:
<expr> ::= [ '-' ] <term> { '+' <term> }*因此,一系列可能的替代方案还在继续。你必须看一下给你工作的BNF的定义,如果它是ISO标准EBNF的话,你应该抱怨给你的EBNF非常草率。如果它只是一些随机的BNF风格的语言,叫做EBNF,我想它只是一个令人困惑的名字。私人方言只要被定义就行,但不熟悉方言的人不可能知道正确的答案是什么。
https://stackoverflow.com/questions/15059790
复制相似问题