




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理(第二版),郑洪编著,2,第2章程序语言,3,2.1高级语言,2.1.1高级语言的分类1过程式语言过程式语言以语句为核心,命令驱动。过程式语言设计的程序以语句为最小执行单位,程序由一系列的语句组成。这种语言设计的程序通常具有如下形式:语句1;语句2;语句n;2面向对象语言面向对象语言(Object-OrientedLanguage)是如今使用最广、最为重要的语言。它的主要特征是支持封装性、继承性和多态性;把复杂的特性和用于这些数据的操作装在一起,构成对象;对简单对象进行扩充,继承简单对象的特性,从而设计出复杂的对象。,4,3应用式语言将已知的函数作为新开发函数的参数,利用函数的嵌套与递归使得程序的功能由简单变为复杂,最终满足程序设计的要求。这种语言的结构形式是:函数n(函数2(函数1(数据)4基于规则的语言基于规则的语言以判断选择语句为基本执行单位。其程序的执行过程是:检查一定的条件,当它满足时选择适当的操作。最有代表性的基于规则语言是PROLOG。其程序结构形式为:条件1动作1条件2动作2条件n动作n,5,2.1.2数据类型及其操作(1)数值数据:数值数据包括整数、实数、复数以及这些类型的双长(或多倍长)精度数。对数值类型的数据可描述为算术运算集合。(2)逻辑数据:很多语言有专门用于布尔代数的数据类型,即逻辑型数据类型。有的语言甚至还有位串型数据。对逻辑数据可实施逻辑运算(and、or、not等)。(3)字符数据:有些语言可以处理字符或字符串。字符数据类型用来承载字符或字符串。对字符数据的操作有很多,包括判断、转换以及对字符串的各种加工。(4)指针类型:指针类型的数据不是用来描述客观事物的,它的作用是为运算提供数据的地址。,6,常见的结构型数据类型有以下几种:1数组一个数组是由同一类型数据组成的有序的集合。数组下标与数组元素的存储地址密切相关,二者呈线性关系。因此数组元素也称为下标变量。N维数组的每个元素有N个下标。由N个下标决定数组元素的存储位置。2记录记录是由不同类型数据所组成的集合。记录结构中每个元素所占有的存储空间可能互不相同,记录的元素称为分量。例如,C语言采用下面的形式定义记录:structstudentcharname8;intstudclass;floatmath;,7,结构分量是通过名字而不是像数组元素那样通过下标访问的。结构分量的名字是所谓复合名字,例如“结构名.分量名”。结构分量的使用与基本数据结构定义的变量相同,如下述3个赋值语句:=LIMINGstudent.studclass=3student.math=95.4每个分量的存储地址由记录结构的首地址与相应分量的偏移地址相加而成。记录结构的每个分量(域)所占用的存储字节数称为该域的长度。通过累加分量的长度可计算出各分量的偏移量。占8个字节,student.studclass占2个字节,student.math占4个字节,可计算三者对应的偏移量为0、8、10,若student记录结构在运行时被分配一个基址a,则其各分量的地址为::astudent.studclass:a+8student.math:a+10,8,3字符串、表格和队列不同的语言根据不同的需要会拓展出一些实用数据类型。有越来越多的语言把字符串作为一种基本的数据类型,串的长度不加限制。这种数据类型给各种处理文字语言的程序带来很多便利。2.1.3语句与表达式1语句每当用户创建了一个名称,就要用说明语句来说明这个名称所指对象的意义,是一种变量、一种操作、还是一个子程序。而执行性语句就是描述计算机操作的,其还可分为赋值语句、控制语句、输入/输出语句。(1)说明语句说明语句的作用在于定义名字的属性,即赋予名字意义,如:intx;C语言定义整型变量,9,(2)赋值语句:赋值语句在不同的程序设计语言中可能有不同的语句形式,但实现功能基本相同。例如:X:=YPASCAL赋值语句(3)控制语句:计算机程序之所以能够实现各种强大的功能,原因是有了控制语句。控制语句的核心操作就是:判断选择,这是一切智能行为的基础。条件语句ifEthenSifEthenSelseS1循环语句while(E)BdoSrepeatSuntilBforI:=E1stepE2untilE3doS,过程调用语句callp(x1,x2,xn)返回语句return(E)无条件转移语句gotoL,10,2表达式表达式由运算对象和算符组成,对于多数程序语言来说,表达式的形式规则如下:(1)变量(包括下标变量)是表达式。(2)若E1、E2为表达式,是一个二元算符,则E1E2是表达式。表达式一般采用中缀形式。(3)若E是表达式,为一元算符,则E或E是表达式。(4)若E是表达式,则(E)是表达式。一般程序设计语言中算术算符和逻辑算符的优先顺序:乘幂(*或)一元负(-)乘、除(*,/,)加减(+,-)关系符(,=)非(,not或NOT)与(,intdoor-number;intspeed;push-break()Addoil(),classTrash-CarextendsCardoubleamount;fill-trash(),14,2.2中间语言,2.2.1逆波兰表示法逆波兰表示表达式高级语言表示表达式ab*a*bab*c+a*b+cabcd/+*a*(b+c/d)ab*cd*+a*b+c*d高级语言表达式E的逆波兰表示法可这样定义:(1)若E是高级语言中的一个变量或常数,则E的逆波兰表示式仍是E。(2)若高级语言中的表达式为E1opE2,其中,op是一个二元算符,E1、E2也是表达式,则逆波兰式表示为E1E2op,其中,E1是E1的逆波兰式,E2是E2的逆波兰式。(3)若高级语言中的表达式为(E),则逆波兰表示式为去掉括号的E,E为E的逆波兰表示式。,15,若把逆波兰表达式视为一个字符串,则计算逆波兰式的算法为:(1)读入字串左端的一个字。(2)如果读入空字,计算结束。(3)如果读入一个操作数,将操作数推进栈,转(1)。(4)如果读入一个一元操作符,取栈顶一个操作数与一元操作符进行运算,并将运算结果推进栈,转(1)。(5)如果读入一个二元操作符,取栈顶两个操作数与二元操作符进行运算,并将运算结果推进栈,转(1)。,16,【例2.1】有以下用高级语言所编写的表达式:3+5*4转换为逆波兰表达式为:354*+计算逆波兰表达式354*+的过程,17,2.2.2三地址代码三地址代码是由下面一般形式的语句构成的序列。x:=yopz其中x、y、z是变量名或编译时产生的临时变量名;y、z还可以是常数;op代表某种操作符。这种中间语言的特点有两个。(1)非常接近汇编语言形式,包括汇编语言中最基本的操作。(2)每个语句中赋值号的右边只有一个操作符,使得句子意义最小且不可分。三地址代码的具体实现常以记录的形式表示,通常有3种表示方法:四元式、三元式、间接三元式。四元式的一般形式为:,18,三地址码四元式x:=A(:=,A,x)x:=opA(op,A,x)x:=AopB(op,A,B,x)对于转移类语句,上述四元式记录的内涵要做适当的修改:例如,下面的三地址码转移类语句用四元式表示为:三地址码四元式gotoL(JP,L)ifarelopbgotoL(Jrelop,a,b,L)ifagotoL(J,a,L)callp,n(call,n,p)returny(RET,y,),19,【例2.2】考虑如下语句:whileabdo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生鲜店经营合同范本
- 工勤等级考试题库及答案2025
- 背景墙合同范本
- 劳务合同范本香港签字
- 石材矿山开采合同范本
- 预售房按揭合同范本
- 水站合作合同范本
- 工程施工合同简易版5篇
- 教师教育孩子的心得体会怎么写(范文10篇)
- 知否知否题目及答案高清
- “干股分红协议书”适用于品牌代理商
- 氢能与燃料电池-课件-第五章-制氢技术
- 虫害控制管理程序(修订版)
- 劳动教育-专题一崇尚劳动(劳动的意义)
- 顶管工程施工检查验收表
- 数据安全风险评估报告
- 中级注册安全工程师安全生产专业实务(道路运输安全)真题
- GB/T 33636-2023气动用于塑料管的插入式管接头
- 中国哲学经典著作导读知到章节答案智慧树2023年西安交通大学
- 人类基因组计划
- 【课程思政优秀案例】《创新创业实践》课程
评论
0/150
提交评论