广工编译原理实验课件

上传人:我*** 文档编号:145858078 上传时间:2020-09-24 格式:PPT 页数:31 大小:300.50KB
返回 下载 相关 举报
广工编译原理实验课件_第1页
第1页 / 共31页
广工编译原理实验课件_第2页
第2页 / 共31页
广工编译原理实验课件_第3页
第3页 / 共31页
广工编译原理实验课件_第4页
第4页 / 共31页
广工编译原理实验课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《广工编译原理实验课件》由会员分享,可在线阅读,更多相关《广工编译原理实验课件(31页珍藏版)》请在金锄头文库上搜索。

1、1.PL/0编译程序,PL/0编译程序,PL/0 语言程序,类 pcode 代码,源语言 (PL/0),目标语言 (类pcode),实现语言 (C/pascal),PL/0编译程序,类 pcode解释程序,类 pcode代码,PL/0源程序,输入,输出,PL/0编译系统的结构框架,2.PL/0语言,PL/0语言特征 PL/0的语法描述图 PL/0语言文法的EBNF表示 PL/0程序示例,PL/0语言是PASCAL语言的子集,数据类型,只有整型 数据结构 ,只有简变和常量 整数最多为14位 标识符的有效长度是10位 过程最多可嵌套三层 作用域规则(内层可引用包围它的外层定义的标识符),过程可嵌套

2、定义,可递归调用,内的文字或符号表示非终结符,或,内的文字或符号表示终结符,2.2 语法描述图,const,ident,number,=,;,var,ident,procedure,ident,分程序,语句,;,;,;,分程序,例:用语法描述图描述分程序的定义,EBNF 引入的符号(元符号): :用左右尖括号括起来的语法成分为非终结符 = :定义为 =的左部由右部定义 | :或 :表示花括号内的语法成分可重复任意次或限 定次数 :表示方括号内的语法成分为任选项 ( ) :表示圆括号内的成分优先,2.3 EBNF范式,例:用EBNF描述分程序的定义,= = CONST , ; = = VAR ,

3、 ;,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; END; BEGIN WRITE(D); CALL Q; END; BEGIN CALL P; END.,Q的过程体,P的过程体,主程序体,3.PL/0编译程序的总体设计,词法分析程序,语法语义分析程序,代码生成程序,表格管理程序,出错处理程序,PL/0源程序,目标程序,其编译过程采用一趟扫

4、描方式 以语法、语义分析程序为核心 词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。 表格管理程序实现变量,常量和过程标识符的信息的登录与查找。 出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。,4.词法分析,分析过程所要完成的任务: 读源程序(getch) 滤空格 识别保留字 识别标识符 拼数 拼双字符单词 识别单字符单词,符号表 type symbol=( nul, ident, number, plus, , varsym

5、, procsym ); 保留字表: word1:=BEGIN; word2:=CALL; . word13:=WRITE; 单字符表: ssym+:=plus; ssym-:=minus; ssym;:=semicolon;,重要变量及过程,注意:按ASCII顺序存储保留字。,查到时找到相应的内部表示 wsym1:=beginsym; wsym2:=callsym; wsym13:=writesym;,全局变量 1)SYM:存放单词的类别 如:有程序段落为: begin initial := 60;end 对应单词翻译后变为: begin beginsym, initial ident, :

6、= becomes, 60 number, ; semicolon, end endsym 。 2)ID: 存放用户所定义的标识符的值 如:initial (在SYM中放ident,在ID中放initial) 3)NUM:存放用户定义的数 如:60 (在SYM中放在number在NUM中放60) GETSYM框图(见教材P19图2.5),重要变量及过程,任务一:读程序,内容 读程序GetSym() 识别保留字 识别标识符 拼数 拼双字符单词 识别单字符单词 要求 每班前十名同学给予检查,任务二:扩充单词,内容 增加保留字:FOR、DOWNTO和TO 增加双字符单词:*=和/= 要求 设计测试方

7、式,测试单词是否能被识别 每班前十名同学给予检查,5. 语法分析 递归子程序法,对应每个非终结符语法单元,编一个独立的处 理过程(或子程序)。 沿语法描述图箭头所指出的方向进行分析: 1)遇到分支点时,将当前的单词与分支点上多个终结符逐个相比较,若都不匹配时可能是进入下一个非终结符语法单位或是出错。 2)当遇到非终结符时,则调用相应的处理过程; 3)当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,再读取下一个单词继续分析。,程序 pl0,分程序 block,语句 statement,条件 condition,表达式expression,项 term,因子 fac

8、tor,语 法 调 用 关 系 图,例:条件语句(不带else子句)的递归子程序,if,条件,then,statement() if( SYM = ifsym )/处理条件语句 getSym(); condition(); if( SYM = thensym ) getSym(); else Error(); statement(); else /处理其它语句 ,语句,任务三,扩充条件语句(带else子句) 画出语法描述图 写出递归子程序,类pcode代码 语句的语义分析和处理,6. 语义分析,目标代码类pcode是一种假想栈式计算机的汇编语言。 指令格式: 类pcode代码是由过程 GEN

9、生成的,放在数组CODE中。,f l a,f 功能码 l 层次差 (标识符引用层减去定义层) a 根据不同的指令有所区别,6.1 类pcode代码,指 令 功 能 表,CONST a=10;VAR b,c;BEGIN READ(b); WHILE b#0 DO BEGIN READ(b); ENDEND.,( 0) int 0 5 ( 1) opr 0 16 ( 2) sto 0 3 ( 3) lod 0 3 ( 4) lit 0 0 ( 5) opr 0 9 ( 6) jpc 0 16 ( 7) opr 0 16 ( 8) sto 0 3 ( 9) jmp 0 3 (10) opr 0 0,

10、例:pcode代码示例,解释器的结构,一维整型数组S作为运行栈,RA DL SL,b,t,每次调用过程时会在栈顶分配3个 存储单元: RA:返回地址,记录调用该过程时目标程序的断点; DL:动态链,指向调用过程的AR基地址; SL:静态链,指向定义该过程的 直接定义外过程的AR基地址,当前AR的基地址,栈顶位置,CONST a=10;VAR b,c;BEGIN READ(b); WHILE b#0 DO BEGIN READ(b); ENDEND.,( 0) int 0 5 ( 1) opr 0 16 ( 2) sto 0 3 ( 3) lod 0 3 ( 4) lit 0 0 ( 5) op

11、r 0 9 ( 6) jpc 0 10 ( 7) opr 0 16 ( 8) sto 0 3 ( 9) jmp 0 3 (10) opr 0 0,例:pcode代码的解释执行,c b 0 0 0,20,20,0,1,0,0, := if then if( SYM = ident )/处理条件语句 getSym(); condition(); if(SYM = thensym) getSym(); else Error(); statement(); else /处理其它语句,6.2 条件语句的语义分析和处理,(a b),lod 0 a lod 0 b opr 0 12,write(a),lod

12、 0 a opr 0 14 opr 0 15, := if then if( SYM = ident )/处理条件语句 getSym(); condition(); if(SYM = thensym) getSym(); else Error(); statement(); else /处理其它语句,6.2 条件语句的语义分析和处理,C,S,(a b),lod 0 a lod 0 b opr 0 12,write(a),lod 0 a opr 0 14 opr 0 15,Y,N,lod 0 a lod 0 b opr 0 12,lod 0 a opr 0 14 opr 0 15,jpc 0 0

13、, := if then if( SYM = ident )/处理条件语句 getSym(); condition(); if(SYM = thensym) getSym(); else Error(); statement(); else /处理其它语句,6.2 条件语句的语义分析和处理,C,S,(a b),write(a),Y,N,lod 0 a lod 0 b opr 0 12,lod 0 a opr 0 14 opr 0 15,jpc 0 0,GEN(jpc,0,0), := if then if( SYM = ident )/处理条件语句 getSym(); condition();

14、 if(SYM = thensym) getSym(); else Error(); statement(); else /处理其它语句,6.2 条件语句的语义分析和处理,C,S,(a b),write(a),Y,N,lod 0 a lod 0 b opr 0 12,lod 0 a opr 0 14 opr 0 15,jpc 0 0,GEN(jpc,0,0),cx1 =cx;,codecx1.a = cx,任务四,扩充条件语句(带else子句) 设计出以下条件语句的pcode代码 if a b then write(a); else write(b); (假设变量a和b的偏移地址是3和4) 写出条件语句的语义分析程序,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号