如何用给定上下文无关文法解析指定字符串?是否存在任务错误?
问题分析与解答
文法生成的合法字符串范围
给定上下文无关文法规则:
S → aBC B → b | dc C → aD D → ac
从起始符号S推导可得到的所有合法字符串:
- 选择
B→b时:S → aBC → abC → ab aD → ab a ac,最终生成字符串**ab aac**(长度为5) - 选择
B→dc时:S → aBC → a dc C → a dc aD → a dc a ac,最终生成字符串**adcaac**(长度为6)
所有合法字符串必须满足:
- 以
a开头 - 长度为5或6
目标字符串的匹配结果
"abccdef":长度为7,远超文法生成的最大长度6,且文法中没有能生成ccdef片段的规则,无法被解析。"cabddc":以c开头,而文法所有合法字符串都必须以a开头,完全不符合文法规则,无法被解析。
自上而下解析的可行性
自上而下解析(如递归下降解析)对这个文法是可行的:
- 文法无左递归,不会导致解析过程无限循环
- 非终结符的可选产生式首字符无冲突(
B的两个产生式首字符为b和d,互不重叠;C、D均只有一个产生式),不需要回溯就能确定选择哪个产生式。
但前提是待解析字符串属于文法的语言,你给出的两个字符串都不在该语言中,因此任何解析方法都无法完成解析。
结论
任务存在错误:给定的两个字符串均不属于该上下文无关文法生成的语言,无法用该文法完成解析。
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

