题目
下面哪个文法能定义出语言xy的n次方,n>=1A. S→xyS|xyB. S→Sxy|xyC. A→xyA|xyD. Z→Zxy|xyE. D→xyD|ε
下面哪个文法能定义出语言xy的n次方,n>=1
A. S→xyS|xy
B. S→Sxy|xy
C. A→xyA|xy
D. Z→Zxy|xy
E. D→xyD|ε
题目解答
答案
ABCD
A. S→xyS|xy
B. S→Sxy|xy
C. A→xyA|xy
D. Z→Zxy|xy
A. S→xyS|xy
B. S→Sxy|xy
C. A→xyA|xy
D. Z→Zxy|xy
解析
本题考查上下文无关文法与语言的定义,解题思路是根据给定的文法规则,通过推导过程来判断其能生成的语言是否为 $xy$ 的 $n$ 次方($n\geq1$)。
选项A
文法规则为 $S \to xyS \mid xy$。
- 当使用产生式 $S \to xy$ 时,直接生成字符串 $xy$,此时 $n = 1$。
- 当使用产生式 $S \to xyS$ 时,会不断在已有的字符串后面添加 $xy$。例如,第一次使用 $S \to xyS$ 得到 $xyS$,再使用 $S \to xy$ 就得到 $xyxy$,此时 $n = 2$;若继续使用 $S \to xyS$ 再使用 $S \to xy$ 可得到 $xyxyxy$,此时 $n = 3$,以此类推,可以生成 $ (xy)^n $($ n \geq 1 $)的字符串。
选项B
文法规则为 $S \to Sxy \mid xy$。
- 当使用产生式 $S \to xy$ 时,直接生成字符串 $xy$,此时 $n = 1$。
- 当使用产生式 $S \to Sxy$ 时,会不断在已有的字符串后面添加 $xy$。例如,第一次使用 $S \to Sxy$ 得到 $Sxy$,再使用 $S \to xy$ 就得到 $xyxy$,此时 $n = 2$;若继续使用 $S \to Sxy$ 再使用 $S \to xy$ 可得到 $xyxyxy$,此时 $n = 3$,以此类推,可以生成 $ (xy)^n $($ n \geq 1 $)的字符串。
选项C
文法规则为 $A \to xyA \mid xy$。
- 当使用产生式 $A \to xy$ 时,直接生成字符串 $xy$,此时 $n = 1$。
- 当使用产生式 $A \to xyA$ 时,会不断在已有的字符串后面添加 $xy$。例如,第一次使用 $A \to xyA$ 得到 $xyA$,再使用 $A \to xy$ 就得到 $xyxy$,此时 $n = 2$;若继续使用 $A \to xyA$ 再使用 $A \to xy$ 可得到 $xyxyxy$,此时 $n = 3$,以此类推,可以生成 $ (xy)^n $($ n \geq 1 $)的字符串。
选项D
文法规则为 $Z \to Zxy \mid xy$。
- 当使用产生式 $Z \to xy$ 时,直接生成字符串 $xy$,此时 $n = 1$。
- 当使用产生式 $Z \to Zxy$ 时,会不断在已有的字符串后面添加 $xy$。例如,第一次使用 $Z \to Zxy$ 得到 $Zxy$,再使用 $Z \to xy$ 就得到 $xyxy$,此时 $n = 2$;若继续使用 $Z \to Zxy$ 再使用 $Z \to xy$ 可得到 $xyxyxy$,此时 $n = 3$,以此类推,可以生成 $ (xy)^n $($ n \geq 1 $)的字符串。
选项E
文法规则为 $D \to xyD \mid \epsilon$。
- 当使用产生式 $D \to \epsilon$ 时,生成空字符串,此时 $n = 0$。
- 当使用产生式 $D \to xyD$ 时,会不断在已有的字符串后面添加 $xy$。例如,第一次使用 $D \to xyD$ 得到 $xyD$,再使用 $D \to \epsilon$ 就得到 $xy$,此时 $n = 1$;若继续使用 $D \to xyD$ 再使用 $D \to \epsilon$ 可得到 $xyxy$,此时 $n = 2$,以此类推,可以生成 $ (xy)^n $($ n \geq 0 $)的字符串,不满足 $n\geq1$ 的要求。