欢迎来到天天文库
浏览记录
ID:56205466
大小:261.50 KB
页数:19页
时间:2020-03-20
《编译原理-pl0实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、PL/0实验报告课程名称编译原理题目名称PL/0编译程序学生学院计算机科学与技术学院专业班级学号学生姓名班内序号山东理工大学实验报告纸第1页姓名:蔡鹏飞计算机院_11_级02班同组者成绩_________室温:气压:课程名称:编译原理教师签字实验项目编号(1)PL/0编译程序的分析指导教师鞠传香实验目的1.熟悉pl/0语言并能编写小程序2.掌握pl/0编译程序的编译过程(词法分析、语法分析、语义分析等)实验仪器(编号)材料、工具PC机、VC++6.0(原理概述)pl/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和
2、代码生成作为独立的子程序供语法分析程序调用。语法分析的同时,提供了出错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类pcode解释程序解释执行生成的类pcode代码。PL/0语言文法的EBNF表示EBNF表示的符号说明。 〈〉:用左右尖括号括起来的中文字表示语法构造成分,或称语法单位,为非终结符。 ∷=:该符号的左部由右部定义,可读作'定义为'。
3、:表示'或',为左部可由多个右部定义。 {}:花括号表示其内的语法成分可以重复。在不加上下界时可重复0到任意次数,有上下界时为可重复次数的限制。如:{*}表示*重复任意次
4、,{*}38表示*重复3-8次。 []:方括号表示其内的成分为任选项。 ():表示圆括号内的成分优先。例:用EBNF描述<整数>文法的定义: <整数>∷=[+
5、-]<数字>{<数字>} <数字>∷=0
6、1
7、2
8、3
9、4
10、5
11、6
12、7
13、8
14、9 或更好的写法 <整数>∷=[+
15、-]<非零数字>{<数字>}
16、0 <非零数字>∷=1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9 <数字>∷=0
25、<非零数字>PL/0语言文法的EBNF表示PL/0语言文法的EBNF表示为: 〈程序〉∷=〈分程序〉. 〈分程序〉∷=[〈常量说明部分〉][〈变量
26、说明部分〉][〈过程说明部分〉]〈语句〉 〈常量说明部分〉∷=CONST〈常量定义〉{,〈常量定义〉}; 〈常量定义〉∷=〈标识符〉=〈无符号整数〉 〈无符号整数〉∷=〈数字〉{〈数字〉} 〈变量说明部分〉∷=VAR〈标识符〉{,〈标识符〉}; 〈标识符〉∷=〈字母〉{〈字母〉
27、〈数字〉} 〈过程说明部分〉∷=〈过程首部〉〈分程序〉{;〈过程说明部分〉}; 〈过程首部〉∷=PROCEDURE〈标识符〉; 〈语句〉∷=〈赋值语句〉
28、〈条件语句〉
29、〈当型循环语句〉
30、〈过程调用语句〉
31、〈读语句〉
32、〈写语句〉
33、〈复合语句〉
34、
35、〈空〉 〈赋值语句〉∷=〈标识符〉∶=〈表达式〉 〈复合语句〉∷=BEGIN〈语句〉{;〈语句〉}END 〈条件〉∷=〈表达式〉〈关系运算符〉〈表达式〉
36、ODD〈表达式〉 〈表达式〉∷=[+
37、-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷=〈标识符〉
38、〈无符号整数〉
39、'('〈表达式〉')' 〈加法运算符〉∷=+
40、- 〈乘法运算符〉∷=*
41、/ 〈关系运算符〉∷=#
42、=
43、<
44、<=
45、>
46、>= 〈条件语句〉∷=IF〈条件〉THEN〈语句〉 〈过程调用语句〉∷=CALL〈标识
47、符〉 〈当型循环语句〉∷=WHILE〈条件〉DO〈语句〉 〈读语句〉∷=READ'('〈标识符〉{,〈标识符〉}')' 〈写语句〉∷=WRITE'('〈表达式〉{,〈表达式〉}')' 〈字母〉∷=a
48、b
49、…
50、X
51、Y
52、Z 〈数字〉∷=0
53、1
54、2
55、…
56、8
57、9(实验内容步骤)(1)根据PL/0语言的语法图,理解PL/0语言各级语法单位的结构,掌握PL/0语言合法程序的结构;(2)从总体上分析整个系统的体系结构、各功能模块的功能、各模块之间的调用关系、各模块之间的接口;(3)详细分析各子程序和函数的代码结构、程序流程、采用的主要算
58、法及实现的功能;(4)撰写分析报告,主要内容包括系统结构框图、模块接口、主要算法、各模块程序流程图等1.分析PL/0源程序 词法分析 PL/0的语言的词法分析器将要完成以下工作:(1) 跳过分隔符(如空格,回车,制表符);(2) 识别诸如begin,end,if,while等保留字;(3) 识别非保留字的一般标识符,此标识符值(字符序列)赋给全局量id,而全局量sym赋值为SYM_IDENTIFIER。(4) 识别数字序列,当前值赋给全局量NUM,sym则置为SYM_NUMBER;(5) 识别:=
59、,<=,>=之类的特殊符号,全局量sym则分别被赋值为SYM_BECOMES,SYM_LEQ,SYM_GEQ等。相关过程(函数)有getsym(),getch(),其中getch()为获取单个字符的过程,除此之外,它还完成:(1)
此文档下载收益归作者所有