编译原理实习题

编译原理实习题

ID:41127929

大小:51.00 KB

页数:5页

时间:2019-08-17

编译原理实习题_第1页
编译原理实习题_第2页
编译原理实习题_第3页
编译原理实习题_第4页
编译原理实习题_第5页
资源描述:

《编译原理实习题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Pl/0语言文法的BNF表示:〈程序〉→〈分程序〉。〈分程序〉→[<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉<常量说明部分>→CONST<常量定义>{,<常量定义>};<常量定义>→<标识符>=<无符号整数><无符号整数>→<数字>{<数字>}<变量说明部分>→VAR<标识符>{,<标识符>};<标识符>→<字母>{<字母><数字>}<过和说明部分>→<过程首部><分程度>;{<过程说明部分>}<过程首部>→procedure<标识符>;<语句>→<赋值语句><条件语句><当型循环语句><过程调用语句><读语句><写语句><复合语句><空>

2、<赋值语句>→<标识符>:=<表达式><复合语句>→begin<语句>{;<语句>}<条件>→<表达式><关系运算符><表达式>ood<表达式><表达式>→[+-]<项>{<加减运算符><项>}<项>→<因子>{<乘除运算符><因子>}<因子>→<标识符><无符号整数>(<表达式>)<加减运符>→+-<乘除运算符>→/<关系运算符>→=#<<=>>=<条件语句>→if<条件>then<语句><过程调用语句>→call<标识符><当型循环语句>→while<条件>do<语句><读语句>→read(<标识符>{,<标识符>})<写语句>→write(<标识符

3、>{,<标识符>})<字母>→abc…xyz<数字>→012…789一.PL/0语言建立一个词法分程序GETSYM(函数)把关键字、算符、界符称为语言固有的单词,标识符、常量称为用户自定义的单词。为此设置三个全程量:SYM,ID,NUM。SYM:存放每个单词的类别,为内部编码的表示形式。ID:存放用户所定义的标识符的值,即标识符字符串的机内表示。NUM:存放用户定义的数。GETSYM要完成的任务:1.滤掉单词间的空格。2.识别关键字,用查关键字表的方法识别。当单词是关键字时,将对应的类别放在SYM中。如IF的类别为IFSYM,THEN的类别为THENSYM。3.识

4、别标识符,标识符的类别为IDENT,IDRNT放在SYM中,标识符本身的值放在ID中。关键字或标识符的最大长度是10。4.拼数,将数的类别NUMBER放在SYM中,数本身的值放在NUM中。1.拼由两个字符组成的运算符,如:>=、<=等等,识别后将类别存放在SYM中。2.打印源程序,边读入字符边打印。由于一个单词是由一个或多个字符组成的,所以在词法分析程序GETSYM中定义一个读字符过程GETCH。一.PL/0语言建立一个语法分析程序BLOCK(函数)PL/0编译程序采用一遍扫描的方法,所以语法分析和代码生成都有在BLOCK中完成。BLOCK的工作分为两步:a)说明

5、部分的处理说明部分的处理任务就是对每个过程(包括主程序,可以看成是一个主过程)的说明对象造名字表。填写所在层次(主程序是0层,在主程序中定义的过程是1层,随着嵌套的深度增加而层次数增大。PL/0最多允许3层),标识符的属性和分配的相对地址等。标识符的属性不同则填写的信息不同。所造的表放在全程量一维数组TABLE中,TX为指针,数组元素为结构体类型数据。LEV给出层次,DX给出每层的局部量的相对地址,每说明完一个变量后DX加1。例如:一个过程的说明部分为:consta=35,b=49;varc,d,e;procedurep;varg;对它的常量、变量和过程说明处理后

6、,TABLE表中的信息如下:TX0→TX1→NAME:aNAME:bNAME:cNAME:dNAME:eNAME:pKIND:CONSTANTKIND:CONSTANTKIND:VARIABLEKIND:VARIABLEKIND:VAEIABLEKIND:PROCEDUREVAL:35VAL:49LEVEL:LEVLEVEL:LEVLEVEL:LEVLEVEL:LEVADR:DXADR:DX+1ADR:DX+2ADR:NAME:g。。。KIND:VARIABLE。。。LEVEL:LEV+1。。。ADR:DX。。。对于过程名的ADR域,是在过程体的目标代码生成后返填

7、过程体的入口地址。TABLE表的索引TX和层次单元LEV都是以BLOCK的参数形式出现,在主程序调用BLOCK时实参的值为0。每个过程的相对起始位置在BLOCK内置初值DX=3。2.语句处理和代码生成对语句逐句分析,语法正确则生目标代码,当遇到标识符的引用则去查TABLE表,看是否有过正确的定义,若有则从表中取出相关的信息,供代码生成用。PL/0语言的代码生成是由过程GEN完成。GEN过程有三个参数,分别代表目标代码的功能码、层差、和位移量。生成的目标代码放在数组CODE中。CODE是一维数组,数组元素是结构体类型数据。PL/0语言的目标指令是一种假想的栈式计算机

8、的汇编语言

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。