《编译原理讲义》PPT课件.ppt
《《编译原理讲义》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《编译原理讲义》PPT课件.ppt(58页珍藏版)》请在三一办公上搜索。
1、1,编译原理讲义,清华大学计算机科学与技术系赖辉旻,2000.9,2,第二章 PL/0编译程序的实现,本章目的:以PL/0为例学习编译程序实现的基本步骤和相关技术,熟悉并理解编译程序的基本原理和概念。,PL/0编译程序,pcode解释程序,PL/0源程序,4,第二章 PL/0编译程序的实现,步骤1、认识源语言PL/0与目标代码pcode及它们之间的映射步骤2、PL/0编译程序的总体设计步骤3、PL/0编译程序词法分析的设计与实现步骤4、PL/0编译程序语法语义分析的设计与实现,5,第二章 PL/0编译程序的实现,步骤5、PL/0编译程序代码生成的实现步骤6、PL/0编译程序语法错误处理的实现步
2、骤7、pcode代码解释器的设计与实现,6,步骤1、认识源语言PL/0与目标代码pcode及它们之间的映射,何为PL/0语言?认识目标代码pcodePL/0程序到pcode代码的映射,7,何为PL/0语言?,PL/0语言:PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分PL/0程序示例PL/0的非形式描述PL/0的语法描述图PL/0语言文法的EBNF表示,8,PL/0程序示例,CONST A=10;VAR B,C;PROCEDURE P;VAR D;PROCEDURE Q;VAR X;BEGIN READ(X);D:=X;WHILE X#0 DO CALL P
3、;END;,BEGIN WRITE(D);CALL Q;END;BEGIN CALL P;END.,9,PL/0非形式描述,数据类型只有整型标识符的有效长度是10,以字母开始的字母数字串数最多为14位过程无参,可嵌套(最多三层),可递归调用变量的作用域同PASCAL,常量为全局的,无标号,10,PL/0非形式描述,语句类型:赋值语句,if.then.,while.do.,read,write,call,复合语句begin.end,说明语句:const.,var.,procedure13个保留字:if,then,while,do,read,write,call,begin,end,const,v
4、ar,procedure,odd,11,PL/0的语法描述图,12,PL/0语言文法的EBNF表示,BNF与EBNF的介绍BNF(BACKUS-NAUR FORM)是根据美国的John W.Backus与丹麦的Peter Naur来命名的,它从语法上描述程序设计语言的元语言。采用BNF就可说明哪些符号序列是对于某给定语言在语法上有效的程序。,13,PL/0语言文法的EBNF表示,BNF与EBNF的介绍BNF引入的符号:用左右尖括号括起来的语法成分为非终结符=定义为|或EBNF引入的符号:表示花括号内的语法成分可重复 表示方括号内的语法成分为任选项()表示圆括号内的成分优先,14,PL/0语言文
5、法的EBNF表示,BNF与EBNF的介绍一个用EBNF描述的例子:=+|-=0|1|2|3|4|5|6|7|8|9,15,PL/0语言文法的EBNF表示,BNF与EBNF的介绍=+|-|0=1|2|3|4|5|6|7|8|9=0|1|2|3|4|5|6|7|8|9,16,PL/0语言文法的EBNF表示,PL/0语言文法的EBNF表示程序=分程序.分程序=常量说明部分变量说明部分过程说明部分语句常量说明部分=CONST常量定义部分,常量定义;无符号整数=数字数字变量说明部分=VAR标识符,标识符;标识符=字母字母|数字,17,认识目标代码pcode,目标代码pcode是一种假想栈式计算机的汇编语
6、言。指令格式,f l a,f功能码l层次差a根据不同的指令有所区别,0 jmp0 81 jmp0 22 int 0 33 lod 1 34 lit0 105 opr0 2 次栈顶与栈顶相加6 sto1 47 opr0 08 int 0 5 在运行栈中申请5个栈空间9 opr 0 16 从命令行读入输入置于栈顶10 sto 0 3 将栈顶值存入变量11 cal 0 2 调用过程12 lod 0 4 将变量取至栈顶13 opr 0 14 栈顶值输出至屏幕14 opr 0 15 换行15 opr 0 0,RA 12,运行栈,const a=10;var b,c;procedure p;begin c
7、:=b+a;end;begin read(b);call p;write(c);end.,SL:静态链DL:动态链RA:返回地址,0,20,PL/0程序到pcode代码的映射,const a=10;var b,c;procedure p;begin c:=b+a;end;begin read(b);while b#0 do begin call p;write(2*c);read(b);endend.,jmp 0 8jmp 0 2int 0 3lod 1 3lit 0 10opr 0 2 次栈顶与栈顶相加sto 1 4opr 0 0int 0 5 在运行栈中申请5个栈空间opr 0 16 从命
8、令行读入输入置于栈顶sto 0 3 将栈顶值存入变量lod 0 3 将变量取至栈顶lit 0 0 将常值0进栈opr 0 9 次栈顶与栈顶是否不等jpc 0 24,cal 0 2 调用过程lit 0 2 常值2进栈lod 0 4 将变量取至栈顶opr 0 4 次栈顶与栈顶相乘opr 0 14 栈顶值输出至屏幕opr 0 15 换行opr 0 16 从命令行读取输入sto 0 3 jmp 0 11opr 0 0,21,步骤2 PL/0编译程序的总体设计,语法语义分析程序,PL/0源程序,目标程序,22,步骤2 PL/0编译程序的总体设计,其编译过程采用一趟扫描方式以语法分析程序为核心 词法分析程
9、序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应的目标代码时,则调用代码生成程序。,23,步骤2 PL/0编译程序的总体设计,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。,24,步骤3 PL/0编译程序词法分析的设计与实现,所需识别的单词基本字(保留字):BEGIN、END、IF、THEN等运算符:如+、-、*、/、:=、#、=、=等标识符:用户定义的变量名、常数名、过程名常数:如10、25、100等整数界符:如,、.、;、(、)等,2
10、5,步骤3 PL/0编译程序词法分析的设计与实现,词法分析过程GETSYM所要完成的任务滤空格识别保留字识别标识符拼数拼复合词输出源程序,26,步骤3 PL/0编译程序词法分析的设计与实现,通过三个全程量将识别出的单词信息传递给语法分析程序,SYM,ID,NUMSYM:存放单词的类别,如beginsym,ident,numberID:存放用户所定义的标识符的值NUM:存放用户定义的数,27,步骤3 PL/0编译程序词法分析的设计与实现,词法分析程序的设计-使用状态转换图,28,步骤4 PL/0编译程序语法语义分析的设计与实现,语法分析的设计与实现自顶向下的语法分析递归子程序法如何用递归子程序法
11、来实现表达式的语法分析,29,自顶向下的语法分析,VAR A;BEGIN READ(A)END.,30,递归子程序法,递归子程序法:对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。语法分析从读入第一个单词开始由非终结符程序即开始符出发,沿语法描述图箭头所指出的方向进行分析。当遇到非终结符时,则调用相应的处理过程,从语法描述图看也就进入了一个语法单元,再沿当前所进入的语法描述图的箭头方向进行分析,当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,则执行相应的语义程序(就是翻译程序)。再读取下一个单词继续分析。遇到分支点时将当前的单词与分支点上多个终结符逐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理讲义 编译 原理 讲义 PPT 课件
链接地址:https://www.31ppt.com/p-5569020.html