编译原理实验_第1页
编译原理实验_第2页
编译原理实验_第3页
编译原理实验_第4页
编译原理实验_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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语法描述图constidentnumbervaridentprocedureident分程序语句分程序例:用语法描述图描述分程序的定义EBNF引入的符号(元符号):<>:用左右尖括号括起来的语法成分为非终结符∷=:‘定义为’∷=的左部由右部定义|:‘或’{}:表示花括号内的语法成分可重复任意次或限定次数

[]:表示方括号内的语法成分为任选项():表示圆括号内的成分优先2.3EBNF范式例:用EBNF描述分程序的定义<分程序>∷=[<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句><常量说明部分>∷=CONST<常量定义>{,<常量定义>};<常量定义>∷=<标识符>=<无符号整数><变量说明部分>∷=VAR<标识符>{,<标识符>};

PL/0程序示例

CONSTA=10;(*常量说明部分*) VARB,C;(*变量说明部分*) PROCEDUREP;

(*过程说明部分*) VARD; PROCEDUREQ; VARX;

BEGIN

READ(X); D:=X; WHILEX#0DO CALLP;

END;

BEGIN WRITE(D); CALLQ;

END; BEGIN CALLP; END.Q的过程体P的过程体主程序体3.PL/0编译程序的总体设计词法分析程序语法语义分析程序代码生成程序表格管理程序出错处理程序PL/0源程序目标程序其编译过程采用一趟扫描方式以语法、语义分析程序为核心

词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。表格管理程序实现变量,常量和过程标识符的信息的登录与查找。出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。4.词法分析分析过程所要完成的任务:

读源程序(getch)

滤空格识别保留字识别标识符拼数拼双字符单词识别单字符单词符号表typesymbol=(nul,ident,number,plus,…,varsym,procsym);保留字表:word[1]:=‘BEGIN‘;word[2]:=‘CALL‘;...word[13]:=‘WRITE‘;单字符表:ssym[‘+’]:=plus;ssym[‘-’]:=minus;…ssym[‘;’]:=semicolon;重要变量及过程注意:按ASCII顺序存储保留字。查到时找到相应的内部表示wsym[1]:=beginsym;wsym[2]:=callsym;…wsym[13]:=writesym;全局变量1)SYM:存放单词的类别如:有程序段落为:begininitial:=60;end对应单词翻译后变为:beginbeginsym,initialident,‘:=‘becomes,60number,‘;’semicolon,endendsym。2)ID:存放用户所定义的标识符的值如:initial(在SYM中放ident,在ID中放initial)3)NUM:存放用户定义的数如:60(在SYM中放在number在NUM中放60)GETSYM框图(见教材P19图2.5)重要变量及过程任务一:读程序内容读程序GetSym()

识别保留字识别标识符拼数拼双字符单词识别单字符单词要求每班前十名同学给予检查任务二:扩充单词内容增加保留字:FOR、DOWNTO和TO增加双字符单词:*=和/=要求设计测试方式,测试单词是否能被识别每班前十名同学给予检查

5.语法分析

—递归子程序法对应每个非终结符语法单元,编一个独立的处理过程(或子程序)。沿语法描述图箭头所指出的方向进行分析:

1)遇到分支点时,将当前的单词与分支点上多个终结符逐个相比较,若都不匹配时可能是进入下一个非终结符语法单位或是出错。

2)当遇到非终结符时,则调用相应的处理过程;

3)当遇到描述图中是终结符时,则判断当前读入的单词是否与图中的终结符相匹配,若匹配,再读取下一个单词继续分析。程序pl0分程序block语句

statement条件condition表达式expression项term因子factor语法调用关系图语句例:条件语句(不带else子句)的递归子程序if条件thenstatement(){if(SYM==ifsym){//处理条件语句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//处理其它语句}语句任务三扩充条件语句(带else子句)画出语法描述图写出递归子程序类pcode代码语句的语义分析和处理6.语义分析

目标代码类pcode是一种假想栈式计算机的汇编语言。指令格式:类pcode代码是由过程

GEN生成的,放在数组CODE中。flaf功能码l层次差(标识符引用层减去定义层)a根据不同的指令有所区别6.1类pcode代码指令功能表

CONSTa=10;

VARb,c;

BEGIN

READ(b);

WHILEb#0DO

BEGIN

READ(b);

END

END.

(0)

int05(1)opr016(2)sto03(3)lod03(4)lit00(5)opr09(6)jpc016(7)opr016(8)sto03(9)jmp03(10)opr00例:pcode代码示例解释器的结构一维整型数组S作为运行栈RADLSLbt每次调用过程时会在栈顶分配3个存储单元:RA:返回地址,记录调用该过程时目标程序的断点;DL:动态链,指向调用过程的AR基地址;SL:静态链,指向定义该过程的直接定义外过程的AR基地址当前AR的基地址栈顶位置

CONSTa=10;

VARb,c;

BEGIN

READ(b);

WHILEb#0DO

BEGIN

READ(b);

END

END.

(0)

int05(1)opr016(2)sto03(3)lod03(4)lit00(5)opr09(6)jpc010(7)opr016(8)sto03(9)jmp03(10)opr00例:pcode代码的解释执行cb00020200100<条件语句>::=if<条件>then<语句>if(SYM==ident){//处理条件语句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//处理其它语句6.2条件语句的语义分析和处理(a>b)lod0alod0bopr012write(a)lod0aopr014opr015<条件语句>::=if<条件>then<语句>if(SYM==ident){//处理条件语句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//处理其它语句6.2条件语句的语义分析和处理CS(a>b)lod0alod0bopr012write(a)lod0aopr014opr015YNlod0alod0bopr012lod0aopr014opr015jpc00<条件语句>::=if<条件>then<语句>if(SYM==ident){//处理条件语句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//处理其它语句6.2条件语句的语义分析和处理CS(a>b)write(a)YNlod0alod0bopr012lod0aopr014opr015jpc00GEN(jpc,0,0)<条件语句>::=if<条件>then<语句>if(SYM==ident){//处理条件语句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//处理其它语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论