对指定CFG中Term推导Factor的疑问及文法规则补充建议
关于Term非终结符推导Factor的问题解答
你完全说对了!这个示例文法确实缺少了关键的一条产生式规则:Term -> Factor。
咱们来拆解一下为什么这条规则必不可少:
- 现有的Term产生式都是左递归形式:
Term -> Term * Factor和Term -> Term / Factor,这些规则只能让Term不断扩展出更多的乘除运算,但没有一个"终止"的基础情况——总不能一直递归下去,最后总得推导到Factor(进而到id或者括号里的Expr)吧? - 比如你提到的字符串
a - b - c,每个Term最终都要推导成id(也就是a、b、c),而id是通过Factor -> id得到的,这中间就必须有一步Term -> Factor来衔接,否则Term根本没法到达Factor,更别说终结符了。
举个具体的推导例子,比如要得到Term → id的过程,正确的推导链应该是:Term → Factor → id
如果没有Term -> Factor这条规则,这个推导链就断了,完全走不通。
所以你的判断非常准确,这个文法必须补充Term -> Factor这条产生式,才能正确完成诸如a - b - c这类字符串的解析,也才能让Term的推导有合理的终止路径。
内容的提问来源于stack exchange,提问作者drewcifer
相关产品推荐
相关产品推荐

