《编译技术编译原理 (26).pdf》由会员分享,可在线阅读,更多相关《编译技术编译原理 (26).pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译技术语 法 分 析本讲纲要LR文法和LR分析方法的特点LR分析的错误恢复二义文法 LR文法:能为之构造出所有条目都唯一的LR分析表L R 分 析 方 法 的 特 点栈中的文法符号总是形成一个活前缀。示例中的右推导过程为:E=E+T=E+F=E+id=T+id=T*F+id=T*id+id=F*id+id=id*id+id栈栈输输入入动动作作0 id*id+id$移进移进0 id 5*id+id$按按F id归约归约0 F 3*id+id$按按T F归约归约0 T 2*id+id$移进移进0 T 2*7 id+id$移进移进0 T 2*7 id 5+id$按按F id归约归约0 T 2*7
2、F 10+id$按按T T*F归约归约.0 E 1$接受接受E=E+T=E+F=E+id=T+id=T*F+id=T*id+id=F*id+id=id*id+idL R 分 析 方 法 的 特 点栈中的文法符号总是形成一个活前缀。分析表的转移函数本质上是识别活前缀的DFA。L R 分 析 方 法 的 特 点例:E E+T|E T T T*F|T EF (E)|F id状态动作转移id +*()$E T F 0 s5 s4 1 2 3 1s6 acc 2r2 s7 r2 r2 3r4 r4 r4 r4 4 s5 s4 8 2 3 L R 分 析 方 法 的 特 点栈中的文法符号总是形成一个活前缀
3、。分析表的转移函数本质上是识别活前缀的DFA。栈顶的状态符号包含了确定句柄所需要的一切信息。是已知的最一般的无回溯的移进-归约方法。能分析的文法类是预测分析法能分析的文法类的真超集。能及时发现语法错误。缺点:手工构造分析表的工作量太大。L R 分 析 方 法 和 L L 分 析 方 法 的 比 较LR(1)方方 法法LL(1)方方 法法建立分析树的方式建立分析树的方式自自 下下 而而 上上自自 上上 而而 下下决定使用产生式的时机决定使用产生式的时机看见产生式整个右看见产生式整个右部推出的东西后才算是部推出的东西后才算是看准了用哪个产生式进看准了用哪个产生式进行归约行归约看见产生式右部看见产生
4、式右部推出的第一个终结符推出的第一个终结符后便确定用哪个产生后便确定用哪个产生式进行推导式进行推导归约还是推导归约还是推导规规 范范 归归 约约最最 左左 推推 导导L R 分 析 方 法 和 L L 分 析 方 法 的 比 较在下面的推导中,最后一步用的是在下面的推导中,最后一步用的是A l S rm rm A b w rm l b wLL(1)决定用该决定用该产生式的位置产生式的位置LR(1)决定用该决定用该产生式的位置产生式的位置L R 分 析 方 法 和 L L 分 析 方 法 的 比 较LR(1)方方 法法LL(1)方方 法法对文法的显式限制对文法的显式限制对文法没有限制对文法没有限
5、制无左递归、无左递归、无公共左因子无公共左因子分析栈比较分析栈比较状态栈,通常状状态栈,通常状态比文法符号包含更态比文法符号包含更多信息多信息文法符号栈文法符号栈分析表比较分析表比较状态文法符号状态文法符号分析表大分析表大非终结符终结符非终结符终结符分析表小分析表小L R 分 析 方 法 和 L L 分 析 方 法 的 比 较LR(1)方方 法法LL(1)方方 法法确定句柄确定句柄根据栈顶状态和下一个符号根据栈顶状态和下一个符号便可以确定句柄和归约所用便可以确定句柄和归约所用产生式产生式无句柄概念无句柄概念语法错误语法错误决不会将出错点后的符决不会将出错点后的符号移入分析栈号移入分析栈和和LR一样,决不会读一样,决不会读过出错点而不报错过出错点而不报错编译技术语 法 分 析