【发布时间】: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> )
这就够了吗?
【问题讨论】:
-
你必须以
<exp>开头,不是吗?
标签: grammar expression-trees bnf