第二章 文法和语言的概念和表示Word格式.docx
- 文档编号:17081988
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:22
- 大小:45.85KB
第二章 文法和语言的概念和表示Word格式.docx
《第二章 文法和语言的概念和表示Word格式.docx》由会员分享,可在线阅读,更多相关《第二章 文法和语言的概念和表示Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
研究语言
每个句子构成的规律
每个句子的含义
每个句子和使用者的关系
研究程序设计语言
每个程序构成的规律
每个程序的含义
每个程序和使用者的关系
语言研究的三个方面
语法Syntax
语义Semantics
语用Pragmatics
语法——表示构成语言句子的各个记号之间的组合规律。
程序语言的语法通常是指这样的一组规则,用它可以形成和产生一系列合式的程序。
这组规则称为语法规则。
语义——表示各个记号的特定含义。
(各个记号和记号所表示的对象之间的关系)。
程序语言的语义通常是指这样的一组规则,用它可以定义一个程序的意义。
这组规则称为语义规则。
语用——表示在各个记号所出现的行为中,它们的来源、使用和影响。
每种语言具有两个可识别的特性,即语言的形式和该形式相关联的意义。
语言的实例若在语法上是正确的,其相关联的意义可以从两个观点来看:
其一是该句子的创立者所想要表示的意义;
另一是接收者所检验到的意义。
这两个意义并非总是一样的,前者称为语言的语义,后者是其语用意义。
幽默、双关语和谜语就是利用这两方面意义间的差异。
如果不考虑语义和语用,即只从语法这一侧面来看语言,这种意义下的语言称作形式语言。
形式语言抽象地定义为一个数学系统。
“形式”是指这样的事实:
语言的所有规则只以什么符号串能出现的方式来陈述。
形式语言理论是对符号串集合的表示法、结构及其特性的研究。
是程序设计语言语法分析研究的基础。
2.2形式语言基础
2.2.1字母表和符号串
(1)字母表:
符号的非空有限集合。
例:
∑={a,b,c}
(2)符号:
字母表中的元素。
a,b,c
(3)符号串:
符号的有穷序列。
a,aa,ac,abc,…
空符号串:
无任何符号的符号串或长度为零的符号串,记为ε。
符号串的形式定义
有字母表∑,定义:
①ε是∑上的符号串;
②若x是∑上的符号串,且a∈∑,则ax或xa是∑上的符号串;
③y是∑上的符号串,iff(当且仅当)y可由
(1)和
(2)产生。
2.2.2符号串和符号串集合的运算
(1)符号串相等:
若x、y是集合上的两个符号串,则x=yiff(当且仅当)组成x的每一个符号和组成y的每一个符号依次相等。
(2)符号串的长度:
x为符号串,其长度|x|等于组成该符号串的符号个数。
x=STV,|x|=3
(3)符号串的联接:
若x、y是定义在Σ是上的符号串,且x=XY,y=YX,则x和y的联接xy=XYYX也是Σ上的符号串。
注意:
一般xy≠yx,而εx=xε
(4)符号串集合的乘积运算:
令A、B为符号串集合,定义
AB={xy|x∈A,y∈B}
(5)符号串集合的幂运算:
有符号串集合A,定义
A0={ε},A1=A,A2=AA,A3=AAA,……An=An-1A=AAn-1,n>
(6)符号串集合的闭包运算:
设A是符号串集合,定义
A+=A1∪A2∪A3∪……∪An∪……称为集合A的正闭包。
A*=A0∪A+称为集合A的闭包。
A={x,y}
A+={x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A1A2A3
A*={ε,x,y,xx,xy,yx,yy,xxx,xxy,xyx,xyy,……}
A0A1A2A3
为什么对符号、符号串、符号串集合以及它们的运算感兴趣?
若A为某语言的基本字符集
A={a,b,……z,0,1,……,9,+,-,×
/,(,),=……}
B为单词集
B={begin,end,if,then,else,for,……,<
标识符>
<
常量>
……}
则B⊂A*。
语言的句子是定义在B上的符号串。
若令C为句子集合,则C⊂B*,程序⊂C
2.3文法的直观理解
(1)什么是文法:
文法是对语言结构的定义与描述。
即从形式上用于描述和规定语言结构的称为“文法”(或称为“语法”)。
例:
有一句子:
“我是大学生”。
这是一个在语法、语义上都正确定句子,该句子的结构(称为语法结构)是由它的语法决定的。
在本例中它为“主谓结构”。
如何定义句子的合法性?
如何定义有穷语言、无穷语言?
(2)语法规则:
我们通过建立一组规则(产生式),来描述句子的语法结构。
规定用“:
:
=”表示“由……组成”或“定义为…”。
如:
<
句子>
=<
主语>
<
谓语>
代词>
|<
名词>
=你|我|他
=王民|大学生|工人|英语
动词>
直接宾语>
=是|学习
(3)由产生式推导句子:
有了一组产生式之后,可以按照一定的方式用它们去推导或产生句子。
推导方法:
从一个要识别的符号开始推导,即用相应产生式的右部来替代产生式的左部,每次仅用一条产生式去进行推导。
⇒<
…………
这种推导一直进行下去,直到所有带<
>
的符号都由终结符号替代为止。
代词>
⇒我<
⇒我是<
⇒我是大学生
有一英语句子:
Thebigelephantatethepeanut.
冠词>
形容词>
=the
=big
=elephant
宾语>
=ate
=peanut
⇒the<
⇒thebig<
⇒thebigelephant<
⇒thebigelephantate<
⇒thebigelephantatethe<
⇒thebigelephantatethepeanut
上述推导可写成
thebigelephantatethepeanut
说明:
(1)有若干语法成分同时存在时,我们总是从最左的语法成分进行推导,这称之为最左推导,类似的有最右推导(一般推导)。
(2)从一组产生式可推出不同的句子,如以上产生式还可推出“大象吃象”、“大花生吃象”、“大花生吃花生”等句子,它们在语法上都正确,但在语义上都不正确。
所谓文法是在形式上对句子结构的定义与描述,而未涉及语义问题。
(4)语法树:
我们用一种树型结构来描述一个句子的语法结构。
称之为语法树。
2.4文法和语言的形式定义
2.4.1文法的定义
文法定义:
文法是产生式的有穷集合,通常定义为四元组:
G=(VN,VT,P,Z)
其中:
VN:
非终结符号集
VT:
终结符号集
P:
产生式或规则的集合
Z:
开始符号(识别符号),Z∈VN
注意:
A.产生式:
产生式是一个有序对(U,x),通常写为:
U:
=x或U→x;
|U|=1|x|≥0
B.非终结符号:
出现在产生式的左部,且能推出符号或符号串的那些符号。
其全体构成非终结符号集,记为VN。
C.终结符号:
不出现在产生式的左部,且不能推出符号或符号串的那些符号。
其全体构成终结符号集,记为VT。
且VN∩VT=Φ,VN∪VT=V(V是文法的字母表)。
无符号整数的文法:
G[<
无符号整数>
]=(VN,VT,P,E)
VN={<
数字串>
<
数字>
}
VT={0,1,2,3,……9}
P={<
→<
;
→0;
→1;
……
→9;
}
Z=<
;
几点说明:
①产生式左边符号构成集合VN,且Z∈VN。
②有些产生式具有相同的左部,可以合在一起。
<
→0|1|2|3|……|9
③给定一个文法,实际只需给出产生式集合,并指定识别符号。
]:
2.4.2推导与归约
直接推导定义:
有文法G且有v=xUy,w=xuy,其中x、y∈V*,U∈VN,u∈V*,
若U:
=u∈P,则说v直接推导出w,记为v⇒w。
若x=y=ε,有U:
=u,则说U直接推导出u,记为U⇒u。
换句话说,设x和y是x和y是符号串,若使用一次产生式可以从x变换出y,则称x直接推导出y(或者说y是x的直接推导),记为x⇒y。
例如:
G[N]:
N→ND|D
D→0|1|2|3|4|5|6|7|8|9
N⇒
(1)ND⇒
(2)NDD⇒(3)ND9⇒(4)N09⇒(5)N09⇒(6)109
当x和y是符号串已没有非终结符号时,推导就必须终止。
因为终结符不可能出现在产生式左部,所以将在产生式左部出现的符号称为非终结符号。
推导定义:
+推导:
x和y是x和y是符号串,若使用若干次产生式可以从x变换出y,则称x推导出y(或者说y是x的推导),记为x
y。
或者说:
若有直接推导序列:
x=U0⇒U1⇒U2⇒……⇒Un=y,则x
例:
N⇒
(1)ND⇒
(2)NDD⇒(3)ND9⇒(4)N09⇒(5)N09⇒(6)109
则有:
N
109。
*推导:
x和y是x和y是符号串,若使用零次或若干次产生式可以从x变换出y,则称x*推导出y(或者说y是x的*推导),记为x
最右推导:
若x和y是符号串α中有两个以上的非终结符号时,对推导的每一步坚持把α中的最右非终结符号进行替换,称为最右推导。
最左推导:
若x和y是符号串α中有两个以上的非终结符号时,对推导的每一步坚持把α中的最左非终结符号进行替换,称为最左推导。
直观意义:
规范推导=最右推导
归约定义:
推导的逆过程称之为归约。
x⇒y,可称为x直接推导出y,也可称为y直接归约出x。
x
y,可称为x推导出y,也可称为y归约出x。
句型定义:
给定文法G[Z],x是句型当且仅当Z
x,且x∈V*;
句子定义:
给定文法G[Z],x是句子当且仅当Z
x,且x∈VT*;
语言定义:
给定文法G[Z],语言L(G[Z])={x|z
x,x∈VT*};
对给定的语言{abna|n≥1},构造其文法为:
G1[Z]:
Z→aBa,
B→b|bB
G2[Z]:
Z→aBa,
B→b|Bb
文法等价定义:
G和G'
是两个不同的文法,若L(G)=L(G'
),则G和G’为等价文法。
编译感兴趣的问题是:
给定x,G,求x∈L(G)?
2.4.3递归文法
1.递归产生式:
产生式右部有与左部相同的符号
对于U:
=xUy,
若x=ε,即U:
=Uy,左递归;
若y=ε,即U:
=xU,右递归;
2.递归文法:
文法G,存在U∈Vn,
ifU
…U…,则G为递归文法;
ifU
U…,则G为左递归文法;
…U,则G为右递归文法;
3.左递归文法的缺点:
不能用自顶向下的方法进行语法分析。
4.递归文法的优点:
可用有穷条产生式,定义无穷语言。
对于前面给出的无符号整数的文法是有递归文法,我们用了13条产生式就可以定义出所有的无符号整数。
若不用递归文法,那将要用多少条产生式呢?
2.5文法分类
形式语言:
用文法和自动机所描述的没有语义的语言。
L(G[Z])={x|Z
x,x∈VT*}
文法定义:
乔姆斯基将所有文法都定义为一个四元组:
G=(VN,VT,P,Z)
VN:
VT:
开始符号(识别符号),Z∈VN
文法和语言分类:
0型、1型、2型、3型
这几类文法的差别在于对产生式施加不同的限制。
定义:
0型文法:
u:
=v,其中u∈V+,v∈V*
0型文法称为短语结构文法。
产生式的左部和右部都可以是符号串,一个短语可以产生另一个短语。
0型语言:
L0。
这种语言可以用图灵机(Turing)接受。
1型文法:
xUy:
=xuy,其中U∈VN,x、y、u∈V*
1型文法也称为上下文敏感或上下文有关。
也即只有在x、y这样的上下文中才能把U改写为u。
1型语言:
L1。
这种语言可以由一种线性界限自动机接受。
2型文法:
U:
=u,其中U∈VN,u∈V*
2型文法也称为上下文无关文法。
也即把U改写为u时,不必考虑上下文。
2型文法与BNF表示相等价。
2型语言:
L2。
这种语言可以由下推自动机接受。
3型文法:
(左线性)P:
=T或U:
=ωT,其中U、T∈VN,ω∈VT,,,
(右线性)P:
=Tω,其中U、T∈VN,ω∈VT
3型文法也称为正则文法。
它是对2型文法进行进一步限制。
3型语言:
L3。
又称正则语言、正则集合。
这种语言可以由有穷自动机接受。
根据上述讨论,L0⊂L1⊂L2⊂L3。
0型文法可以产生L0、L1、L2、L3,但2型文法只能产生L2,不能产生L1。
2.6语法树与二义性文法
2.6.1推导与语法树
(1)语法树:
句子结构的图示表示法,它是一种有向图,由结点和有向边组成。
如下图:
结点:
符号
根结点:
识别符号
中间结点:
非终结符
叶结点:
终结符或非终结符
有向边:
表示结点间的派生关系。
(2)句型的推导及语法树的生成(自顶向下)
给定G[Z],句型w:
可建立推导序列,Z
w
可建立语法树,以Z为树根结点,每步推导生成语法树的一枝,最终可生成句型的语法树。
注意一个重要事实:
文法所能产生的句子,可以用不同的推导原则(使用产生式顺序不同)将其推导出来。
语法树的生成规律不同,但最终生成的语法树形状完全相同。
某些文法有此性质,而某些文法不具此性质。
句子10的语法树:
(3)子树与简单子树
子树:
语法树中的某个结点(子树的根)连同它向下派生的部分所组成。
简单子树:
只有单层分枝的子树称为简单子树。
(4)树与推导
句型推导过程⇔句型语法树的生长过程
由推导构造语法树
从识别符号开始,自左向右建立推导序列。
由根结点开始,自上而下建立语法树。
有文法G[<
],并给定句型10,其推导过程及语法树的生长过程分别为:
⇒<
⇒1<
⇒10
由语法树构造归约:
自下而上地修剪子树的末端结点,直至把整棵树剪掉(留根),每剪一次对应一次归约。
从句型开始,自右向左地逐步进行归约,可以建立一个归约序列。
规范归约定义:
对句型中最左简单短语(句柄)进行的归约称为规范归约。
规范归约与规范推导互为逆过程。
规范句型
通过规范推导或规范归约所得到的句型称为规范句型。
在上例中,1<
就不是规范句型,因为:
=≯<
=≯<
=≯<
=≯1<
=≯10
注意:
其中符号=≯表示为归约。
2.6.2文法的二义性
二义性文法定义:
若对于一个文法的某一句子存在两棵不同的语法树,则该文法是二义性文法,否则是无二义性文法
或:
若一个文法的某句子存在两个不同的规范推导,则该文法是二义性的,否则是无二义性的。
若一个文法的某规范句型的句柄不唯一,则该文法是二义性的,否则是无二义性的。
换而言之,无二义性文法的句子只有一棵语法树,尽管推导过程可以不同。
下面举一个二义性文法的例子。
给定文法G[E]:
P:
E→E+E|E*E|(E)|i
VN={E}
VT={+,*,(,),i}
对于句子S=i+i*i∈L(G[E]),存在不同的规范推导:
(1)E⇒E+E⇒E+E*E⇒E+E*i⇒E+i*i⇒i+i*i
(2)E⇒E*E⇒E*i⇒E+E*i⇒E+i*i⇒i+i*i
这两种不同的推导对应了两种不同的语法树:
以上是自顶向下来看文法的二义性,我们还可以自底向上来看文法的二义性。
上例中,规范句型E+E*i是由i+i*i通过两步规范规约得到的,但对于同一个句型E+E*i,它有两个不同的句柄(对应上述两棵不同的语法树):
i和E+E。
因此语法的二义性意味着句型的句柄不唯一。
若文法是二义性的,则在编译时就会产生不确定性,遗憾的是在理论上已经证明:
文法的二义性是不可判定的,即不可能构造出一个算法,通过有限步骤来判定任一文法是否有二义性。
现在的解决办法是:
提出一些限制条件,称为无二义性的充分条件,当文法满足这些条件时,就可以判定文法是无二义性的。
由于无二义性文法比较简单,我们也可以采用另一种解决办法:
即不改变二义性文法,而是确定一种编译算法,使该算法满足无二义性充分条件。
算术表达式的文法
E→E+E|E*E|(E)|i
E→E+T|T
T→T*F|F
F→(E)|i
Pascal条件语句的文法
条件语句>
=If<
布尔表达式>
then<
语句>
|If<
then<
else<
:
=<
非条件语句>
|……。
2.7句型的分析
任务:
给定G[Z]:
S∈VT*,判定是否有S∈L(G[E])?
这是词法分析和语法分析所要做的工作,将在第三、四章中详细介绍。
2.7.1句型的短语、简单短语和句柄
短语定义:
设G[Z]是给定文法,w=xuy∈V+,为该文法的句型,如果满足下面两个条件:
①Z
xUy;
②U
u;
则称句型xuy中的子串u是句型xuy的短语。
简单短语定义:
②U⇒u;
则称句型xuy中的子串u是句型xuy的简单短语(或直接短语)。
直观理解:
短语是前面句型中的某个非终结符所能推出的符号串。
句柄定义:
任一句型的最左简单短语称为该句型的句柄。
2.7.2确定句柄的步骤
确定句柄的步骤为:
短语→简单短语→句柄
短语、简单短语是相对于句型而言,一个句型可能有多个短语、简单短语,句柄只能有一个。
给定文法G:
E→T|E+T|E-T
T→F|T*F|T/F
F→i|(E)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 文法和语言的概念和表示 第二 文法 语言 概念 表示