PL0-编译程序讲解ppt课件.ppt

上传人:飞****2 文档编号:33663427 上传时间:2022-08-12 格式:PPT 页数:60 大小:395KB
返回 下载 相关 举报
PL0-编译程序讲解ppt课件.ppt_第1页
第1页 / 共60页
PL0-编译程序讲解ppt课件.ppt_第2页
第2页 / 共60页
点击查看更多>>
资源描述

《PL0-编译程序讲解ppt课件.ppt》由会员分享,可在线阅读,更多相关《PL0-编译程序讲解ppt课件.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。第二章第二章 PL/0PL/0编译程序的实现编译程序的实现本章以本章以PL/0PL/0编译程序编译程序为实例为实例, , 使大家对编译程序的实现建立起整体概念,对编译程序的构造得到一些感性认识和初步了解。1 PL/0PL/0语言语言2 PL/0PL/0处理机处理机假想栈式机假想栈式机3 PL/0PL/0编译程序编译程序4 4 符号表的一般形式讨论符号表的一般形式讨论5 5 栈式存储管理的再讨论栈式存储管理的再讨论“雪亮工程是以区(

2、县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。1 PL/0PL/0语言语言PL/0PL/0功能简单、结构清晰、可读性强,而又具备了一功能简单、结构清晰、可读性强,而又具备了一般高级语言的必备部分,因而其编译程序能充分体般高级语言的必备部分,因而其编译程序能充分体现一个高级语言编译程序的基本技术和步骤。现一个高级语言编译程序的基本技术和步骤。zPL/0PL/0语言:语言:PASCALPASCAL语言的语言的子集,用于教学子集,用于教学zPL/0PL/0程序示例程序示例zPL/0PL/0的的语法描

3、述图语法描述图zPL/0PL/0语言语言的的EBNFEBNF表示表示“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。 PL/0PL/0语言是语言是PASCALPASCAL语言的语言的子集子集z 过程可过程可嵌套定义,内层嵌套定义,内层可引用包围它的外层定义的可引用包围它的外层定义的标识符标识符, ,可递归调用可递归调用z 数据类型数据类型, ,只有整型只有整型z 数据结构数据结构 , ,只有简变和常数只有简变和常数z 标识符的有效长度是标识符的有效长度是1010z 语句种类:语

4、句种类: begin/endbegin/end、ifif、whilewhile、赋值、赋值、read/writeread/write、callcall、constconst、varvar、procedureprocedurez 过程无参,最多可过程无参,最多可嵌套嵌套三层三层z 1313个保留字:个保留字:ifif、thenthen、whilewhile、dodo、readread、writewrite、callcall、beginbegin、endend、constconst、varvar、procedureprocedure、oddoddz + +、- -、* *、/ /、= =、 、=

5、、=、( (、) )“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。 PL/0PL/0程序示例程序示例 CONST A=10; CONST A=10; (* * 常量说明部分常量说明部分 * *) VAR B,C; VAR B,C; (* * 变量变量说明部分说明部分 * *) PROCEDURE PROCEDURE P; P; (* * 过程过程说明部分说明部分 * *) VAR D;VAR D;(* * P P的局部变量的局部变量说明部分说明部分 * *) PROCEDUR

6、E PROCEDURE Q; Q; (* * P P的局部过程的局部过程说明部分说明部分 * *) VAR X;VAR X; BEGINBEGIN READ(X); READ(X); D:=X; D:=X; IF X#0 DO CALL P; IF X#0 DO CALL P; END; END; BEGINBEGIN CALL Q; WRITE(D); CALL Q; WRITE(D); END; END; BEGIN CALL P; END.BEGIN CALL P; END.“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共

7、安全视频监控联网应用为重点的“群众性治安防控工程”。递归计算 sum = 1! + 2 ! + . + n! var n, m, fact, sum; 递规计算 fact = m! procedure factorial;begin if m 0 then begin fact := fact * m; m := m - 1; call factorial; end;end;begin 读入n read(n); sum := 0; while n 0 do begin m := n; fact := 1; call factorial; sum := sum + fact; n := n -

8、1; end; 输出n ! write(sum);end.“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。constidentnumbervaridentprocedureident分程序分程序语句语句分程序分程序程序程序分程序分程序.语法图语法图“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。identreadend语句语句表达式表达式:=begin语句语句语

9、句语句)(ident,“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。PL/0PL/0语言的语言的EBNFEBNF表示表示z BNFBNF(BACKUS-NAUR FORMBACKUS-NAUR FORM)与与EBNFEBNF的介绍的介绍BNFBNF是根据美国的是根据美国的John W.BackusJohn W.Backus与丹麦的与丹麦的Peter NaurPeter Naur来命名的,它是从来命名的,它是从语法上描述程序设计语言的语法上描述程序设计语言的元语言元语言。采用。

10、采用BNFBNF就可说明哪些符号序列是对就可说明哪些符号序列是对于某给定语言于某给定语言在语法上在语法上有效的程序。有效的程序。z 构成构成EBNFEBNF的元素:非终结符,终结符,开始符,规则的元素:非终结符,终结符,开始符,规则z EBNFEBNF的元符号:的元符号: 用左右尖括号括起来的内容为用左右尖括号括起来的内容为非终结符非终结符=或或 读做读做定义为定义为,的的左部由左部由右部右部定义定义 | | 读做读做或或 表示右部候选内容表示右部候选内容 表示花括号内的内容表示花括号内的内容可重复可重复任意次或限定次数任意次或限定次数 表示方括号内的内容为表示方括号内的内容为任选项任选项 (

11、 ) ( ) 表示圆括号内的内容表示圆括号内的内容优先优先“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。PL/0PL/0语言文法的语言文法的EBNFEBNF表示表示程序-分程序.分程序-常量说明部分-CONST常量定义部分,常量定义;无符号整数-数字数字变量说明部分-VAR标识符,标识符;标识符-字母字母|数字 B-C-B -先调用,后结束B区A区B区C区BT 二、运行时数据的存储与访问-栈式存储假设A、C同层,且A中嵌套B子程序的调用、执行和返回l 过程被调用时,子程序的每

12、次调用都需在数据栈顶为其分配独立的数据区l 子程序返回时,需做两件事情:一是代码返回(需记住RA),二是数据区的同步恢复(DL)l 子程序运行时,要存取外层数据区中的存储单元当前B数据区须记住:返回地址RA动态链DL记录调用者数据区基地址 静态链SL记录定义该过程的直接外层过程数据区的基地址,以便访问外层数据“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。运行时数据栈运行时数据栈S S的变化的变化 var m1,m2,m3;var m1,m2,m3; Procedure A;

13、Procedure A; var a1; var a1; procedure B; procedure B; var b1,b2; var b1,b2; procedure C; procedure C; C C过程过程call B;call B; r1r1: : B B过程过程call C; call C; r2:r2: A A过程过程call B; call B; r3:r3: 主程序主程序Call A; Call A; r4:r4: B的临时单元 b2=120 b1=50 RA: r1 DL:115 SL:106 RA: r2 DL:110 SL:110 b2=25 b1=20 RA:

14、r3 DL:106 SL:106 a1=15 RA: r4 DL:100 SL:100 m3=118 m2=472 m1=335 RA:0 DL:0 T B SL:0 100 “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。三、PL/0机的指令系统 f: 功能码l: 层次差 (标识符引用层减去定义层)a:根据不同的指令有所区别f l af l a指令格式:指令格式:所有运算对栈顶的两个或一个元素进行,并用运算结果代替原来的运算对象。“雪亮工程是以区(县)、乡(镇)、村(社区)三

15、级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。指指令令功功能能表表“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。( 0) jmp 0 8 转向转向主程序入口主程序入口( 1) jmp 0 2 转向转向过程过程p入口入口( 2) int 0 3 为过程为过程p开辟空间开辟空间( 3) lod 1 3( 4) lit 0 10( 5) opr 0 2( 6) sto 1 4( 7) opr 0 0 退栈并返

16、回调用点退栈并返回调用点( 8) int 0 5( 9) opr 0 16 (10) sto 0 3(11) lod 0 3(12) lit 0 0(13) opr 0 9(14) jpc 0 24 条件不满足转条件不满足转24(15) cal 0 2 (16) lit 0 2(17) lod 0 4(18) opr 0 4(19) opr 0 14(20) opr 0 15 换行换行(21) opr 0 16(22) sto 0 3(23) jmp 0 11(24) opr 0 0 SL 0DL 0RA 0变量变量b变量变量cRA 16SL 0DL 0运行栈运行栈c o n s t a =

17、1 0 ;v a r b , c ;p r o c e d u r e p ; begin c : = b + a ; end;begin r e a d ( b ) ; while b#0 do begin c a l l p ; w r i t e ( 2 * c ) ; r e a d ( b ) ; endend.SL:静态链:静态链DL:动态链:动态链RA:返回地址:返回地址0演示执行过程“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。3 PL/0PL/0编译程序的实

18、现编译程序的实现zPL/0PL/0编译程序的总体设计编译程序的总体设计zPL/0PL/0编译程序词法分析的设计与实现编译程序词法分析的设计与实现zPL/0PL/0编译程序语法分析的设计与实现编译程序语法分析的设计与实现zPL/0PL/0编译程序语义分析的设计与实现编译程序语义分析的设计与实现zPL/0PL/0编译程序语法错误处理的实现编译程序语法错误处理的实现zPL/0PL/0编译程序代码生成的实现编译程序代码生成的实现zpcodepcode代码解释器的设计与实现代码解释器的设计与实现“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以

19、公共安全视频监控联网应用为重点的“群众性治安防控工程”。3.1 PL/03.1 PL/0编译程序的总体设计编译程序的总体设计z 单趟方式z 以语法、语义分析程序为核心,词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。z 表格管理程序实现变量,常量和过程标识符的信息的登录与查找。z 出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误 性质有关的编号,并进行错误恢复。“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理

20、为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。PL/0PL/0编译程序编译程序PL/0PL/0编译程序编译程序类类 p pcodecode解释解释程序程序类类 pcode代码代码PL/0源程序源程序输入数据输入数据输出数据输出数据PL/0编译程序的结构框架“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。 PL/0PL/0编译程序的结构编译程序的结构词法分析程词法分析程序序语法语义分析程序语法语义分析程序代码生成程序代码生成程序表格管理程序表格管理程序出错处理

21、程序出错处理程序PL/0PL/0源程序源程序目标程序目标程序“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。编译系统总体流程图编译系统总体流程图PL/0编译程序语法、语义分析的核心“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。3.2 PL/0编译程序词法分析的实现词法分析函数词法分析函数getsym()getsym()所识别的单词:所识别的单词:y保留字或关键

22、字:如:保留字或关键字:如:BEGINBEGIN、 ENDEND、 IFIF、 THENTHEN等等y运算符运算符: 如:如:+ +、- -、* *、/ /、:、:= =、# #、=、=等等y标识符标识符: 用户定义的变量名、常数名、过程名用户定义的变量名、常数名、过程名y常数常数: 如:如:1010、2525、100100等整数等整数y界符界符: 如:如:,、. . 、; ; 、( ( 、)等等词法分析过程词法分析过程:getsym():getsym()框图(框图(P19P19图图2.52.5)在编译程序中,单词的表示方式在编译程序中,单词的表示方式:(:(sym, id/numsym, i

23、d/num)“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。z enum symbol enum symbol nulnul, ,identident, ,numbernumber, ,plusplus,varsymvarsym, ,procsymprocsym;z 当识别出标识符时先查当识别出标识符时先查保留字保留字表表z 保留字及内部表示对应表保留字及内部表示对应表: char wordnorwal; char wordnorwal; enum symble wsymnor

24、w; enum symble wsymnorw;z 字符对应的字符对应的单词表:单词表: enum symble ssym256;enum symble ssym256; ssym+= ssym+=plusplus; ssym-=; ssym-=minusminus; ; z 词法分析通过三个词法分析通过三个全程量全程量 symbol symbol symsym; char id; int ; char id; int numnum; ;将识别出的单词信息将识别出的单词信息传递传递给给语法分析语法分析程序。程序。ysymsym:存放单词的类别:存放单词的类别 如:如:initial:= 60i

25、nitial:= 60;中各单词对应的类别为:;中各单词对应的类别为: initial initial identident, := , := becomesbecomes, 60 , 60 numbernumber, ; , ; semicolonsemicolonyidid:存放用户标识符:存放用户标识符, ,对对initialinitial(sym-sym-identident,id-id-initialinitial)ynumnum:存放用户定义的数:存放用户定义的数 对对6060(sym-sym-number,number,num-num-6060)“雪亮工程是以区(县)、乡(镇)、

26、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。用状态转换图实现词法分析程序的设计方法用状态转换图实现词法分析程序的设计方法状态状态,对应每个状态编一段程序,对应每个状态编一段程序,每个状态每个状态调用调用取字符取字符程程序,根据当前字符序,根据当前字符转到不同的状态,并做相应操作。转到不同的状态,并做相应操作。表示表示终态终态,已,已识识别出一个别出一个单词单词1 12 23 35 514141313121210109 97 78 86 64 41111空格空格字母字母字母数字字母数字非字母数字非字母数字数字

27、数字数字数字非数字非数字:= = = =非非= =, + - ( “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。3.3 PL/03.3 PL/0编译程序语法分析编译程序语法分析z语法分析的设计与实现语法分析的设计与实现y 自顶向下的语法分析自顶向下的语法分析y 递归子程序法递归子程序法(递归下降分析器(递归下降分析器recursive-descent parser):对应对应每个非终结符每个非终结符(语法成分),(语法成分),编一个独立的处理子程序。编一个独立的处理子程序。

28、由由 开始,按规则右部开始,按规则右部(语法描述图语法描述图箭头箭头方向方向)进行分析进行分析 遇到遇到非终结符非终结符,则,则调用调用相应的相应的处理过程处理过程 遇到遇到终结符终结符,则判断当前读入的单词是否与该终结符,则判断当前读入的单词是否与该终结符相匹相匹配配,若匹配,再读取下一个单词继续分析。,若匹配,再读取下一个单词继续分析。 程序程序 pl/0分程序分程序 block语句语句statement条件条件condition表达式表达式expression 项项term因子因子 factor语语法法调调用用关关系系图图“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台

29、、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。VAR A;VAR A;BEGINBEGIN READ(A) READ(A)END.END. . . VARVAR ; A A BEGINBEGIN ENDEND READREAD ( ) A A 为文法的为文法的开始符号开始符号,以开,以开始符号作为根结始符号作为根结点存在一棵倒挂点存在一棵倒挂着的语法树。着的语法树。递归下降语法分递归下降语法分析过程隐含着对析过程隐含着对对语法树的前序对语法树的前序遍历遍历“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑

30、、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。表达式表达式=+|-+|-项项 (+|-+|-)项)项 int expression(bool* fsys, int* ptx, int lev)if(sym=plus | sym=minus) getsymdo; termdo(nxtlev, ptx, lev); /处理项 elsetermdo(nxtlev, ptx, lev); / 处理项 while (sym=plus | sym=minus)getsymdo; termdo(nxtlev, ptx, lev); / 处理项 return 0;注意一致性:

31、进入每一语法单位处理程序之前,其第一个单词已读出,退出时,应读出下一个语法单位的第一个单词“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。项项=因子因子 (* *|/|/)因子)因子 int term(bool* fsys, int* ptx, int lev)factordo(nxtlev, ptx, lev); /* 处理因子 */ while(sym=times | sym=slash)getsymdo; factordo(nxtlev, ptx, lev);return

32、 0;“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。因子因子=标识符标识符| |无符号整数无符号整数|(表达式表达式)int factor(bool* fsys, int* ptx, int lev)if(sym = ident)/* 因子为常量或变量 */ getsymdo; else if(sym = number) getsymdo; else if (sym = lparen)/* 因子为表达式 */ getsymdo; expressiondo(nxtlev, pt

33、x, lev); if (sym = rparen) getsymdo; else error(22);/* 缺少右括号 */ return 0;“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。3.4 PL/03.4 PL/0语义分析的设计与实现语义分析的设计与实现z 说明部分的分析说明部分的分析与处理与处理z 表格管理表格管理z 过程体过程体( (语句)的分析语句)的分析与处理与处理“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格

34、化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。说明部分的分析说明部分的分析与处理与处理-登录符号表登录符号表z 对每个过程(含主程序)对每个过程(含主程序)说明的对象说明的对象(变量变量,常量常量和和过程过程)造符号表造符号表z 登录登录标识符的标识符的属性属性。z 标识符的属性标识符的属性: :种类,所在种类,所在层次层次, ,值值和分配的和分配的相对位置相对位置。z 登录信息由登录信息由ENTERENTER过程完成。过程完成。符号表结构enum object constant, variable, procedur;struct tablestruct char

35、nameal; enum object kind; int val, level, adr, size; tabletxmax; “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。const a=35;/const a=35;/常量无层次常量无层次var a1,a2,a3;var a1,a2,a3;Procedure P;Procedure P; var b1,b2; var b1,b2; procedure P1; procedure P1; var c; var c; pro

36、cedure P2; procedure P2; var d; var d; 注意:在单趟编译中,对于并列的函数(或分程序),其相注意:在单趟编译中,对于并列的函数(或分程序),其相应的符号表不会同时存在。应的符号表不会同时存在。过程过程P2在在code的的入口入口 (0) jmp 0 0 CX (1) jmp 0 0 (2) jmp 0 0 (k) jmp 0 0 名字名字 类类 值值 层次层次 地址地址 大小大小“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。: :=var

37、var, ;if(sym=varsym)/if(sym=varsym)/* * 收到变量声明符号,开始处理变量声明收到变量声明符号,开始处理变量声明 * */ / getsymdo; getsymdo; dovardeclarationdo(&tx, lev, &dx); dovardeclarationdo(&tx, lev, &dx); while (sym = comma) while (sym = comma) getsymdo; getsymdo; vardeclarationdo(&tx, lev, &dx); vardeclarationdo(&tx, lev, &dx); if

38、 (sym = semicolon) if (sym = semicolon) getsymdo;getsymdo; else error(5);else error(5); while (sym = ident); while (sym = ident); 注意:注意:&tx&tx“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。变量说明处理变量说明处理int vardeclaration(intint vardeclaration(int* * ptx,int lev,int

39、 ptx,int lev,int* * pdx) pdx)if (sym = ident)if (sym = ident) enter(variable, ptx, lev, pdx);/enter(variable, ptx, lev, pdx);/填写名字表填写名字表 getsymdo; getsymdo; else else error(4); error(4); / /* * var var后应是标识后应是标识符符 * */ / return 0; return 0; “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全

40、视频监控联网应用为重点的“群众性治安防控工程”。过程过程ENTERENTER的实现的实现/ /* * 在名字表中加入一项在名字表中加入一项 * * * * k: k: 名字种类名字种类const,var or procedureconst,var or procedure * * ptx: ptx: 名字表尾指针名字表尾指针 * * lev: lev: 名字所在的层次名字所在的层次, ,以后所有的以后所有的levlev都是这样都是这样 * * pdx: pdx: 当前应分配变量的相对地址,分配后增加当前应分配变量的相对地址,分配后增加1 1 * */ /void enter(enum obje

41、ct k, intvoid enter(enum object k, int* * ptx,int lev, int ptx,int lev, int* * pdx) pdx)(* *ptx)+;ptx)+; strcpy(table( strcpy(table(* *ptx).name, id); ptx).name, id); / /* * 全局变量全局变量idid中已存有当前名字的名字中已存有当前名字的名字 * */ / table( table(* *ptx).kind = k;ptx).kind = k;“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化

42、为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。 switch (k)switch (k) case constant:case constant: / /* * 常量名字常量名字 * */ / if (num amax) if (num amax) error(31); error(31);/ /* * 数越界数越界 * */ / num = 0; num = 0; table( table(* *ptx).val = num;ptx).val = num; break; break; case variable:case variable: / /*

43、* 变量名字变量名字 * */ / table( table(* *ptx).level = lev;ptx).level = lev; table( table(* *ptx).adr = (ptx).adr = (* *pdx);pdx); ( (* *pdx)+;pdx)+; break; break; case procedur: case procedur: / /* *过程名字过程名字* */ / table( table(* *ptx).level = lev;ptx).level = lev; break; break; “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心

44、为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。过程体的处理变量引用的处理过程体的处理变量引用的处理y对对语句进行语句进行语法语法分析分析y语义分析语义分析 当遇到当遇到标识符的引用时标识符的引用时就调用就调用POSITIONPOSITION函数函数查查TABLETABLE表表,看是否,看是否有有过过正确定义正确定义,若已有,则从表中,若已有,则从表中取相应取相应的有关的有关信息信息,供代码的生成使用。,供代码的生成使用。若无定义则错若无定义则错。y语义分析语义分析 TABLETABLE表表若已若已有有过过正确定义正确定义,检查引用

45、与说明的,检查引用与说明的属性是否一致,属性是否一致,若不一致则错若不一致则错。y当当语法语义正确时语法语义正确时,就,就生成生成相应语句功能的相应语句功能的目标代码目标代码intint position( position(charchar* * id) id) intint i; i; strcpy(table0.name, id);strcpy(table0.name, id); i = tx + 1;i = tx + 1; whilewhile(strcmp(table-i.name, id) != 0);(strcmp(table-i.name, id) != 0); returnr

46、eturn i; i; / position/ position思考:在造表和查表过程中,如何保证每个过程的局部量不被它的外层引用?“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。赋值赋值语句的处理语句的处理if (sym = ident) if (sym = ident) / /* * 准备按照赋值语句处理准备按照赋值语句处理 * */ / i = position(id, i = position(id, * *ptx);ptx); if (i = 0) error(11)

47、; if (i = 0) error(11);/ /* * 变量未找到变量未找到 * */ / elseif(tablei.kind != variable) elseif(tablei.kind != variable) error(12);error(12); / /* * 赋值语句格式错误赋值语句格式错误 * */ / i = 0; i = 0; else.else. gendo(sto,lev-tablei.level,tablei.adr); gendo(sto,lev-tablei.level,tablei.adr); . . “雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中

48、心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。因子因子=标识符标识符| |无符号整数无符号整数|(表达式表达式)int factor(bool* fsys, int* ptx, int lev) /因子的语义分析if(sym = ident)/* 因子为常量或变量 */i = position(id, *ptx);/* 查找名字 */ if (i = 0) error(11); /* 标识符未声明 */ else switch (tablei.kind) case constant:/* 名字为常量 */ break; case

49、 variable: /* 名字为变量 */ break; case procedur:/* 名字为过程 */ error(21); /* 不能为过程名 */“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。3.5 编译程序的错误处理错误处理的原则:尽可能准确指出出错位置,错误性质,错误处理的原则:尽可能准确指出出错位置,错误性质,尽可能进行校正。尽可能进行校正。PL/0PL/0编译程序对语法错误的处理:编译程序对语法错误的处理:(1)(1)对于对于易于校正易于校正的错误,如丢了

50、逗号,分号等,指出出的错误,如丢了逗号,分号等,指出出错位置,错位置,加以校正加以校正,继续进行分析。,继续进行分析。(2)(2)对于对于难于校正难于校正的错误,给出错误的位置与性质,的错误,给出错误的位置与性质,跳过跳过后面的一些单词后面的一些单词,直到下一个可以进行正常语法分析的直到下一个可以进行正常语法分析的语法单位语法单位“雪亮工程是以区(县)、乡(镇)、村(社区)三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。 z 在在进入进入某个某个语法单位语法单位时,时,调用调用TESTTEST, ,检查当前符号检查当前符

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁