第二章 高级语言及其语法描述

一、知识点

1、程序设计语言的语法和语义

语法:一组规则,用这组规则可以产生形式上正确的程序;

词法规则:合法单词的构成规则,也就是如何从字母表中选择字符构成一个合法单词(用有限状态自动机或正规式描述)。

语法规则:合法程序的构成规则,也就是如何把各个单词符号组成更大的语法单位(语句、程序)(用上下文无关文法进行描述)

语义是指这样的一组规则,使用它可以定义一个程序的意义。

语义描述方法:属性文法和基于属性文法的语法制导翻译方法。

2、高级语言的一般特征

程序语言分类:

程序设计范型:强制式语言(过程式语言,c)、应用式语言(函数式语言,lisp)基于规则的语言(prolog,yacc)面向对象的语言(java)。

编译时是否需要类型检查:静态类型语言(c,c++,java)、动态类型语言(Python, Ruby,PHP)。

类型检查强弱:弱类型语言(C,C++,VB)、强类型语言(JAVA, C#)。

程序设计语言的一般特性:程序结构、数据类型与操作、语句、控制结构。

程序结构:支持过程的嵌套定义(Pascal)、不支持过程的嵌套定义(c/c++/java)。

数据类型·;基本数据类型(int,char,float,double)、构造数据类型(指针,静态数组,动态数组)、自定义数据类型(栈,队列,字符串,结构体)。

一个数据类型通常包括以下三种要素:a.用于区别这种类型的数据对象的属性、b.这种类型的数据对象可以具有的值、c.可以作用于这种类型数据对象的操作。

表达式:

表达式的形式(前缀,中缀,后缀)、表达式中的运算符(算数,关系,逻辑;优先级,结合性)、运算符的代数性质(交换律,结合律等等)。

组成:操作数和操作符组成。

常见的算术表示形式:前缀式: +a*bc、中缀式:a+b*c、后缀式:abc*+

语句:说明性语句、执行性语句(赋值语句、控制语句、输入/输出语句)

3、程序语言的语法描述

<1>基本概念

字母表:由若干元素组成的有限非空集合,用S表示,它的每个元素称为一个符号。

符号串: 由S中的符号所构成的有穷序列。

符号串的前缀和后缀及子串:设x是一个符号串,将x的尾(前)部删掉几个字符后形成的符号串,称为x的前(后)缀;从一个符号串中删去他的一个前缀和后缀后所剩下部分称为x的子串。

空字:不包含符号的序列称为空字,记为e。

符号串的连接运算:

  设x和y是两个符号串,如果将y直接拼接在x之后,称这种操作为符号串的连接;

符号串的方幂:

  一个符号串与其自身的n-1的任意连接称为次符号串的n次幂,记作:xn

字符串集合的和(等价于集合的并运算):

  设A、B是两个符号串的集合,则将集合A、B的和记为A+B或A È B,定义为:A ÈB={w|wÎA或wÎB}

符号串集合的连接:

  S*的子集U和V中的(连接)积定义为:

         UV={ab∣aÎU & bÎV }

  即集合UV中的符号串是由U和V的符号串连接而成的。注意,一般UV¹VU,但(UV)W=U(VW).

符号串集合V自身的n次(连接)积记为:

 Vn= V V…V   (n个V)

 规定 V0 = {e}.

V的闭包:

 令:V*  = V0ÈV1ÈV2È…

   称 V*是V的闭包。

V的正则包(正闭包,正则闭包):

  记V+ = VV*, 称 V+是V的正则包,即V+=V1ÈV2ÈV3È…。

<2>文法

文法是描述语言的语法结构的形式规则(即语法规则)。

上下文无关文法的特点:

它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。

特点:独立性

缺点:不能用来描述自然语言

上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。

形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)。

终结符号:组成语言的基本符号,即在程序语言中以前屡次提到的单词符号。
非终结符号:(也称语法变量)用来代表语法范畴。

开始符号:一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴。

产生式:(也称为产生规则或简称规则)是定义语法范畴的一种书写规则。
直接推导:仅当Aàγ是一个产生式,有

αAβ Þ αγ β   该推导称为直接推导(直接导出)

最左(最右)推导:在推导的任何一步αÞβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换。

语法分析树:简称语法树。用来表示推导过程。

<3>文法的二义性

如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。    

<4>四种文法的比较

 

类型

产生式形式

文法名称

定义的语言

描述能力

包含关系

0型文法

a®b

短语文法

递归可枚举语言

最强

1型文法

a®b

|a|<=|b|

上下文有关文法

上下文有关语言

次之

又是0型文法

2型文法

A®b

上下文无关文法

上下文无关语言

次之

0,1文法

3型文法

A®Bb

A®bB

正规文法

正规语言

最弱

0,1,2型文法

二、应用

课后题:

6、(1) L ( G6 ) 是0~9 组成的数字串.

(2)最左推导: N =>ND =>NDD =>NDDD =>DDDD =>0DDD =>01DD=>012D=>0127 

N =>ND =>DD =>3D=>34

 N =>ND =>NDD =>DDD =>5DD =>56D =>568

最右推导: N =>ND =>N7=>ND7=> N27=> ND27=> N127=> D127=>0127

N =>ND =>N4=>D4=> 34

N =>ND =>N8=>ND8=> N68=>D68=>568

7、G( S )

   S->J | AJ

   J->1 |3| 5| 7| 9

   O->2 |4 |6 |8 | J

   T->0 | O

   A->AT | O

8、(2)

                         i + i + i                                          i + i * i    

                            

10、S->TS | T

       T->( S ) | ( )

三、学习感受

经过两周编译原理的学习,感觉编译原理有点难理解,错综复杂的知识点,理解性偏多,课上老师讲的文法,老师讲时自己能跟下来,但一到自己做的时候,无从下手,思路不清,感觉自己想不到。学习编译原理觉得有点困难。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值