【教学课件】第2章PL0编译程序.ppt





《【教学课件】第2章PL0编译程序.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第2章PL0编译程序.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第2 2章章 PL/0 PL/0编译程序编译程序2.1 PL/0语言和类语言和类pcode的描述的描述2.2 PL/0编译程序的结构编译程序的结构2.3 PL/0编译程序的语法语义分析编译程序的语法语义分析 2.4 PL/0编译程序的编译程序的错误处理错误处理2.5 类类pcodepcode代码解释器代码解释器本章目的:以本章目的:以PL/0PL/0为实例为实例,学习编译程序实现的基本步骤和相关技学习编译程序实现的基本步骤和相关技术术 PL/0 PL/0编译程序编译程序 PL/0编译编译程序程序 PL/0 语言程序语言程序 类类 pcode 代吗代吗源语言源语言(PL/0)目标语言目标语言(
2、类类 pcode)实现语言(实现语言(pascal)PL/0 类类 pcode pascal PL/0PL/0编译程序编译程序类类 pcode pcode解释解释程序程序类类 pcode代码代码PL/0源程序源程序输入输入输出输出PL/0PL/0编译系统的结构框架编译系统的结构框架PL/0PL/0语言语言zPL/0PL/0程序示例程序示例zPL/0PL/0的的语法描述图语法描述图zPL/0PL/0语言语言文法的文法的EBNFEBNF表示表示zPL/0PL/0语言:语言:PASCALPASCAL语言的语言的子集子集 PL/0 PL/0程序示例程序示例 CONST A=10;CONST A=10;
3、(*常量说明部分常量说明部分*)VAR B,C;VAR B,C;(*变量变量说明部分说明部分*)PROCEDURE PROCEDURE P;P;(*过程过程说明部分说明部分*)VAR D;VAR D;PROCEDURE PROCEDURE Q;Q;VAR X;VAR X;BEGINBEGIN READ(X);READ(X);D:=X;D:=X;WHILE X#0 WHILE X#0 DO CALL P;DO CALL P;END;END;BEGINBEGIN WRITE(D);WRITE(D);CALL Q;CALL Q;END;END;BEGINBEGIN CALL P;CALL P;END
4、.END.Q的过程体的过程体p的过程体的过程体主主程序程序体体 程序程序分程序分程序.内的文字表示内的文字表示非终结符非终结符或内的文字或符号表示内的文字或符号表示终结符终结符constidentnumbervaridentprocedureident分程序分程序语句语句分程序分程序PL/0PL/0语言文法的语言文法的EBNFEBNF表示表示 EBNF EBNF 引入的符号引入的符号(元符号元符号):用左右尖括号括起来的语法成分为用左右尖括号括起来的语法成分为非终结符非终结符=()=()定义为定义为=()=()的的左部由左部由右部右部定义定义|或或 表示花括号内的语法成分表示花括号内的语法成分
5、可重复可重复任意次或限任意次或限 定次数定次数 表示方括号内的语法成分为表示方括号内的语法成分为任选项任选项()()表示圆括号内的成分表示圆括号内的成分优先优先例:用例:用EBNFEBNF描述描述 的定义的定义 :=+|-=+|-=0|1|2|3|4|5|6|7|8|9=0|1|2|3|4|5|6|7|8|9 或更好的写法或更好的写法 =+|-=+|-|0|0=1|2|3|4|5|6|7|8|9=1|2|3|4|5|6|7|8|9 =0|=0|PL/0PL/0语言是语言是PASCALPASCAL语言的语言的子集子集同同PASCALPASCAL 作用域规则(内层作用域规则(内层可引用包围它的外层
6、定义的可引用包围它的外层定义的标识符),标识符),上下文约束,上下文约束,过程可过程可嵌套定义嵌套定义,可递归调用可递归调用子集子集z数据类型数据类型,只有整型只有整型z数据结构数据结构,只有简变和常数只有简变和常数z数字最多为数字最多为1414位位z标识符的有效长度是标识符的有效长度是1010z语句种类语句种类z过程最多可过程最多可嵌套嵌套三层三层 目标代码目标代码类类pcodepcode目标代码目标代码类类pcodepcode是一种是一种假想栈式计算机假想栈式计算机的的汇编语言汇编语言。指令格式:指令格式:f l af l af f功能码功能码l l层次差层次差 (标识符(标识符引用层引用
7、层减去减去定义层定义层)a a根据不同的指令有所区别根据不同的指令有所区别指指令令功功能能表表 const a=10;const a=10;var b,c;var b,c;procedure p;procedure p;beginbegin c:=b+a;c:=b+a;end;end;beginbegin read(b);read(b);while while b#0b#0 do do begin begin call p;call p;write(2*c);write(2*c);read(b);read(b);end endend.end.(0)jmp 0 8 (0)jmp 0 8 转向转向
8、主程序入口主程序入口(1)jmp 0 2 (1)jmp 0 2 转向转向过程过程p p入口入口(2)(2)int 0 3int 0 3 过程过程p p入口入口,为过程为过程p p开辟空间开辟空间(3)lod(3)lod 1 1 3 3 取变量取变量b b的值到栈顶的值到栈顶(4)lit 0 10(4)lit 0 10 取常数取常数1010到栈顶到栈顶(5)opr 0 2 (5)opr 0 2 次栈顶与栈顶相加次栈顶与栈顶相加(6)sto(6)sto 1 1 4 4 栈顶值送变量栈顶值送变量c c中中(7)(7)opr 0 0opr 0 0 退栈并返回调用点退栈并返回调用点(16)(16)(8)
9、(8)int 0 5 int 0 5 主程序入口开辟主程序入口开辟5 5个栈空间个栈空间(9)opr 0 16(9)opr 0 16 从命令行读入值置于栈顶从命令行读入值置于栈顶(10)sto 0 3 (10)sto 0 3 将栈顶值存入变量将栈顶值存入变量b b中中(11)lod 0 3 (11)lod 0 3 将变量将变量b b的值取至栈顶的值取至栈顶(12)lit 0 0 (12)lit 0 0 将常数值将常数值0 0进栈进栈(13)opr 0 9 (13)opr 0 9 次栈顶与栈顶是否不等次栈顶与栈顶是否不等(14)(14)jpc 0 24jpc 0 24 等时转等时转(24)(24
10、)(条件不满足转条件不满足转)(15)(15)cal 0 2cal 0 2 调用过程调用过程p p(16)lit 0 2 (16)lit 0 2 常数值常数值2 2进栈进栈(17)lod(17)lod 0 0 4 4 将变量将变量c c的值取至栈顶的值取至栈顶(18)opr 0 4 (18)opr 0 4 次栈顶与栈顶相乘次栈顶与栈顶相乘(2(2*c)*c)(19)opr 0 14(19)opr 0 14 栈顶值输出至屏幕栈顶值输出至屏幕(20)opr 0 15(20)opr 0 15 换行换行(21)opr 0 16(21)opr 0 16 从命令行读取值到栈顶从命令行读取值到栈顶(22)s
11、to(22)sto 0 0 3 3 栈顶值送变量栈顶值送变量b b中中(23)jmp 0 11(23)jmp 0 11 无条件转到循环入口无条件转到循环入口(11)(11)(24)opr 0 0 (24)opr 0 0 结束退栈结束退栈 PL/0PL/0编译程序的结构编译程序的结构词法分析程词法分析程序序语法语义分析程序语法语义分析程序代码生成程序代码生成程序表格管理程序表格管理程序出错处理程序出错处理程序PL/0PL/0源程序源程序目标程序目标程序PL/0PL/0编译程序的总体设计编译程序的总体设计z其编译过程采用其编译过程采用一趟扫描方式一趟扫描方式z以语法以语法、语义分析语义分析程序程序
12、为核心为核心 词法分析词法分析程序和程序和代码生成代码生成程序都作为一个程序都作为一个过程过程,当语法分,当语法分析需要读单词时就调用词法分析程序,而当语法析需要读单词时就调用词法分析程序,而当语法、语义语义分析正确,需要生成相应的目标代码时,则调用代码生分析正确,需要生成相应的目标代码时,则调用代码生成程序。成程序。z表格管理表格管理程序实现程序实现变量变量,常量常量和和过程过程标识符的标识符的信息的登信息的登录与查找录与查找。z出错处理出错处理程序,对词法和语法程序,对词法和语法、语义分析遇到的错误给语义分析遇到的错误给出在源程序中出在源程序中出错的位置出错的位置和与和与错误错误 性质有关
13、性质有关的编号,并的编号,并进行错误恢复。进行错误恢复。PL/0PL/0编译程序词法分析的设计与实现编译程序词法分析的设计与实现识别的单词:识别的单词:y保留字或关键字:如:保留字或关键字:如:BEGINBEGIN、END END、IF IF、THEN THEN等等y运算符运算符:如:如:+、-、*、/、:、:=、#、=、=等等y标识符标识符:用户定义的变量名、常数名、过程名用户定义的变量名、常数名、过程名y常数常数:如:如:1010、2525、100100等整数等整数y界符界符:如:如:,、.、;、(、)等等词法分析过程词法分析过程GETSYMGETSYM所要完成的任务:所要完成的任务:y读
14、源程序(读源程序(getch)getch)y滤空格滤空格y识别识别保留字保留字y识别标识符识别标识符y拼数拼数y识别单字符单词识别单字符单词y拼双字符单词拼双字符单词z词法分析过程词法分析过程:GETSYM:GETSYM框图(见教材图框图(见教材图2.52.5)z程序(程序(procedure getsymprocedure getsym)当识别到标识符时先查当识别到标识符时先查保留字保留字表表z保留字保留字表:(表:(begin (*main*)begin (*main*))word1:=word1:=begin begin ;word2:=word2:=callcall ;.word13:
15、=word13:=writewrite ;查到时找到相应的查到时找到相应的内部表示内部表示Wsym1:=beginsym;wsym2:=callsym;wsym13:=writesym;z字符对应的字符对应的单词表:单词表:ssym+:=ssym+:=plusplus;ssym-:=;ssym-:=minusminus;ssym;:=ssym;:=semicolonsemicolon;z词法分析如何把单词传递给语法分析词法分析如何把单词传递给语法分析 type symbol=(type symbol=(nulnul,identident,numbernumber,plusplus,varsym
16、varsym,procsymprocsym);3 3个个全程量全程量 symsym:symbol;:symbol;idid:alfa;:alfa;numnum:integer;:integer;通过三个通过三个全程量全程量 SYMSYM 、IDID和和NUMNUM 将识别出的单词信息将识别出的单词信息传递传递给给语法语法分析分析程序。程序。ySYMSYM:存放单词的类别:存放单词的类别 如:有程序段落为:如:有程序段落为:begin initial:=60 begin initial:=60;endend 对应单词翻译后变为:对应单词翻译后变为:begin begin beginsymbegi
17、nsym,initial ,initial identident,:=:=becomesbecomes,60 ,60 numbernumber,;semicolonsemicolon,end end endsymendsym 。yIDID:存放用户所定义的标识符的值存放用户所定义的标识符的值 如:如:initial initial(在(在SYMSYM中放中放identident,在,在IDID中放中放initialinitial)yNUMNUM:存放用户定义的数:存放用户定义的数 如:如:60 60 y(在(在SYMSYM中放在中放在numbernumber在在NUMNUM中放中放6060)使
18、用状态转换图实现词法分析程序的设计方法使用状态转换图实现词法分析程序的设计方法词法分析程序的设计词法分析程序的设计-使用状态转换图实现使用状态转换图实现表示表示状态状态,对应每个状态编一段程序,对应每个状态编一段程序,每个状态每个状态调用调用取字符取字符程序,根据当前字程序,根据当前字符符转到不同的状态,并做相应操作。转到不同的状态,并做相应操作。表示表示终态终态,已,已识别出一个识别出一个单词单词。PL/0PL/0编译程序语法语义分析编译程序语法语义分析 PL/0 PL/0编译程序语法分析的设计与实现编译程序语法分析的设计与实现自顶向下自顶向下的语法分析的语法分析递归子程递归子程序法序法 程
19、序程序分程序分程序.constidentnumbervaridentprocedureident分程序分程序语句语句分程序分程序identreadend语句语句表达式表达式:=begin语句语句语句语句)(ident,自顶向下的语法分析自顶向下的语法分析VAR A;VAR A;BEGINBEGIN READ(A)READ(A)END.END.VARVAR ;A A BEGINBEGIN ENDEND READREAD ()A A 为文法的为文法的开始符号开始符号,以开,以开始符号作为根结始符号作为根结点构造一棵倒挂点构造一棵倒挂着的语法树。着的语法树。递归子程序法递归子程序法z递归子程序法递归
20、子程序法:对应对应每个非终结符每个非终结符语法单元,编一个独语法单元,编一个独立的处理过程(或子程序)。语法分析从读入第一个单词立的处理过程(或子程序)。语法分析从读入第一个单词开始,由非终结符开始,由非终结符 (即开始符)出发,沿语法描述即开始符)出发,沿语法描述图图箭头箭头所指出的方向进行分析。当遇到非终结符时,则所指出的方向进行分析。当遇到非终结符时,则调调用用相应的相应的处理过程处理过程,从语法描述图看,也就进入了一个语,从语法描述图看,也就进入了一个语法单元,再沿当前所进入的语法单元所指箭头方向继续进法单元,再沿当前所进入的语法单元所指箭头方向继续进行分析。当遇到描述图中是行分析。当
21、遇到描述图中是终结符终结符时,则判断当前读入的时,则判断当前读入的单词是否与图中的终结符单词是否与图中的终结符相匹配相匹配,若匹配,再读取下一个,若匹配,再读取下一个单词继续分析。遇到单词继续分析。遇到分支点分支点时,将当前的单词与分支点上时,将当前的单词与分支点上多个终结符多个终结符逐个相比较逐个相比较,若都不匹配时可能是进入下一个,若都不匹配时可能是进入下一个非终结符语法单位或是出错。非终结符语法单位或是出错。例:如何用递归子程序法实现表达式的语法分析例:如何用递归子程序法实现表达式的语法分析项项表达式表达式+-项项+-项项 因子因子 因子因子 */语法图语法图因子的语法图因子的语法图因子
22、因子identnumber(表达式表达式)z表达式的表达式的EBNF表达式表达式=+|-+|-项项(+|-+|-)项)项 项项=因子因子(*|/*|/)因子)因子 因子因子=标识符标识符|无符号整数无符号整数|(表达式表达式)z表达式表达式的的递归子程序递归子程序实现实现procedure procedure exprexpr;beginbegin if sym in if sym in plusplus,minusminus then then begin begin getsym;getsym;termterm;end end else else termterm;while sym in
23、 while sym in plusplus,minusminus do do begin begin getsym;getsym;termterm;end endend;end;z z项项的的递归子程序递归子程序实现实现procedure procedure termterm;beginbegin factorfactor;while sym in while sym in timestimes,slashslash do do begin begin getsym;getsym;factorfactor;end endend;end;z因子因子的的递归子程序递归子程序实现实现procedu
24、re procedure factorfactor;begin begin if sym if sym identident then then begin begin if sym if sym numbernumber then then begin begin if sym=if sym=(then then begin begin getsym;getsym;exprexpr;if sym=if sym=)then then getsym getsym else error else error end end else error else error end end end end
25、 end;end;=beginbegin(*main*)*main*)(*initialize*)(*initialize*)(*r/w file set*)(*r/w file set*)getsym;getsym;block();block();if sym period then error.if sym period then error.end.end.。程序程序 pl0分程序分程序 block语句语句 statement条件条件 condition表达式表达式expression项项 term因子因子 factor语语法法调调用用关关系系图图编编译译程程序序总总体体流流程程图图 P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 PL0 编译程序

限制150内