将EBNF转换为BNF基础知识

时间:2013-02-25 03:50:52

标签: bnf ebnf

我不太确定如何回答我的计算机语言课程的问题。我将以下语句从EBNF表单转换为BNF表单:

EBNF:expr --> [-] term {+ term}

我理解花括号中包含的表达式要重复零次或多次,直角括号中包含的内容表示零或一个选项。如果我的理解是正确的,这是否是正确的转换?

我的BNF:

expr --> expr - term
       | expr + term
       | term

1 个答案:

答案 0 :(得分:2)

我不认为这是对的。事实上,我认为EBNF实际上并不是有效的EBNF。问题How to convert BNF to EBNF的答案显示了如何构建有效的EBNF,引用ISO / 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

MINUS和PLUS是终端(' - '和'+')。这是一个非常严峻但最小的BNF。另一种可能的翻译是:

<expr> ::= [ MINUS ] <term> { PLUS <term> }*

{ ... }*部分表示包含的模式...中的零个或多个(在此示例中为PLUS <term>)。或者您可以使用带引号的字符:

<expr> ::= [ '-' ] <term> { '+' <term> }*

所以可能的备选方案列表继续存在。你必须看看你给予工作的BNF的定义,你应该抱怨你给出的非常草率的EBNF,如果它是ISO标准的EBNF。如果它只是一些名为EBNF的随机BNF风格的语言,我想这只是令人困惑的名字。只要定义了私人方言就可以了,但对于那些不懂方言的人来说,知道正确的答案是不可能的。