将EBNF转换为BNF基础



我不太确定如何回答计算机语言类的问题。我将以下声明从EBNF表格转换为BNF表格:

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

我知道大括号中包含的表达式将重复零次或多次,而直角大括号中包括的内容表示零或一个选项。如果我的理解是正确的,这会是一个正确的转换吗?

我的BNF:

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

奖励阅读

  • 将EBNF转换为BNF(一般规则(

我认为这是不对的。事实上,我不认为EBNF实际上是有效的EBNF。如何将BNF转换为EBNF的问题的答案显示了EBNF是如何构建的,引用了ISO/IEC 14977:1996,即扩展的Backus Naur格式标准。

我认为表达:

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是端子(用于"-"one_answers"+"(。这是一个非常严峻但最小的BNF。另一种可能的翻译是:

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

其中{ ... }*部分表示所包含的图案...中的零个或更多个(因此在本示例中为PLUS <term>(。或者你可以使用引号字符:

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

因此,可能的替代方案列表还在继续。你必须看看你被赋予工作的BNF的定义,如果它是ISO标准的EBNF,你应该抱怨你被赋予的非常草率的EBNF。如果这只是一种叫做EBNF的随机BNF风格的语言,我想这只是一个令人困惑的名字。私人方言只要有定义就可以,但不了解方言的人不可能知道正确答案是什么。

最新更新