c语言语法规则上下文无关,编译原理课件 第二章.ppt

《编译原理课件 第二章.ppt》由会员分享,可在线阅读,更多相关《编译原理课件 第二章.ppt(74页珍藏版)》请在人人文库网上搜索。

1、顾斌,2020/7/15,1,编译原理,第2章,高级语言及其语法描述,常用的高级语言FORTRAN数值计算COBOL事务处理PASCAL结构编程ADA大型程序,嵌入式实时系统PROLOG逻辑编程ALGOL算法语言C/C系统编程JavaInternet编程,与机器语言或汇编语言相比,高级语言的优点是更接近数学语言和工程语言,更直观、自然和容易验证其正确性和纠正错误;写作效率高;易于移植。2.1程序语言的定义。程序语言由两个方面定义:语法、语义和语用。首先,语法,程序本质上是某个字符集的字符串。语法:一组规则,通过这些规则可以形成一个好的程序。语法和词汇规则:单词符号的构成规则。词语符号是语言中最。

2、基本的具有独立意义的结构。通常,它包括常量、标识符、基本单词、运算符、分隔符等。描述工具:有限自动机的语法规则:形成语法单位的规则。语法单位通常包括:表达式、语句、子程序、过程、函数、程序等。描述工具:上下文无关的语法、语法规则和词汇规则定义了程序的形式结构。定义语法单位的意义是一个语义问题。语义:一组可以用来定义程序含义的规则。描述方法:自然语言描述:错误隐藏、歧义和不完整。形式描述:操作语义(PL/1)、引用语义(ADA)、代数语义(PASCAL)、三种编程语言的基本功能和层次结构、编程语言的基本功能:数据描述和数据操作。所谓的程序本质上描述了某些数据的处理。程序层次结构,程序|子程序或子。

3、程序,过程,函数|语句|表达式|数据引用运算符函数调用,程序语言各组成部分的逻辑和实现意义,抽象逻辑意义,数学意义和计算机实现的具体实现,2.2高级语言的一般特性,高级语言的命令语言也称程序语言:命令驱动,面向语句的FORTRAN,c,Pascal,Ada应用语言:注重程序所表达的功能,而不是执行LISP,ML,2.2高级语言的一般特性。2.2.1高级语言的分类基于规则的语言:检查某些条件,当它满足值时,执行适当的动作。Prolog面向对象语言:封装,继承和多态。Smalltalk,c,Java。2.2高级语言的一般特征。2 . 2 . 2 FORTRAN程序结构一个程序由一个主程序段组成。辅。

4、助程序段可以是子程序,函数段或数据块。每个程序段由一系列解释语句和执行语句组成。段可以独立编译。模块结构,没有嵌套和递归,每个程序段中的名称相互独立,同一标识符代表不同程序段中的不同名称。主程序PROGRAMME结束辅助程序1子程序结束辅助程序2函数结束,PASCAL本身可以看作是一个被操作系统调用的进程,并且这个进程可以是嵌套的和递归的。PASCAL进程:进程头;描述部分(由一系列描述语句组成);开始执行器(由一系列执行语句组成);结束,范围:可以使用名称的区域的范围称为名称的范围。允许相同的标识符在不同的进程中代表不同的名称。名称范围规则-最近的嵌套规则-子例程B1中描述的名称x仅在B1中。

5、有效(B1的本地);如果B2是B1的内部子例程,并且在B2没有标识符X的新描述,那么原来的名字X在B2仍然有效。如果B2重新解释了X,那么在B2提到X就是指重新解释的X程序主变量A、B :实;程序P1 var b :布尔;开始结束程序P2变量a :整数;起止、a(实数)、b(实数)、b(布尔)、a(整数)、帕斯卡提供了丰富的数据类型和操作模式,允许用户动态申请和返回存储空间。ADA包:它将数据和操作代码封装在一起,支持数据抽象。包分为两部分:可见规范部分,它定义了包外的可访问对象。包体,它实际上定义了包的实现细节。包斯塔克斯是ELEM式的私人;STACK类型是有限私有的;程序推入(S:进入退出。

6、堆栈;e :(ELEM);程序弹出(S:进入退出堆栈;ELEM外的e :);end STACK包体堆栈是程序推进(S:入栈出;e :(ELEM);开始实施细节的结束推送;程序弹出(S:进入退出堆栈;ELEM外的e :);开始实施细节,结束pop结束;JAVA Java是一个面向对象的高级语言类,继承多态性和动态绑定,类车int color _ number整数门号;内部速度;推_断()加_油()类垃圾车_延伸车双倍量;Fill_trash(),2.2.3数据类型和操作,一个数据类型通常包括以下三个元素:用于区分这种类型的数据对象的属性,这种类型的数据对象可以具有的可以作用于这种类型的数据对象的。

7、操作的值,2.2.3数据类型和操作,一个基本数据类型,数值类型:整数,实数,复数,双精度,操作:-。逻辑类型,如/:布尔运算:字符类型:符号处理指针类型,标识符和名称,标识符:以字母开头并由字母数字字符组成的字符串。标识符和名字有本质的区别:标识符是语法概念,名字有确切的含义和属性。乔丹。标识符!什么?什么?标识符和名称,名称:值:单位中的内容属性:类型性质的描述方式和范围名称:描述语句指定的隐式描述:FORTRAN表示名为I、J、K和N的整数,否则为实类型。动态确定:去哪里,做什么,数什么,两个数据结构,一个数组逻辑上,数组是由相同类型的数据组成的一个N维矩形结构,沿每个维度的距离称为下标。。

8、数组的可变性和不变性:存储空间是否可以在编译时确定。访问:数组名称和下标值的存储方式为:按行和列存储,并计算数组元素地址。阵列A10和20的A1和1是A,每个维度下标是1,按行存储。那么Ai和J地址是:a (i-1)*20 (j-1),数组元素地址计算公式,内部向量,并记录数组的相关信息。从逻辑上讲,记录结构是将已知类型的数据组合在一起的结构。记录字符名称20;整数年龄;bool MAILED;CARD1000访问:复合名称CARDk。名称存储:连续存储域的地址计算:相对于记录结构起始点的相对偏移量。字符串,表格,堆栈,字符串:符号处理,公式处理表:本质上是一个记录结构线性表:一组连续的记录结。

9、构堆栈:一个线性表,后进先出,POP,PUSH,三种抽象数据类型,一种抽象数据类型包括:数据对象的集合;作用于这些数据对象的抽象操作的集合;这种类型的对象的封装,也就是说,用户不能对这些对象进行操作,除非使用类型中定义的操作。编程语言支持抽象数据类型。Ada语言通过包提供数据封装支持。小型语言、C语言和Java语言通过类支持抽象数据类型。2.2.4语句和控制结构,表达式表达式由操作数(也称为操作数,即数据引用或函数调用)和运算符(运算符)组成。形式:中缀、前缀、后缀X*Y -A P表达式形式规则、运算符的优先顺序、一般规则PASCAL:左组合A B C=(A B C)FORTRAN:可以选择任。

10、何满足左组合和右组合的运算符,例如,A B C可以被视为(A B C)或(A B C)。注意两点:代数性质被引用的程度取决于具体的语言;在数学中成立的代数性质在计算机中可能不成立。两个语句,赋值语句:A :=B名称左值:名称所代表的单位(地址)称为名称的左值。右值:一个名称的值称为该名称的右值。(所表示的存储单元的内容),控制语句:无条件转移语句转到L,条件语句如果B然后S如果B然后S1否则S2,循环语句当B做S重复S直到B为i:=E1步骤E2直到E3做S,过程调用语句调用P(X1,X2,Xn)、返回语句返回(E)、描述语句:定义不同数据类型的变量或操作,并定义名称的属性。简单句和复句,简单句。

11、:没有其他句子成分的基本句子复句:有句子的句子,复习:程序设计语言的定义,它是由两个方面来定义的:语法:一套规则,它可以形成和产生一个形成良好的程序性词汇规则:单词符号的形成规则。常量、标识符、基本单词、运算符、界限等。有限自动机的语法规则:语法单位的形成规则。表达式、语句、子程序、过程、函数、程序等。上下文无关语法语义3360是一组规则,可用于定义程序的含义。回顾:编程语言的基本功能和层次结构,编程语言的基本功能:描述数据和对数据进行操作。所谓的程序本质上描述了某些数据的处理。程序|子程序或子程序,过程,函数|语句|表达式|数据引用运算符函数调用,回顾:高级语言的一般特征,高级语言的分类程序。

12、结构,数据类型和操作基本数据类型数据结构抽象数据类型语句和控制结构,2.3程序语言的语法描述,几个概念:考虑一个有限字母表字符集,其中每个元素被称为字符上的一个单词(也称为字符串),这意味着由字符组成的有限序列。没有任何字符的序列称为空字,用*表示世界上所有的字,包括空字。例如,组=a,B,然后*=,A,B,AA,AB,BA等。子集U和V的连接(乘积)被定义为UV | U V Let: U a,aa V b,bb然后:UV UV=ab,abb,aab,AABB *,子集U和V的连接(乘积)被定义为UV | U与VVV*,V是V的正常闭包,假设:U a,aa然后:u *=,a,aa,AAA,AA。

13、AA,u=a,aa,AAA,AAAA,2.3.1上下文无关语法,语法:形式规则他给了我一本书,他给了我,他给了我,他给了我,他给了我一本书,上下文无关文法的定义:上下文无关文法G是一个四进制G=(VT,VN,S,P),其中VT:终止符集(非空)VN:非终止符集(非空),VT VN=S:文法开始符号,SVN P:生产集(有限),每个生产形式是P,PVN,(VT,VN)*起始符S必须至少出现一次例如,语法G=,它定义了一个只包含*的算术表达式,由以下表达式组成:E即E E E E E E E E E * E E E E(E E(E)和一些规则:“”也可以用“:3360=”来表示,这称为Bakos范。

14、式(BNF)。P1P2可以缩写为P1 | 2 | | N | P。表达语法时,通常只给出起始符号和生成公式。例如,它可以表示为:g(e):e I | e | e | e * e |(e);例如,定义一个只包含*的算术表达式的语法G=,是由下列产生式组成的:E即E E E E E E * E E(E E(E ),其定义如下:如果1 2 n,那么我们称这个序列为从1到n的派生如果有一个从1到n的导数,n可以通过说1得到。对于语法g(e):e I | e | e * e |(e)e(e)(I e)(ii),通常,它意味着从1开始,经过一个或几个步骤,可以推导出n。用:从1开始,经过0或几个步骤,可以。

15、推导出n。所以:这就是,或者说,定义:假设g是一个语法,s是它的起始符号。如果,它被称为句型。只包含结尾符号的句型是句子。由语法G产生的整个句子是一种语言,被表示为L(G)。(i*i i)是语法g (e)的一个句子:e I | e | e | e * e |(e)。证据:E (E) (E) (E * E) (I * E) (I * I E) (i*i i) E,(E),(E * E),(i*i i)都是句型。例如:语法G1(a):c | ab G1(a)的语言?L(G1)=c,cb,cbb,以c开头,后面跟几个b,例如:语法G2(s):s ab aa | a bb | b G2(s)的语言?例如,L(G2)=ambn|m,n0,给出一个语法,它的生成语言是anbn | n1。G3 (s): s ASB s ab,例如:给出一个语法,它的生成语言是ambn|1nm2n。G4 (s): s ASB | aasb s ab | aab,从一个句型到另一个句型的派生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值