1

考虑以下 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 - term 替换第一个 exp,用 exp + term 替换第二个

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

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

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

用标识符替换所有因素

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

这够了吗?

4

1 回答 1

6

你需要更进一步 -<factor>是一个非终结符,你应该把它减少到<identifier>.

此外,您应该从<expr>(然后将其减少到<term>)开始,而不是直接从开始<term>

于 2010-12-07T23:25:48.370 回答