资源描述:
《编译原理上机实习指导书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《编译原理上机实习》指导书一、上机实习目的理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,使学生既加深对编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力。二、上机实习要求在理解编译原理基本思想的基础上,选择一个自己熟悉的程序设计语言,完成编译程序的设计和实现过程。编译程序的设计可以采川自顶向卜•和自底向上两种不同的方法。由于许多高级语言(如PASCAL,C)屮的语法成分都是递归定义的,所以本实验采用递归子程序法,这是一种自顶向下的的编译方法,曲木思想是对源程序的每个(或若干个)语法成分编制一个处
2、理了程序,从处理<程序〉这个语法成分的子程序开始,在分析过程屮调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。本上机实习是为某个计算机语言设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码。三、上机实习步骤1•阅读《上机实习指导书》。2.根据设计要求写算法,画程序框图3.根据框图编写编译程序4.输入编译程序并上机调试5.撰写上机实习报告四、上机实习内容1、题目:C语言小了集编译程序的实现2、C语言小子集的文法规则:<程序>::=main(){〈分程序>}〈分程序
3、>::=〈变量说明部分〉;<语句部分〉<变量说明部分〉::二<变量说明X标识符表〉<变量说明〉::=int〈标识符表〉::二<标识符表〉,〈标识符〉〈标识符表〉::二〈标识符〉<标识符>::=〈字母〉<标识符〉::二<标识符>〈字母〉<标识符〉::二<标识符X数字〉<语句部分〉::二〈语句部分〉;〈语句>I〈语句〉<语句〉::=〈赋值语句>
4、〈条件语句>
5、<循环语句>
6、<复合语句〉<复合语句>::={<语句部分>}<赋值语句〉::二〈标识符>二<表达式〉<条件〉::二<表达式><关系运算符><表达式〉<表达式〉::二〈项>I
7、<表达式X加法运算符><项><项>::二〈因子>
8、〈项><乘法运算符X因子〉<因子〉::=〈标识符>
9、〈常量〉
10、(<表达式〉)<常量〉::=<无符号整数〉〈无符号整数>::二<数字序列〉<数字序列〉::垠数字序列>〈数字〉<数字序列〉::X数字〉〈加法运算符>::=+卜〈乘法运算符>::=*!/<关系运算符>::=<
11、>
12、!=
13、>=
14、<=
15、=〈条件语句>::=if(〈条件〉)〈语句部分>else<语句部分〉〈循环语句>::=wh订e(<条件〉)do〈语句部分〉<字母〉::=a
16、b
17、c
18、d
19、e
20、f
21、g
22、h
23、i
24、j
25、k
26、l
27、m
28、
29、n
30、o
31、p
32、q
33、r
34、s
35、t
36、u
37、v
38、w
39、x
40、y
41、zv数字>::=OI1I2I3I4I5I6I7I8I93、实现功能:(1)词法分析扫描源程序,根据词法规则,识别单词,填写相应的符号表。(2)语法分析对由源程序作语法分析,确定是否属于C语言小子集,同吋揭示出程序的内在结构。(3)语法错误检査根据C语言小子集的文法规则设置检测手段,通过查错子程序或一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。(4)语义分析与目标代码生成在语法分析的基础上,进行语义分析,生成输入源程序的目标代码。输入源程序的目标代码可以建立在一
42、个假想的处理机(虚拟机)上,也可以以所学的汇编语言为基础。输入源程序样本:main(){inta,b,x,y,max;a=l();b=l;while(a>0){b=a+b*a;a=a-l;}x=a+b;y=b+b;if(x>y)max=xelsemax=y}五、附录:PLO编译程序的实现1.PLO概述PLO语言是一种类PASCAL语言,是教学用程序设计语言,它比PASCAL语言简单,作了一些限制。PL0的程序结构比较完全,赋值语句作为基木结构,构造概念有顺序执行、条件执行和重复执行,分别由BEGIN/END.IF和WHILE
43、语句表示。此外,PLO还具有子程序概念,包括过程说明和过程调用语句。在数据类型方面,PLO只包含唯一•的整型,可以说明这种类型的常量和变量。运算符有+,-,*,/,=,<>,<,>,<=,>=,(,)。说明部分包括常量说明、变量说明和过程说明。2.PLO语言的文法规则<程序>::=<分程序>•〈分程序>::=[〈常录说明部分);][〈变量说明部分〉;]{〈过程说明部分>;}〈语句部分〉〈常量说明部分〉::二const/常量定义>{,〈常量定义>}〈常量定义〉::=〈标识符>=〈无符号整数〉<无符号整数〉::二<数字>{〈数字
44、>}〈变量说明部分>::=var<标识符〉{〈标识符>}〈标识符〉::二〈字母>{〈字母>I〈数字>}<过程说明部分〉::N过程首部X分程序〉<过程首部〉::=procedure<标识符〉〈语句部分〉::二<语句>1〈复合语句〉<复合语句〉::=begin<语句>{;<语旬>}end〈语句