题目
设有文法G[E]: E- >E+E | E*E | (E)| i, ()是该文法的句子。 A i+E B ii*i C i*(i+i) D i+i E i*i+i
设有文法G[E]: E- >E+E | E*E | (E)| i, ()是该文法的句子。
A i+E
B ii*i
C i*(i+i)
D i+i
E i*i+i
题目解答
答案
### 问题解析
题目给出的文法 $ G[E] $ 是一个简单的算术表达式文法,其中 $ E $ 是起始符号。文法的产生式规则如下:
1. $ E \rightarrow E + E $
2. $ E \rightarrow E * E $
3. $ E \rightarrow (E) $
4. $ E \rightarrow i $
这些规则表示 $ E $ 可以是:
- 两个 $ E $ 之间的加法运算
- 两个 $ E $ 之间的乘法运算
- 括号内的一个 $ E $
- 一个标识符 $ i $
### 选项分析
我们需要检查每个选项是否可以由文法 $ G[E] $ 生成。
#### 选项 A: $ i + E $
- $ i $ 是一个有效的 $ E $。
- $ E $ 可以是任何由文法生成的表达式。
- 但是,根据文法规则, $ E $ 不能直接生成 $ i + E $,因为 $ E $ 不能以 $ + $ 开头。
- 因此, $ i + E $ 不是文法的句子。
#### 选项 B: $ ii* $
- $ i $ 是一个有效的 $ E $。
- 但是,根据文法规则, $ E $ 不能直接生成 $ ii* $,因为 $ E $ 不能以两个 $ i $ 直接相连。
- 因此, $ ii* $ 不是文法的句子。
#### 选项 C: $ i * (i + i) $
- $ i $ 是一个有效的 $ E $。
- $ (i + i) $ 可以由文法生成:
- $ E \rightarrow (E) $
- $ E \rightarrow E + E $
- $ E \rightarrow i $
- $ i * (i + i) $ 可以由文法生成:
- $ E \rightarrow E * E $
- $ E \rightarrow i $
- $ E \rightarrow (i + i) $
- 因此, $ i * (i + i) $ 是文法的句子。
#### 选项 D: $ i + i $
- $ i $ 是一个有效的 $ E $。
- $ i + i $ 可以由文法生成:
- $ E \rightarrow E + E $
- $ E \rightarrow i $
- 因此, $ i + i $ 是文法的句子。
#### 选项 E: $ i * i + i $
- $ i $ 是一个有效的 $ E $。
- $ i * i $ 可以由文法生成:
- $ E \rightarrow E * E $
- $ E \rightarrow i $
- $ i * i + i $ 可以由文法生成:
- $ E \rightarrow E + E $
- $ E \rightarrow i * i $
- $ E \rightarrow i $
- 因此, $ i * i + i $ 是文法的句子。
### 最终答案
根据上述分析,选项 C, D, E 都是文法的句子。但是题目要求选择一个答案,因此我们选择最符合题目要求的选项。
**答案:D $ i + i $**
如果题目允许选择多个答案,那么答案应该是 **C, D, E**。
解析
本题考查上下文无关文法的应用,需要判断给定选项中哪些字符串是文法$G[E]$的句子。文法的规则为:
- $E \rightarrow E + E$
- $E \rightarrow E * E$
- $E \rightarrow (E)$
- $E \rightarrow i$
核心思路是通过递归推导验证每个选项是否符合文法规则。关键点在于:
- 运算符必须连接两个完整的表达式(如$E + E$,不能直接连接运算符和标识符)。
- 括号必须包裹有效表达式(如$(E)$中的$E$需合法)。
- 标识符$i$是原子单位,不能与其他$i$直接拼接。
选项分析
选项A: $i + E$
- $i$是合法的$E$,但$E$不能直接以运算符开头(如$+E$)。
- 无法生成,因为文法中$E$的推导必须以$i$、括号或运算符连接的两个$E$开头。
选项B: $ii*$
- 标识符$i$不能直接拼接(如$ii$),且运算符$*$需连接两个$E$。
- 无法生成,因为文法中无规则允许$i$与$i$直接相连。
选项C: $i * (i + i)$
- 外层结构:$i * (i + i)$可分解为$E * E$,其中左边$E$为$i$,右边$E$为$(i + i)$。
- 括号内推导:$(i + i)$由$E \rightarrow (E)$生成,内部$E$推导为$E + E$,最终每个$E$为$i$。
- 合法生成,符合文法规则。
选项D: $i + i$
- 直接由$E \rightarrow E + E$生成,两个$E$均推导为$i$。
- 合法生成。
选项E: $i * i + i$
- 整体结构:$i * i + i$可分解为$E + E$,其中左边$E$为$i * i$,右边$E$为$i$。
- 左边推导:$i * i$由$E \rightarrow E * E$生成,两个$E$均推导为$i$。
- 合法生成。