移进一归约分析冲突 二义文法G不适合移进一归约分析 eg.18移进-归约冲突 文法Gz: s->if e then s if E then s else s S→a “句柄”? 分析栈 输入串: S... if E then S else 当前输入符号 2021/2/2 《编译原理与技术》讲义 16
2021/2/2 《编译原理与技术》讲义 16 移进-归约分析冲突 二义文法G不适合移进-归约分析 e.g. 18 移进-归约冲突 文法G7: S→ if E then S | if E then S else S S→ a $... … if E then S “句柄”? else... … 分析栈 输入串: 当前输入符号
文法G7:S→ if e then s| if e then s else s|a 移进动作∥期待新的“长句柄” 分析栈 栈顶 输入串: $… E then s else 归约动作 分析栈 输入串: S else 2021/2/2 《编译原理与技术》讲
2021/2/2 《编译原理与技术》讲义 17 $... … if E then S else 栈顶 ... … 分析栈 输入串: $ … … S else ... … 分析栈 输入串: -归约动作 -移进动作 文法G7 : S→ if E then S | if E then S else S | a 期待新的“长句柄
移进一归约分析冲突 ne.919二义性文法G如下 E→迮E+E|E*E|(E)|id 输入串id+id+d$的最右推导: 1)E→E+E→E+jdE+E+d→E+/d+id→i+d+id 2)E→E+E→E+E+EE+E+jo→E+/d+id→jd+id+id 带下划线的符号串是相应句型的句柄 2021/2/2 《编译原理与技术》讲义 18
2021/2/2 《编译原理与技术》讲义 18 e.g.19 二义性文法G8如下: E→E+E | E * E | (E) | id 输入串id+id+id$的最右推导: 1)EE+EE+idE+E+idE+id+idid+id+id 2)EE+EE+E+EE+E+idE+id+idid+id+id 带下划线的符号串是相应句型的句柄。 移进-归约分析冲突
e.9.19输入串id+id+id$的栈分析过程 分析1) 输入串 分析2 id+id+ids Sid +id+ids Sid 距距距 +id+ids E id+ids $E+ tid +ids SEtid $E+E归约+id 移进$E+E E +ids ids SE+E+ 2021/2/2 《编译原理与技术》讲义 19
2021/2/2 《编译原理与技术》讲义 19 e.g.19输入串id+id+id$的栈分析过程 分析1) 输入串 分析2) $ id+id+id$ $ $id +id+id$ $id $E +id+id$ $E $E+ id+id$ $E+ $E+id +id$ $E+id $E+E +id$ $E+E $E +id$ id$ $E+E+ 归约 移进
eg.19输入串d+id+id$的栈分析过程 分析1) 输入串 分析2) SE+E +ids +ids SE+E E +ids ids $E+E+ $E+ d$$ SE+E+id SE+id SE+E+E SE+E $$ SE+E E $$ E 2021/2/2 《编译原理与技术》讲义
2021/2/2 《编译原理与技术》讲义 20 e.g.19输入串id+id+id$的栈分析过程 分析1) 输入串 分析2) $E+E +id$ +id$ $E+E $E +id$ id$ $E+E+ $E+ id$ $ $E+E+id $E+id $ $ $E+E+E $E+E $ $ $E+E $E $ $ $E