编译设计技术问询:表达式文法中产生式8的三阶递归解析
关于《Compiler Design in C》中产生式8的三阶递归解释
首先明确三阶递归的核心判定逻辑:若从某个非终结符X出发,经过3次产生式推导后,结果中再次出现X,就构成三阶递归(推导链长度为3,中间经过2个非终结符的替换)。
结合书中常见的简单表达式文法,产生式8通常是Factor → ( Expr ),再配合关联的另外两个产生式:
- 产生式1:
Expr → Term - 产生式7:
Term → Factor * Term
我们可以通过具体推导步骤验证:
- 第一步推导:用产生式1,将
Expr替换为Term→ 得到Term - 第二步推导:用产生式7,将
Term替换为Factor * Term→ 得到Factor * Term - 第三步推导:用产生式8,将
Factor替换为( Expr )→ 得到( Expr ) * Term
此时能看到,经过3步推导后,起始非终结符Expr再次出现在结果中。整个递归链以Expr为起点,经过Term、Factor两个中间非终结符过渡,最终通过产生式8回到Expr,这就是产生式8属于三阶递归的原因。
举个具象的例子,推导带括号的表达式(a+b)*c时,推导链的开头就是上述三阶递归过程:Expr → Term → Factor * Term → ( Expr ) * Term → 后续继续展开Expr就能得到具体表达式。
内容的提问来源于stack exchange,提问作者yapkm01
相关产品推荐
相关产品推荐

