PL/0试验汇报课程名称编译原理题目名称PL/0编译程序学生学院计算机科学和技术学院专业班级学号学生姓名班内序号山东理工大学试验汇报纸第1页姓名:蔡鹏飞计算机院_11_级02班同组者成绩_________室温:气压:课程名称:编译原理老师签字试验项目编号(1)PL/0编译程序分析指导老师鞠传香实验目熟悉pl/0语言并能编写小程序掌握pl/0编译程序编译过程(词法分析、语法分析、语义分析等)试验仪器(编号)材料、工具PC机、VC++(原理概述)pl/0语言编译程序采取以语法分析为关键、一遍扫描编译方法。词法分析和代码生成作为独立子程序供语法分析程序调用。语法分析同时,提供了犯错汇报和犯错恢复功效。在源程序没有错误编译经过情况下,调用类pcode解释程序解释实施生成类pcode代码。PL/0语言文法EBNF表示EBNF表示符号说明。〈〉:用左右尖括号括起来汉字字表示语法结组成份,或称语法单位,为非终止符。∷=:该符号左部由右部定义,可读作'定义为'。|:表示'或',为左部可由多个右部定义。{}:花括号表示其内语法成份能够反复。在不加上下界时可反复0到任意次数,有上下界时为可反复次数限制。如:{*}表示*反复任意次,{*}38表示*反复3-8次。[]:方括号表示其内成份为任选项。():表示圆括号内成份优先。例:用EBNF描述<整数>文法定义: <整数>∷=[+|-]<数字>{<数字>} <数字>∷=0|1|2|3|4|5|6|7|8|9 或愈加好写法<整数>∷=[+|-]<非零数字>{<数字>}|0 <非零数字>∷=1|2|3|4|5|6|7|8|9 <数字>∷=0|<非零数字>PL/0语言文法EBNF表示PL/0语言文法EBNF表示为: 〈程序〉∷=〈分程序〉. 〈分程序〉∷=[〈常量说明部分〉][〈变量说明部分〉][〈过程说明部分〉]〈语句〉〈常量说明部分〉∷=CONST〈常量定义〉{,〈常量定义〉}; 〈常量定义〉∷=〈标识符〉=〈无符号整数〉〈无符号整数〉∷=〈数字〉{〈数字〉} 〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉}; 〈标识符〉∷=〈字母〉{〈字母〉|〈数字〉} 〈过程说明部分〉∷=〈过程首部〉〈分程序〉{;〈过程说明部分〉}; 〈过程首部〉∷=PROCEDURE〈标识符〉; 〈语句〉∷=〈赋值语句〉|〈条件语句〉|〈当型循环语句〉|〈过程调用语句〉|〈读语句〉|〈写语句〉|〈复合语句〉|〈空〉〈赋值语句〉∷=〈标识符〉∶=〈表示式〉〈复合语句〉∷=BEGIN〈语句〉{;〈语句〉}END 〈条件〉∷=〈表示式〉〈关系运算符〉〈表示式〉|ODD〈表示式〉〈表示式〉∷=[+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷=〈标识符〉|〈无符号整数〉|'('〈表示式〉')' 〈加法运算符〉∷=+|- 〈乘法运算符〉∷=*|/ 〈关系运算符〉∷=#|=|<|<=|>|>= 〈条件语句〉∷=IF〈条件〉THEN〈语句〉〈过程调用语句〉∷=CALL〈标识符〉〈当型循环语句〉∷=WHILE〈条件〉DO〈语句〉〈读语句〉∷=READ'('〈标识符〉{,〈标识符〉}')' 〈写语句〉∷=WRITE'('〈表示式〉{,〈表示式〉}')' 〈字母〉∷=a|b|…|X|Y|Z 〈数字〉∷=0|1|2|…|8|9(试验内容步骤)(1)依据PL/0语言语法图,了解PL/0语言各级语法单位结构,掌握PL/0语言正当程序结构;(2)从总体上分析整个系统体系结构、各功效模块功效、各模块之间调用关系、各模块之间接口;(3)具体分析各子程序和函数代码结构、程序步骤、采取关键算法及实现功效;(4)撰写分析汇报,关键内容包含系统结构框图、模块接口、关键算法、各模块程序步骤图等分析PL/0源程序 词法分析 PL/0语言词法分析器将要完成以下工作:(1) 跳过分隔符(如空格,回车,制表符);(2) 识别诸如begin,end,if,while等保留字;(3) 识别非保留字通常标识符,此标识符值(字符序列)赋给全局量id,而全局量sym赋值为SYM_IDENTIFIER。(4) 识别数字序列,目前值赋给全局量NUM,sym则置为SYM_NUMBER;(5) 识别:=,<=,>=之类特殊符号,ES,SYM_LEQ,SYM_GEQ等。相关过程(函数)有getsym(),getch(),其中getch()为获取单个字符过程,除此之外,它还完成:(1) 识别且跳过行结束符;(2) 将输入源文件复写到输出文件;(3) 产生一份程序列表,输出对应行号或指令计数器值。 语法分析 我们采取递归下降方法来设计PL/0编译器。以下我们给出该语言FIRST和FOLL
编译原理—pl0实验报告样本 来自淘豆网m.daumloan.com转载请标明出处.