文档详情

编译原理课件---西安电子科技大学个人主页系统--我的西电-….ppt

发布:2025-06-07约3.65千字共12页下载文档
文本预览下载声明

内容回忆消除二义性消除左递归消除左因子递归下降预测分析〔递归下降子程序〕文法,状态迁移关系,EBNF,递归下降子程序下推自动机*1

3.4自上而下语法分析2非递归的预测分析不采用递归调用预测分析器的关键是如何选择一个非终结符的产生式非递归的预测分析器通过检查分析表来选择产生式〔表驱动的预测分析器〕a+b$输入缓冲区(被分析的符号串)预测分析程序分析表M输出流XYZ$栈(文法符号串)初始时栈中除了$以外,只含有文法的开始符号分析表是二维数组M[A,a]A为非终结符,a为终结符或者$

3a+b$输入缓冲区(被分析的符号串)预测分析程序分析表M输出流XYZ$栈(文法符号串)初始时栈中除了$以外,只含有文法的开始符号分析表是二维数组M[A,a]A为非终结符,a为终结符或者$PA3.4自上而下语法分析

分析器工作过程预测分析程序根据当前栈顶符号X和输入符号a决定分析器的动作〔4种情况〕如果X=a=$,分析器宣布分析成功并停机43.4自上而下语法分析a+b$输入缓冲区预测分析程序分析表M输出流XYZ$栈分析表是二维数组M[A,a]如果X=a?$,分析器弹出栈顶符号X,并推进输入指针,指向下一个输入符号如果X是终结符但不是a,那么分析器报揭发现语法错误〔调用错误处理〕如果X是非终结符,分析器访问分析表M,假设M[X,a]是X的产生式〔M[X,a]={X?UVW}〕,用UVW代替栈顶。如果M[X,a]提示错误,那么分析器调用错误恢复

5驱动器算法算法3.4非递归的预测分析输入 输入序列ω和文法G的预测分析表M输出 假设ω∈L(G),得到ω的一个最左推导;否那么指出一个错误方法 初始格局为:〔#S,ω#,分析器的第一个动作〕 令ip指向ω#中的第一个终结符,top指向S; loopx:=top^;a:=ip^; if x∈T then if x=a thenpop(x);next(ip); --匹配终结符 elseerror(1); endif; --出错:栈顶终结符不是a else if M[x,a]=X→Y1Y2...Yk thenpop(X);push(YkYk-1...Y2Y1); --展开非终结符 elseerror(2); endif; --出错:产生式不匹配 endif; exitwhenx=a=#; --分析成功 endloop;

预测分析表的构造非递归预测分析方法的特征是预测分析器与文法无关,所有预测分析器的驱动器都是相同的,而唯一不同的是预测分析表因此,所谓构造预测分析器,实际上就是构造给定文法的预测分析表63.4自上而下语法分析非终结符输入符号id+?...EE?TE?E?E??+TE?TT?FT?T?T???T???FT?FF?id

7栈输入输出$Eid?id+id$$E?Tid?id+id$E?TE?$E?T?Fid?id+id$T?FT?$E?T?idid?id+id$F?id$E?T??id+id$$E?T?F??id+id$T???FT?$E?T?Fid+id$$E?T?idid+id$F?id非终结符输入符号id+?...EE?TE?E?E??+TE?TT?FT?T?T???T???FT?FF?id预测分析器根据分析表检测输入id*id+id是否能有文法表达

83.4自上而下语法分析预测分析表的构造包括两局部1.首先根据文法构造两个集合,FIRST和FOLLOW2.然后根据两个集合构造预测分析表定义3.10文法符号序列α的FIRST集合为: FIRST(α)={a|α=*a...,a∈T},假设α=*ε,那么ε∈FIRST(α)定义3.11非终结符A的FOLLOW集合如下: FOLLOW(A)={a|S=*...Aa...,a∈T}, 假设A是某句型的最右符号,那么#∈FOLLOW(A)。通俗地讲,α的FIRST集合就是从α开始可导出的文法符号序列中的开头终结符。而A的FOLLOW集合,就是从开始符号可以导出的所有含A的文法符号序列中A之后的终结符。

例如:9L→E;L|εE→TE E→+TE|-TE|εT→FTT→*FT|/FT|mod

显示全部
相似文档