文法与语言(笔记版)
作者:互联网
一、前言
编译过程的核心就是翻译,这是一个十分复杂的信息加工过程,其加工对象是用某种高级语言编写的程序。把用一种数学符号和规则来描述的语言的方式叫做形式描述,而把用一种数学符号和规则来描述的语言叫做形式语言。以下是学习形式语言必备的一些密切相关的术语和概念。
二、文法与语言
字母表:
元素的非空有穷集合,每个元素称为符号,字母表也可叫符号集。典型的符号有:字母、数字、标点符号和各种运算符。
符号串:
由字母表上0个或多个符号所组成的任何有穷序列。注意:ɛ也是字母表上的符号串,由0个符号组成。
符号串的运算:
-
符号串的长度:若x是字母表∑上的符号串,那么其长度指的是x钟所含符号的个数,记为:|x|;
-
符号串相等:若x、y是字母表∑上的两个符号串,当且仅当组成x的各符号与组成y的各符号依次相等时,则x=y;
-
符号串的前缀:指从符号串x的末尾删除0个或多个符号后得到的符号串,称其为x符号串的前缀;
-
符号串的后缀:指从符号串x的开头删除0个或多个符号后得到的符号串,称其为x符号串的后缀;
-
符号串的子串:指从符号串x的开头和末尾删除0个或多个符号后得到的符号串,称其为x的子串。
-
符号串的幂运算:假设x是符号串,则x的幂运算定义为:x0 = ɛ,x1 = x,x2 = xx,… ,xn = xxx…xxx
-
符号串的连接:若x、y是两个符号串,那么xy则表示连接,即将y连接到x的后面。如果x、y属于同一个字母表上的符号串,那么xy也属于该字母表上的符号串;
注意:连接没有交换率,即xy≠yx;而对于空串ɛ有ɛx=xɛ=x
符号串集合的运算:
-
符号串集合的乘积运算:假设A、B分别是两个符号串集合,那么AB定义为:AB={xy|属于A,y属于B},任何符号串集合与{ɛ}的乘积等于其本身,即符号串集Z与ɛ的乘积表示为:Z{ɛ}=Z;
-
符号串集合的幂运算:假设A为符号串集合,则A的幂运算定义为:A0 = {ɛ}, A1 = A,A2 = AA,… ,An = AAA…AAA
-
集合的正闭包与闭包
设A为一个集合,则集合A的正闭包用A+表示,定义为:A+ = A1∪A2∪A3∪···∪An···∪;
该集合的闭包为:A* = A+∪A0
文法:
概念:描述语言语法结构的一系列形式规则。
文法表示为一个四元式G(Vn, Vt, P, Z)
- Vn 是一个非空有穷集合,该集合的每个元素称为非终结符,至少在规则的左部出现一次。
- Vt是一个非空有穷集合,该集合的每个元素称为终结符,只在规则的右部出现。
- P是一个非空有穷集合,该集合的每个元素称为产生式或规则。表示形式有两种:ɑ→β 或 α::=β。
- Z是Vn 的一个特殊非终结符,称为文法的识别符号或开始符号,它至少必须在某个规则的左部出现一次。
直接推导:
概念:xαy→xβy的过程,称为直接推导,反方向称为直接规约。
规范推导:
也叫最右推导。即每步推导只变换符号串中最右边的非终结符;
相反,每步推导只变换符号串中最左边的非终结符,最左推导。
句型:
包含非终结符和终结符的符号串。
句子:
只包含终结符的符号串,是特殊的句型。
语言:
一个文法G[Z]所产生的所有句子的集合,即L(G[Z]) = {x | x ∈ V*T, 且Z =+> x}。
文法与语言的关系:
- 给定一个文法,就能从结构上唯一地确定其语言,即G→L(G);
- 给定一种语言,能确定其文法,但不唯一,即L→G1或G2或G3…;
- 两种不同的文法可描述相同的语言,则称这两个文法为等价文法。
递归规则:
在规则的右部含有与规则左部相同符号的规则。
递归文法:
在文法中至少包含一条递归规则,则称文法为直接递归的;有些文法属于间接递归的。由递归文法描述的语言是无穷的。
短语:
在句型的推导过程中能由某个非终结符推导出的子串。
简单短语:
能由非终结符直接推导出的子串。
句柄:
任意句型的最左简单短语。是唯一的
规范规约:
每步都对规约句型的句柄规约,也叫最左归约。规范推导与规范规约互为逆过程。
文法的二义性:
如果一个文法所定义的句子中有某个句子或句型,它存在两棵不同的语法树,那么这个句子或句型是二义性的,该文法也是二义性文法
有关文法的实用性限制:
- 不能有U::=U这样的有害规则;
- 不能有多余的规则:一是推导始终用不到的规则;二是一旦使用某规则后无法推出终结符号串的规则。
文法与语言的分类:
- 0型文法:α→β,其中α∈V+ ,β∈V*,V = Vn∪Vt 即规则左部可以是符号串但不能为空,规则右部可以是符号串也能为空。由0型文法描述的语言称为0型语言。
- 1型文法:α∪β→αuβ,其中U属于Vn,α、β∈V*,u∈V+,V = Vn∪Vt 即规则左部可为符号串,其中U是非终结符且左右为α和β的情况下U可变为u。因为规则中的α和β不发生改变,所以这种文法也称为上下文有关文法。
- 2型文法:U→u,其中U∈Vn ,u∈V*,V = Vn∪Vt 即规则的左部必须是一个非终结符,规则右部u是V上的符号串,是对1型文法作出了限制,要求α和β必须为空。由2型文法描述的语言称为上下文无关文法。是描述程序设计语言语法部分的主要文法。
- 3型文法:也叫正则文法。规则的表现形式有3种。例如:U→α或U→Wα(左线性)或U→αW(右线性)其中U、W∈Vn,α∈Vt 由3型文法描述的语言称为3行文法。高级程序设计语言的单词符号,如标识符、无符号整数等都是采用3型文法来描述的。
标签:文法,终结符,语言,笔记,规则,集合,型文法,符号串 来源: https://blog.csdn.net/weixin_48627356/article/details/121885209