计算机编译精选文档.ppt
《计算机编译精选文档.ppt》由会员分享,可在线阅读,更多相关《计算机编译精选文档.ppt(126页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机编译本讲稿第一页,共一百二十六页2.词法分析器和语法分析器的关系(1)词法分析作为单独的一遍输入串词法分析器语法分析器单词流本讲稿第二页,共一百二十六页(2)词法分析作为子程序输入串词法分析器语法分析器符号表取下一单词返回下一单词本讲稿第三页,共一百二十六页二.单词的种类 (1)标识符:用来命名程序中出现的变量、数组、函数、过程、标号等 (2)基本字:也可称关键字或保留字,如if、while、for、do、goto等 (3)常数:各种类型的常数,如216、3.14159、TRUE等 (4)运算符:如+、-、*、/等 (5)界符:如;、:、/*、*/等本讲稿第四页,共一百二十六页三.单词的
2、编码1.单词的输出形式二元式 (单词类别,单词的属性)区分单词所属的类(整数编码)单词的值本讲稿第五页,共一百二十六页2.单词类别的划分u基本字、运算符、界符:一字一码u标识符:单列一种u常数:按类型分类本讲稿第六页,共一百二十六页四.词法错误检查u非法字符u不合规则的常数u标识符前缀为保留字本讲稿第七页,共一百二十六页五.词法分析器的生成1.词法分析技术超前搜索 为了判定一个单词符号的类别,必须扫描到某一地方,而该单词符号并没有这么长,这种扫描方式叫做“超前搜索”。如:DO100I=1,10 DO100I=1.10 IF(5.EQ.M)GOTO 100 IF(5)=100本讲稿第八页,共一百
3、二十六页2.状态转换图u有限的有向图u有限边上标记字符u一个初态u若干终态本讲稿第九页,共一百二十六页例:某语言允许 标识符、基本字、数字串、+、-、*、*、=、=、=、:=、:、;本讲稿第十页,共一百二十六页0412356789开始空白字母/数字字母非字母数字数字非数字+-*非*数字本讲稿第十一页,共一百二十六页101112=1314151617其它=181920:其它=其它2122=;其它*本讲稿第十二页,共一百二十六页 3.实现方法 每个状态结对应一小段程序u分支状态if或case语句u循环状态while语句u终态return语句 4.一个示意算法本讲稿第十三页,共一百二十六页start
4、:token:=;getchar;getnb;case character of az:begin while letter or digit do begin concatenate;getchar end;retract;c:=reserve;if c=0 then begin buildlist;return(id,id在符号表中的位置)end else return(保留字码,)end;本讲稿第十四页,共一百二十六页09:begin while digit do begin concatenate;getchar end;retract;return(num,num在常数表中的位置)e
5、nd;+:return(plus-op,);-:return(minus-op,);*:begin getchar;if character=*then return(power-op,);retract;return(mul-op,);end;本讲稿第十五页,共一百二十六页 then return(rel-op,NE);retract;return(rel-op,LT)end;=:return(rel-op,EQ);:begin getchar;if character=then return(rel-op,GE);retract;return(rel-op,GT)end;:begin ge
6、tchar;if character=then return(assign-op,);retract;return(colon,)end;:return(semicolon,)end of case;error本讲稿第十六页,共一百二十六页全局量及过程:(1)token(2)character(3)getchar(4)getnb(5)concatenate(6)letter和digit(7)reserve(8)retract:退一字符;character置空(9)buildlist:为标识符登记符号表本讲稿第十七页,共一百二十六页第二节 自顶向下语法分析u语法分析:自上而下(自顶而下)自下而上
7、(自底而上)u自顶向下语法分析法:或从开始符号出发,找最左推导;或从根开始,构造推导树。本讲稿第十八页,共一百二十六页一.回溯分析法 1.一个实例 SxAy Aaba输入串为xay,说明分析过程本讲稿第十九页,共一百二十六页Sx A ySx A ya bSx A ya本讲稿第二十页,共一百二十六页 2.存在的问题(1)回溯公共左因子的存在 A1|2(2)左递归 AA 或 AA+本讲稿第二十一页,共一百二十六页二.无回溯的递归下降分析法 1.提取公共左因子 A1|2|.|n|改写为:AB|B 1|2|.|n 本讲稿第二十二页,共一百二十六页 2.左递归的消除(1)直接左递归的消除 PP改写为:P
8、P PP一般地 AA1|A2|Am|1|2|n (i,j不以A开头)改写为:P1P 2P.nP P 1P2P.mP本讲稿第二十三页,共一百二十六页(2)间接左递归的消除 PP(a)将文法G的所有非终结符按任一给定的顺序排列,设 为A1,A2,An;+本讲稿第二十四页,共一百二十六页(b)消除可能的左递归;for i:=1 to n do begin for j:=1 to i-1 do 把一个形如AiAj的产生式改写为 Ai1|2|k 其中Aj1|2|k是Aj的所有产生式;消除Ai产生式的直接左递归 end(c)化简本讲稿第二十五页,共一百二十六页以 SQcc QRbb RSaa为例,按S,Q
9、,R排列,或R,Q,S排列本讲稿第二十六页,共一百二十六页u按S、Q、R排列,代入后 SQcc QRbb R Rbcabcacaau消除R中的直接左递归 R bcaRcaRaR R bcaRu文法产生的语言:(bca|ca|a)(bca)*bc|bc|c本讲稿第二十七页,共一百二十六页u按R、Q、S排列,代入后 RSaa QSababb SSabcabc bcc u消除S中的直接左递归 SabcSbcScS SabcSu文法产生的语言:(abc|bc|c)(abc)*本讲稿第二十八页,共一百二十六页 3.递归下降分析器的构造 当改造文法为无公共左因子,无左递归时,让每个非终结符对应一个过程;该
10、过程对相应的非终结符产生式的右部短语进行语法分析本讲稿第二十九页,共一百二十六页例:G(E)EE+TT TT*FF F(E)iu消除左递归:ETE E+TE TFT T*FT F(E)i本讲稿第三十页,共一百二十六页u过程match:匹配单词符号,并读入下一符号u变量lookahead:即将处理但尚未处理的符号procedure match(t:token);begin if lookahead=t then lookahead=nexttoken else errorend;本讲稿第三十一页,共一百二十六页procedure E;begin T;Eend;procedure T;begin
11、F;Tend;本讲稿第三十二页,共一百二十六页procedure E;if lookahead=+then begin match(+);T;E end;procedure T;if lookahead=*then begin match(*);F;T end;本讲稿第三十三页,共一百二十六页procedure F;if lookahead=i then match(i)else if lookahead=(then begin match();E;if lookahead=)then match()else error end;本讲稿第三十四页,共一百二十六页4.文法的另一种表示及应用.(1
12、)表示形式:u用花括号表示闭包运算*;u用 表示可任意重复0次至n次 =0=;u用方括号表示 ,即表示的出现可有可无(等价于)n00010本讲稿第三十五页,共一百二十六页例:实数可定义为 decimal signinteger.digitexponent exponentEsigninteger integerdigitdigit sign+-本讲稿第三十六页,共一百二十六页(2)左递归的消除 pxy.zpv改写成:p(xy.z)v本讲稿第三十七页,共一百二十六页(3)文法的转换图表示 因产生式右端是一个正则式,故可用转换图表示。如:ET+T 表示成012T+本讲稿第三十八页,共一百二十六页(
13、4)递归下降分析器的改进procedure E;begin T;while lookahead=+do begin match(+);T end end;本讲稿第三十九页,共一百二十六页procedure T;begin F;while lookahead=*do begin match(*);F end end;本讲稿第四十页,共一百二十六页procedure F;if lookahead=i then match(i)else if lookahead=(then begin match();E;if lookahead=)then match()else error end;本讲稿第四十
14、一页,共一百二十六页三.预测分析程序u 构成:下推栈,预测分析表,控制程序,输入串1.预测分析表 形式:MA,a矩阵,AVN,a VT$内容:A或出错标志(空白)本讲稿第四十二页,共一百二十六页预测分析表EETTFi+*()$ETEETEE+TETFTTFTT*FTFiF(E)EETTT本讲稿第四十三页,共一百二十六页2.分析方法 初始时,$和开始符入栈,输入指针指向第一个符号,然后根据下推栈栈顶符x和当前输入符a进行工作:x=a=$,成功x=a$,匹配 xVN,查表本讲稿第四十四页,共一百二十六页例:i+i*i的分析过程下推栈输入串查分析表i+i*i$E$ET$ETF$ET$ETi$E$ET
15、$ET+i+i*i$+i*i$i+i*i$i+i*i$+i*i$+i*i$i*i$ETETFTTFTFiTE+TE本讲稿第四十五页,共一百二十六页$ETF i*i$ETi$ET$ETF*$ETi$ETF$ET$E *i$i$*i$i$T*FT结束FiT i*i$FiE本讲稿第四十六页,共一百二十六页四.LL(1)文法1FIRST集(1)定义:对(VTVN)*,有 FIRST()a|a.,aVT 若,则FIRST()(2)对文法符号XVTVN(3)当=X1X2Xn时*本讲稿第四十七页,共一百二十六页uXVT,则FIRST(X)=X;uXVN,分三种情形:Xa XY XY1Y2Yk本讲稿第四十八页
16、,共一百二十六页 2.FOLLOW集(1)定义:对AVN,有 FOLLOW(A)=aS.Aa.,aVT 若S .A,则$FOLLOW(A),其中S为开始符号*本讲稿第四十九页,共一百二十六页(2)求法u$FOLLOW(S)uAB:将FIRST()-加入FOLLOW(B)uAB或者AB且:将FOLLOW(A)加入FOLLOW(B)注意:求FOLLOW(B)实际上是考察B在产生式右端的每一次出现*本讲稿第五十页,共一百二十六页例:G(E)ETE E+TE TFT T*FT F(E)i本讲稿第五十一页,共一百二十六页EETTFFIRSTFOLLOW(i(i(i+*)$)$+)$+)$*+)$本讲稿第
17、五十二页,共一百二十六页 3.LL(1)文法定义 设 上 下 文 无 关 文 法G的 产 生 式 形 如A1|2|m,当G满足下述条件时则称为LL(1)文法:FIRST(i)FIRST(j)=,ij,i,j=1,2,.,n若i,则FIRST(j)FOLLOW(A)=,j=1,2,.,n且ji。于是,在自顶向下分析时,可根据当前输入符号a选择aFIRST(i)的Ai。*本讲稿第五十三页,共一百二十六页五.预测分析表的构造1.构造算法 对每个产生式A对aFIRST(),将A记入MA,a中;若FIRST(),对bFOLLOW(A),将A记入MA,b中;凡未被定义的MA,a项中标以出错标志。本讲稿第五
18、十四页,共一百二十六页如:G(E)ETE E+TE TFT T*FT F(E)iEETTFFIRSTFOLLOW(i(i(i+*)$)$+)$+)$*+)$本讲稿第五十五页,共一百二十六页预测分析表EETTFi+*()$ETEETEE+TETFTTFTT*FTFiF(E)EETTT本讲稿第五十六页,共一百二十六页2.预测分析表的改进MA,a中只记产生式右部;对=x1x2.xn,在M,a中记xn xn-1.x1;当xn xn-1.x1的x1VT时,x1必为a,x1无须入栈,只移动输入指针。本讲稿第五十七页,共一百二十六页第三节 自底向上语法分析u方法:从输入串开始,归约,直至文法开始符。本讲稿第
19、五十八页,共一百二十六页O.规范归约简介1.什么叫规范归约?假定是文法G的一个句子,序列n,n-1,0满足下述条件时称为规范归约。(1)n=;(2)0为文法的开始符,即0=S;(3)对i,0in,i-1是从i经把句柄替换为相应产生式的左部符号而得到的。本讲稿第五十九页,共一百二十六页 2.分析过程例1:G(E)EE+TT TT*FF F(E)i i+i*i的分析过程本讲稿第六十页,共一百二十六页EET+FTii*FTiFi+i*iF+i*iT+i*iE+i*iE+F*iE+T*iE+T*FE+TE本讲稿第六十一页,共一百二十六页例2:G(S)SaAcBe AAb|b Bd abbcde的分析过
20、程本讲稿第六十二页,共一百二十六页Sa A c B e A b d babbcdeaAbcdeaAcdeaAcBeS本讲稿第六十三页,共一百二十六页一.算符优先分析法1.算符文法 上下文无关文法G,没有形如P或P.QR.的产生式,则称G为算符文法算符文法本讲稿第六十四页,共一百二十六页2.终结符之间的优先关系 对算符文法G,a,bVT 定义(1)a=b:G中有P.ab.或P.aQb.(2)ab:G中有P.Qb.且Q.a 或QaR+本讲稿第六十五页,共一百二十六页3.算符优先文法 若算符文法G的任何终结符a,b之间的优先关系至多有=、=算符优先关系表本讲稿第六十七页,共一百二十六页从上表可知:(
21、1)相同终结符之间的优先关系未必是=(2)有aa(3)a、b之间未必一定有优先关系 故=、不同于关系运算符“等于”、“小于”、“大于”本讲稿第六十八页,共一百二十六页4.算符优先分析方法 设a为栈顶终结符初始化:$栈读一符号ba=b=$ab归约最左素短语,最左素短语出栈,左部符号入栈结束b入栈出错YNYYNN本讲稿第六十九页,共一百二十六页u归约最左素短语的方法:这是一种结构归约,处于栈顶待归约的最左素短语与对应的产生式在结构上应一致,即长度一致,对应的终结符一致,而非终结符可以不一致。例 G(E)EE+TT TT*FF F(E)i i+i*i的分析过程本讲稿第七十页,共一百二十六页步骤123
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 编译 精选 文档
限制150内