【问题标题】:Consider the following BNF Grammar考虑以下 BNF 语法
【发布时间】:2010-12-08 07:44:04
【问题描述】:

考虑以下 BNF 语法(其中非终结符用尖括号括起来,<identifier> 匹配任何合法的 Java 变量标识符)。

<exp> ::= <exp> + <term>
      |   <exp> - <term>
      |   <term>
<term> ::= <term> * <factor>
       |   <term> / <factor>
       |   <factor>
<factor> ::= ( <exp> )
         |   <identifier>

为以下表达式生成推导三:

(x - a) * (y + b)

盯着exp:

<exp>

用术语替换exp:

<term>

将术语替换为:

<term> * <factor>

用因子替换术语:

<factor> * <factor>

用 (exp) 替换这两个因素:

( <exp> ) * ( <exp> )

将第一个 exp 替换为 exp - term,第二个替换为 exp + term

( <exp> - <term> ) * ( <exp> + <term> )

将两个 exp 替换为 term,然后将所有 4 个术语替换为因子。

( <factor> - <factor> ) * ( <factor> + <factor> )

用标识符替换所有因素

( <identifier> - <identifier> ) * ( <identifier> + <identifier> )

这就够了吗?

【问题讨论】:

  • 你必须以&lt;exp&gt;开头,不是吗?

标签: grammar expression-trees bnf


【解决方案1】:

您需要更进一步 - &lt;factor&gt; 是一个非终结符,您应该将其缩减为 &lt;identifier&gt;

此外,您应该从&lt;expr&gt; 开始(然后将其减少到&lt;term&gt;),而不是直接从&lt;term&gt; 开始。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2022-06-14
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多