- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 第2章 PL/0编译程序的实现 2.1 PL/0语言描述 2.2 PL/0编译程序的结构 2.3 PL/0编译程序的词法分析 2.4 PL/0编译程序的语法语义分析 2.5 PL/0编译程序的目标代码结构和代码生成 2.6 PL/0编译程序的语法错误处理 2.7 PL/0编译程序的目标代码解释执行时的存储分配 何为PL/0语言? PL/0语言: PASCAL语言的子集,功能简单,结构清晰,可读性强,具备了一般高级语言的必备部分。 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; BEGINCALL P; END. PL/0编译程序 pcode解释程序 PL/0源程序 注:此处的pcode代码专指PL/0的目标代码,与传统pcode有区别 pcode代码 * 2.1 PL/0语言描述 语法描述的目的: 用有穷的文法形式,描述(验证)无穷的句子形式。 语法描述的常用形式: 非形式化描述(不规范) 语法描述图:直观、易读。 EBNF(扩充的巴科斯-瑙尔范式) NEXT PL/0 语言的非形式描述 数据类型只有整型 标识符的有效长度是10,以字母开始的字母数字串 过程无参,可嵌套(最多三层),可递归调用 变量的作用域同PASCAL,常量为全局的,无标 语句类型:赋值语句,if...then..., while...do..., read, write, call, 复合语句begin... end, 说明语句: const..., var..., procedure… 13个保留字:if, then, while, do, read, write, call, begin, end, const, var, procedure, odd * PL/0 语言的语法描述图 (1)终结符VT 语法成分中的最小单位,构成语言文法的单词。 椭圆或圆圈内的单词表示VT (2)非终结符VN 语法成分,在书写程序时并不出现,但可一直追溯成 VT 表示的形式。 矩形内的符号表示VN (13-15页) BNF(BACKUS-NAUR FORM)是根据美国的John W.Backus与丹麦的Peter Naur来命名的,它从语法上描述程序设计语言的元语言。 采用BNF可说明哪些符号序列是对于某给定语言在语法上有效的程序。 BNF引入的符号: 表示语法构造成分(语法单位),为非终结符 ∷= ‘定义为’ | ‘或’ EBNF引入的符号: { } 表示花括号内的语法成分可重复 [ ] 表示方括号内的语法成分为任选项 ( ) 表示圆括号内的成分优先 PL/0 语言文法的 EBNF 表示 * 两个用EBNF描述“整数”的例子 整数 ∷= [+|-]数字{数字} 数字 ∷= 0|1|2|3|4|5|6|7|8|9 或 整数 ∷= [+|-]非零数字{数字}|0 非零数字 ∷= 1|2|3|4|5|6|7|8|9 数字 ∷= 0|1|2|3|4|5|6|7|8|9 PL/0语言文法 参见 P15,16 练习:P.31 题6(2)(3) * 2.2 PL/0编译程序的结构 PL/0 编译过程采用一趟扫描方式 以语法语义分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程。 当语法分析需要读单词时,就调用词法分析程序 当语法分析正确需要生成相应的目标代码时,则调用代码生成程序 用表格管理程序建立变量、常量和过程标识符的说明与引用之间的信息联系。 用出错处理程序对词法和语法分析遇到的错误,给出在源程序中出错的位置和错误性质。 * 语法语义分析程序 词法分析程序 表格管理程序 出错处理程序 代码生成程序 目标程序 PL/0 编译程序的结构图 PL/0源程序 目标程序 解释执行程序 输入数据 结果 编译过程 解释执行过程 * 编译程序总体流程图 17页 * 所需识别的单词: 关键字: 如 BEGIN、END、IF、THEN 等 运算符: 如 +、-、*、/、:=、#、=、= 等 标识符: 用户定义的变量名、常数名、过程名 常数: 如 10、25、100 等整数 界符: 如 , . ; ( ) 等 2.3 PL/0编译程序的词法分析 词法分析过程GETSYM 所要完成的任务:滤空格、识别保留字、识别标识符、拼数、拼复合词、输出源程序 参见 P.19 图
文档评论(0)