- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理上机实习》指导书
一、上机实习目的
理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,使学生既加深对编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力。
二、上机实习要求
在理解编译原理基本思想的基础上,选择一个自己熟悉的程序设计语言,完成编译程序的设计和实现过程。
编译程序的设计可以采用自顶向下和自底向上两种不同的方法。由于许多高级语言(如PASCAL,C)中的语法成分都是递归定义的,所以本实验要求学生采用递归下降分析技术,这是一种自顶向下的的编译方法,其基本思想是对语言的每个(或若干个)语法成分编制一个处理子程序,从处理程序这个语法成分的子程序开始,在分析过程中调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止。
本上机实习是为C语言(子集)设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码(汇编语言)或中间代码(四元式)。
三、上机实习步骤
1.阅读《上机实习指导书》。
2.根据设计要求写算法,画程序框图
3.根据框图编写编译程序
4.输入编译程序并上机调试
5.撰写上机实习报告
四、上机实习内容
1、题目:C语言小子集编译程序的实现
2、C语言小子集的文法规则:
程序::=main(){分程序}
分程序::=变量说明部分;语句部分
变量说明部分::=变量说明标识符表
变量说明::=int
标识符表::=标识符表,标识符
标识符表::=标识符
标识符::=字母
标识符::=标识符字母
标识符::=标识符数字
语句部分::=语句部分;语句|语句
语句::=赋值语句|条件语句|循环语句|
赋值语句::=标识符=表达式
条件::=表达式关系运算符表达式
表达式::=项|表达式加法运算符项
项::=因子|项乘法运算符因子
因子::=标识符|常量|(表达式)
常量::=无符号整数
无符号整数::=数字序列
数字序列::=数字序列数字
数字序列::=数字
加法运算符::=+|-
乘法运算符::=*|/
关系运算符::=||!=|=|=|==
复合语句::={语句部分}
语句1::=语句|复合语句
条件语句::=if(条件)语句1else语句1
循环语句::=while(条件)do语句1
字母::=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|9
3、实现功能:
(1)词法分析
扫描源程序,根据词法规则,识别单词,填写相应的表。
(2)语法分析
对源程序作语法分析,确定是否属于C语言小子集,同时揭示出程序的内在结构。
(3)语法错误检查
根据C语言小子集的文法规则设置检测手段,通过查错子程序或一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。
(4)语义分析与目标代码生成
在语法分析的基础上,进行语义分析,生成输入源程序的目标代码。输入源程序的目标代码可以建立在一个假想的处理机(虚拟机)上,或者以所学的汇编语言为基础,也可以生成四元式序列。
输入源程序样本:
main ()
{ int a,b,y,max;
a=10; b= ;
while (a0)
{ b=a+b*a;
a=a-1
};
x=a+b; y=b+b;
if (xy) max=x
else max=y
}
五、附录:PL0编译程序的实现
PL0概述
PL0语言是一种类PASCAL语言,是教学用程序设计语言,它比PASCAL语言简单,作了一些限制。PL0的程序结构比较完全,赋值语句作为基本结构,构造概念有顺序执行、条件执行和重复执行,分别由BEGIN/END、IF和WHILE语句表示。此外,PL0还具有子程序概念,包括过程说明和过程调用语句。在数据类型方面,PL0只包含唯一的整型,可以说明这种类型的常量和变量。运算符有+,-,*,/,=,,,,=,=,(,)。说明部分包括常量说明、变量说明和过程说明。
PL0语言的文法规则
程序::=分程序.
分程序::=[常量说明部分);][变量说明部分;]{过程说明部分;}语句部分
常量说明部分::=const常量定义{,常量定义}
常量定义::=标识符=无符号整数
无符号整数::=数字{数字}
变量说明部分::=var标识符{标识符}
标识符::=字母{字母|数字}
过程说明部分::=过程首部分程序
过程首部::=procedure标识符
语句部分::=语句|复合语句
复合语句::=begin语句{;语句}end
语句::=赋值语句|条件
文档评论(0)