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

一、知识点

1.程序语言主要由语法和语义两方面定义。
2.语法:一组规则,用这组规则可以产生形式上正确的程序。
(1)字母表是一个有限的字符集,包括大小写英文字母、数字、特殊字符。
(2)单词符号是语言中具有独立意义的最基本结构,一般包括常数、标识符、基本字、算符和界符。
(3)语法单位是由单词符号构成的更大的结构,一般包括表达式、语句、分程序、函数、程序。
3.语义:一组规则,使用它可以定义一个程序的意义。
4.程序设计语言是建立在有限字母集之上的一个符号系统有一定的语法和语义规则
5.高级语言的分类
(1)根据程序设计范式分类:强制式语言,应用式语言,基于规则的语言,面向对象的语言。
(2)编译时是否需要类型检查分类:静态类型语言和动态类型语言。

(3)根据类型检查强弱分类:弱类型语言和强类型语言。

6.一个数据类型通常包括以下三种要素:

(1)用于区别这种类型的数据对象的属性

(2)这种类型的数据对象可以具有的值

(3)可以作用于这种类型数据对象的操作

7.与文法定义相关的几个概念和术语:

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

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

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

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

8.上下文无关文法

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

上下文无关文法的特点

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

特点:独立性

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

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

形式上定义一个上下文无关文法G是一个四元式

(VT,VN,S,P)

10. 产生式(也称为产生规则或简称规则)是定义语法范畴的一种书写规则。

一个产生式的形式是  A→ α

其中箭头左边的A是一个非终结符,称为产生式的左部符号;

箭头右边的α是终结符号或与非终结符号组成的一符号串,称为产生式的右部,或称候选式。

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

(1)语法树的根结由开始符号所标记。

(2)随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。

(3)在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型

12.文法的二义性

如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。

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

13.文法二义性的几个问题

(1)文法二义不等于语言二义

(2)文法的二义性是不可判定的

(3)文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导

(4)文法二义性的消除:给每个产生式定义优先级

14.四种文法的比较

 

 

二、课后作业

6.(1)L(G6)是0,1,2,3,4,5,6,7,8,9

(2)最左推导:

N>>ND>>NDD>>NDDD>>0DDD>>01DD>>012D>>0127

N>>ND>>3D>>34

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

最右推导:

N>>ND>>N7>>N27>>ND27>>N127>>D127>>0127

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

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

7. N->AB|B
A->AC|D
B->1|3|5|7|9
D->B|2|4|6|8
C->0|D

8.文法:

E->T|E+T|E-T

T->F|T*F|T/F

F->(E)|i

最左推导:

E->E+T->T+T->F+T->i+T->i+T*F->i+F*F->i+i*F->i+i*i

E->T->T*F->F*F->F*(E)->i*(E+T)->i*(T+T)->i*(F+T)->i*(i+T)->i*(i+F)->i*(i+i)

最右推导:

E->E+T->E+T*F->E+T*i->E+F*i->E+i*i->T+i*i->F+i*i->i+i*i

E->T->F*T->F*F->F*(E)->F*(E+T)->F*(E+i)->F*(T+i)->F*(F+i)->F*(i+i)->i*(i+i)

语法树:

     i+i+i                  i+i*i                i-i-i          

9.

S->iSeS->iSei->iiSei->iiiei

S->iS->iiSeS->iiSei->iiiei    

10.

S->TS|T

T->(S)|()

11.

L1:

S->AC

A->aAb|ab

C->cC|ε

L2:

S->AB

A->aA|ε

B->bBc|bc

L3:

S->AB

A->aAb|ε

B->aBb|ε

L4:

S->A|B

A->0A1|ε

B->1B0->A

    

 

三、感悟

   这周学习了编译原理第二章高级语言及其语法描述,知道了程序语言的定义、高级语言的一般特性以及程序语言的语法描述,并且着重学习了上下文无关文法及语法树。感觉编译语言是一门挺难理解的课,就像是以前学习的编程语言的解释,不仔细理解就想不明白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值