- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.PL/0编译程序 2.PL/0语言 PL/0语言特征 PL/0的语法描述图 PL/0语言文法的EBNF表示 PL/0程序示例 PL/0语言是PASCAL语言的子集 数据类型,只有整型 数据结构 ,只有简变和常量 整数最多为14位 标识符的有效长度是10位 过程最多可嵌套三层 作用域规则(内层可引用包围它的外层定义的标识符),过程可嵌套定义,可递归调用 2.2 语法描述图 分程序 2.3 EBNF范式 EBNF 引入的符号(元符号): :用左右尖括号括起来的语法成分为非终结符 ∷= :‘定义为’ ∷=的左部由右部定义 | :‘或’ { } :表示花括号内的语法成分可重复任意次或限 定次数 [ ] :表示方括号内的语法成分为任选项 ( ) :表示圆括号内的成分优先 例:用EBNF描述分程序的定义 分程序∷=[常量说明部分][变量说明部分][过程说明部分] 语句 常量说明部分∷= CONST常量定义 {, 常量定义}; 常量定义∷= 标识符=无符号整数 变量说明部分∷= VAR 标识符 {, 标识符}; 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; BEGIN CALL P; END. 3.PL/0编译程序的总体设计 其编译过程采用一趟扫描方式 以语法、语义分析程序为核心 词法分析程序和代码生成程序都作为一个过程,当语法分析需要读单词时就调用词法分析程序,而当语法、语义分析正确,需要生成相应的目标代码时,则调用代码生成程序。 表格管理程序实现变量,常量和过程标识符的信息的登录与查找。 出错处理程序,对词法和语法、语义分析遇到的错误给出在源程序中出错的位置和与错误性质有关的编号,并进行错误恢复。 4.词法分析 分析过程所要完成的任务: 读源程序(getch) 滤空格 识别保留字 识别标识符 拼数 拼双字符单词 识别单字符单词 重要变量及过程 符号表 type symbol=( nul, ident, number, plus, …, varsym, procsym ); 保留字表: word[1]:=‘BEGIN‘; word[2]:=‘CALL‘; ... word[13]:=‘WRITE‘; 单字符表: ssym[‘+’]:=plus; ssym[‘-’]:=minus; … ssym[‘;’]:=semicolon; 重要变量及过程 全局变量 1)SYM:存放单词的类别 如:有程序段落为: begin initial := 60;end 对应单词翻译后变为: begin beginsym, initial ident, ‘:= ‘ becomes, 60 number, ‘;’ semicolon, end endsym 。 2)ID: 存放用户所定义的标识符的值 如:initial (在SYM中放ident,在ID中放initial) 3)NUM:存放用户定义的数 如:60 (在SYM中放在number在NUM中放60) GETSYM框图(见教材P19图2.5) 任务一:读程序 内容 读程序GetSym() 识别保留字 识别标识符 拼数 拼双字符单词 识别单字符单词 要求 每班前十名同学给予检查 任务二:扩充单词 内容 增加保留字:FOR、DOWNTO和TO 增加双字符单词:*=和/= 要求 设计测试方式,测试单词是否能被识别 每班前十名同学给予检查 5. 语法分析 —递归子程序法 任务三 扩充条件语句(带else子句) 画出语法描述图 写出递归子程序
文档评论(0)