编译原理上机实习指导书201511修改.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《编译原理上机实习指导书201511修改.doc》由会员分享,可在线阅读,更多相关《编译原理上机实习指导书201511修改.doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理上机实习指导书一、上机实习目的理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,使学生既加深对编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力。二、上机实习要求在理解编译原理基本思想的基础上,选择一个自己熟悉的程序设计语言,完成编译程序的设计和实现过程。编译程序的设计可以采用自顶向下和自底向上两种不同的方法。由于许多高级语言(如PASCAL,C)中的语法成分都是递归定义的,所以本实验要求学生采用递归下降分析技术,这是一种自顶向下的的编译方法,其基本思想是对语言的每个(或若干个)语法成分编制一个处理子程序,从处理这个语法成分的子程序开始,在分析过程中调用一系列
2、过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。本上机实习是为C语言(子集)设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码(汇编语言)或中间代码(四元式)。三、上机实习步骤1阅读上机实习指导书。2根据设计要求写算法,画程序框图3根据框图编写编译程序4输入编译程序并上机调试5撰写上机实习报告四、上机实习内容1、题目:C语言小子集编译程序的实现2、C语言小子集的文法规则::main() :=; :=:=int:=,:= :=:=:= :=;|:|:= := :=|:=|:|():=:=:=:+|-:=*|:|!=|=|=|=:=:|:=if
3、()else:=while()do:=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z:=0|1|2|3|4|5|6|7|8|93、实现功能:(1)词法分析扫描源程序,根据词法规则,识别单词,填写相应的表。(2)语法分析对源程序作语法分析,确定是否属于C语言小子集,同时揭示出程序的内在结构。 (3)语法错误检查根据C语言小子集的文法规则设置检测手段,通过查错子程序或一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。(4)语义分析与目标代码生成在语法分析的基础上,进行语义分析,生成输入源程序的目标代码。输入源程序的目标代码可以建
4、立在一个假想的处理机(虚拟机)上,或者以所学的汇编语言为基础,也可以生成四元式序列。输入源程序样本:main () int a,b,y,max;a=10; b= ;while (a0) b=a+b*a;a=a-1x=a+b; y=b+b;if (xy) max=x else max=y五、附录:PL0编译程序的实现1 PL0概述PL0语言是一种类PASCAL语言,是教学用程序设计语言,它比PASCAL语言简单,作了一些限制。PL0的程序结构比较完全,赋值语句作为基本结构,构造概念有顺序执行、条件执行和重复执行,分别由BEGIN/END、IF和WHILE语句表示。此外,PL0还具有子程序概念,包
5、括过程说明和过程调用语句。在数据类型方面,PL0只包含唯一的整型,可以说明这种类型的常量和变量。运算符有+,-,*,/,=,=,(,)。说明部分包括常量说明、变量说明和过程说明。2 PL0语言的文法规则: :=常量说明部分); :=const, : := :=var :=| :=:=procedure:=|:=begin;end:| | :=:= :=|odd :=+|-|:=|:|():+|-:=*|:|=|=|=:=ifthen:=call:=whiledo:=read(,) :=write(,):=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w
6、|x|y|z:=0|1|2|3|4|5|6|7|8|93 PL0编译程序的设计思想编译程序的设计可以采用自顶向下和自底向上两种不同的方法。由于许多高级语言(如PASCAL,C)中的语法成分都是递归定义的,PL0也是如此,所以本实验采用递归子程序法,这是一种自顶向下的的编译方法,其基本思想是对源程序的每个(或若干个)语法成分编制一个处理子程序,从处理这个语法成分的子程序开始,在分析过程中调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。4PL0编译程序的功能(1)语法分析 对由PL0语言编制的程序作语法分析,确定是否属于PL0语言,同时揭示出程序的内在结构。 (2)语
7、法错误检查 根据PL0语言的文法规则设置检测手段,通过查错子程序和一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。 (3)生成目标代码 PL0语言的目标代码是建立在一个假想的处理机上,此处理机称为PL0处理机。 (4)执行目标代码 PL0处理机是一种假想的处理机,其目标代码不能在实际的机器上执行,故此编译程序设置了一个子程序,它对PL0语言的目标代码逐条解释执行,最后得出所需结果。5PL0编译程序的有关过程及函数在PL0语言的编译文本中,除了常量和变量说明外,共有18个相互嵌套或并列的过程(或函数)。现对这些过程和函数作扼要说明。(1)error(n):其功能是报告PL0源程序
8、的出错信息。n为错误类型号,共可查出36种错误。(2)getsym:词法分析子程序。其功能为读单词。getch:读字符子程序。它嵌套于读单词子程序中。(3)gen(x,y,z),伪代码生成子程序。其功能是根据不同的x、y、z生成不同的伪代码。x表示指令码,y表示层差,z表示位移量或数。 (4)test(sl,s2,n):查错子程序。其功能是检测源程序中的语法错误。(5)block(1ev,tx,fsys):分程序处理模块。其功能为对分程序进行处理。lev表示层差,tx表示标识符表的下标,fsys是符号集,表示可能出现的符号。分程序处理模块是整个编译程序的核心,它包含以下的过程和函数。enter
9、(k):其功能是造符号表table。k表示符号的类型,其取值范围是(constant, variable,proceable),即此子程序对常量、变量和过程造符号表table,以备检查标识符是否说明过。position(id):其功能是查符号表,它是一个函数。 id是所检查的标识符,若查到则给出标识符id在标识符表中的位置,否则给0。constdeclaration:常量造表子程序。其功能是为常量造一张常量表,内填常量名、常量值。它通过调用子程序enter(k)完成,此时kconstant。vardeclaration:变量造表子程序。其功能是为变量造一张变量表,内填变量名、所处层号。它也是通
10、过调用子程序enter(k)来完成的,此时k=variable。listcode,打印(伪)代码子程序。其功能是输出生成的目标代码。statement(fsys):语句处理子程序。其功能是处理语句,它是递归调用的核心部分。其递归调用顺序如下:expression(fsys):处理算术表达式子程序;term(fsys):处理项子程序;condition(fsys):处理因子子程序。(6)interpret,执行目标代码子程序。其功能是对编译过程中生成的目标代码(伪代码)逐条解释执行。 base(l):提供计算静态链信息子程序。它为过程调用提供调用所需的基地址。整个PL0编译程序通过主程序调用分程
11、序处理模块block,再通过block递归调用上述的子程序,达到对PL0语言的程序进行编译的目的。6编译步骤程序中用数组word存贮PL0语言的所有保留字。保留字有begin、call、const、do、end、if、odd、procedure、read、then、var、while、write;用数组swym存贮保留字所对应的符号表symbol中的符号;用数组ssym存贮关系运算符及特殊符号+、-、*、/、(、)、=、,、及;所对应的符号表symbol中的符号;用数组mnemonic存贮目标代码的指令码部分。其具体步骤如下:在主程序中给出编译程序所需的初始值。置字符字数cc、行长ll、代码分
12、配下标cx、错误个数err等为0。调getsym读单词;调block模块,进入分程序处理;判断所读单词是否为常量说明符号constsym,是则转4),否则转5)。读单词并作常量说明处理;查所读单词是否为“,”,是则重复本步;否则判断此单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;所读单词是否为变量说明符号variable,是则读单词并作变量说明处理,再读单词并判断是否为“,”,是则重复本步;否则判断此单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;cxl:=cx,并生成jmp 0,0指令,判断所读单词是否为过程说明符号proceduresym,是则读单词转7),否则转
13、11);判断所读单词是否为标识符,是则转8),否则给出出错信息再进行下一步;标识符填表,再读单词。判断所读单词是否为“;”,是则读单词,否则给出出错信息。进行下一步;递归调用分程序处理子程序block; 最近所读单词是否为“;”,是则继续读一单词,否则给出出错信息。转6);codecxl.a:=cx,生成分配局部变量指令,语句处理,生成opr 0,0指令;返回主程序,err是否为0,是则调子程序interpret,转13),否则给出出错信息,结束编译;解释执行生成的目标代码,列出结果。 PL0编译程序及主要参数1)PL0编译程序program plO(input,output,ff,fi,fw
14、2);带有代码生成的PL0编译程序 label 99; const norw13; 保留字个数 txmax=100, 标识符表的长度nmax=14, 数中数字的最大个数a1=10; 标识符的长度amax20471;最大地址 levmax3; 程序体嵌套的最大深度cxmax200; 代码数组的大小writex=20;type symbol=(nul,ident,number,plus,minus,times,slash,oddsym,eql,neq,lss,leq,gtr,geq,lparen,rparen,comma,semicolon,period,becomes,beginsym, end
15、sym,ifsym,thensym,whilesym,dosym,callsym,constsym,varsym,procsym,readsym,writesym,upcomma) ;alfapacked array1.a1 of char;object(constant,variable,proceable) ;symsetset Of symbol;fct=(1it,opr,lod,sto,cal,int,jmp,jpc);functionsinstruction=packed recordf:fct ; 功能码l: 0.1evmax;层a:0.amax; 相对地址end; lit 0,a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 上机 实习 指导书 201511 修改
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内