- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实习题
PL/0语言文法的BNF表示:
〈程序〉→〈分程序 .
〈分程序〉→ [常量说明部分][变量说明部分][过程说明部分]〈语句〉
常量说明部分 → CONST常量定义{ ,常量定义};
常量定义 → 标识符=无符号整数
无符号整数 → 数字{数字}
变量说明部分 → VAR标识符{ ,标识符};
标识符 → 字母{字母|数字}
过和说明部分 → 过程首部分程度;{过程说明部分}
过程首部 → procedure标识符;
语句 → 赋值语句|条件语句| 当型循环语句 |过程调用语句|读语句|写语句|复合语句|空
赋值语句 → 标识符:=表达式
复合语句 → begin语句{ ;语句}end
条件 → 表达式关系运算符表达式|ood表达式
表达式 → [+|-]项{加减运算符项}
项 → 因子{乘除运算符因子}
因子 → 标识符|无符号整数|(表达式)
加减运符 → +|-
乘除运算符 → *|/
关系运算符 → =|#||=||=
条件语句 → if条件then语句
过程调用语句 → call标识符
当型循环语句 → while条件do语句
读语句 → read(标识符{ ,标识符})
写语句 → write(标识符{,标识符})
字母 → a|b|c…x|y|z
数字 → 0|1|2…7|8|9
为PL/0语言建立一个词法分程序GETSYM(函数)
把关键字、算符、界符称为语言固有的单词,标识符、常量称为用户自定义的单词。为此设置三个全程量:SYM,ID,NUM 。
SYM:存放每个单词的类别,为内部编码的表示形式。
ID:存放用户所定义的标识符的值,即标识符字符串的机内表示。
NUM:存放用户定义的数。
GETSYM要完成的任务:
滤掉单词间的空格。
识别关键字,用查关键字表的方法识别。当单词是关键字时,将对应的类别放在SYM中。如IF的类别为IFSYM,THEN的类别为THENSYM。
识别标识符,标识符的类别为IDENT,IDENT放在SYM中,标识符本身的值放在ID中。关键字或标识符的最大长度是10。
拼数,将数的类别NUMBER放在SYM中,数本身的值放在NUM中。
拼由两个字符组成的运算符,如:=、=等等,识别后将类别存放在SYM中。
打印源程序,边读入字符边打印。
由于一个单词是由一个或多个字符组成的,所以在词法分析程序GETSYM中定义一个读字符过程GETCH。
为PL/0语言建立一个语法分析程序BLOCK(函数)
PL/0编译程序采用一遍扫描的方法,所以语法分析和代码生成都有在BLOCK中完成。BLOCK的工作分为两步:
说明部分的处理
说明部分的处理任务就是对每个过程(包括主程序,可以看成是一个主过程)的说明对象造名字表。填写所在层次(主程序是0层,在主程序中定义的过程是1层,随着嵌套的深度增加而层次数增大。PL/0最多允许3层),标识符的属性和分配的相对地址等。标识符的属性不同则填写的信息不同。
所造的表放在全程量一维数组TABLE中,TX为指针,数组元素为结构体类型数据。LEV给出层次,DX给出每层的局部量的相对地址,每说明完一个变量后DX加1。
例如:一个过程的说明部分为:
const a=35,b=49;
var c,d,e;
procedure p;
var g;
对它的常量、变量和过程说明处理后,TABLE表中的信息如下:
NAME: a
NAME: b
NAME: c
NAME: d
NAME: e
NAME: p KIND: CONSTANT
KIND: CONSTANT
KIND: VARIABLE
KIND: VARIABLE
KIND: VAEIABLE
KIND: PROCEDURE VAL: 35
VAL: 49
LEVEL: LEV
LEVEL: LEV
LEVEL: LEV
LEVEL: LEV
ADR: DX
ADR: DX+1
ADR: DX+2
ADR: NAME: g
。
。
。 KIND: VARIABLE
。
。
。 LEVEL: LEV+1
。
。
。 ADR: DX
。
。
。 对于过程名的ADR域,是在过程体的目标代码生成后返填过程体的入口地址。
TABLE表的索引TX和层次单元LEV都是以BLOCK的参数形式出现,在主程序调用BLOCK时实参的值为0。每个过程的相对起始位置在BLOCK内置初值DX=3。
2.语句处理和代码生成
对语句逐句分析,语法正确则生目标代码,当遇到标识符的引用则去查TABLE表,看是否有过正确的定义,若有则从表中取出相关的信息,供代码生成用。PL/0语言的代码生成是由过程GEN完成。
您可能关注的文档
- 江西省赣州市十三县(市)2016届高三历史上学期期中联考试题.doc
- 注册咨询师组织与管理—知识点.docx
- 油画大师油画技法自述实技法超写实详细步骤(油画大师冷军)超赞的.doc
- 流程与管理规范二(差旅流程与相关管理制度).doc
- 流程优化及再造(BPR)方案.docx
- 汽车发动机装配线中的MES订单管理系统.docx
- 流程银行百问百答.doc
- 流程部职责.doc
- 浅谈《语文练习应走向生活》.doc
- 流程的优化参考教案.doc
- 九年级语文上册第2单元写作观点要明确.pptx
- 中职院校系部教学工作回顾与成果展示.docx
- 西师版四上三单元《角的度量》第1课时教学设计.docx
- 专题09 直线与圆锥曲线的位置关系压轴题专练(原卷版)2021-2022学年高二数学专题训练(沪教版2021选择性必修一).docx
- 急诊救助培训资料总.pptx
- 乐山文化课件下载网.pptx
- 毕业设计(论文)过程管理手册正文.docx
- 专题10 数列的综合应用专练(解析版)2021-2022学年高二数学下学期专题训练(沪教版2021选择性必修一).docx
- 国际商贸中心现场安全施工管理制度.docx
- UPS电源初步设计-电力电子技术课程设计(论文).docx
文档评论(0)