z第二章 文法和语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例子:考虑一个文法
G=({a, b}, {S}, S,P) 其中 P:SaSb ab。试推导其语言。 SaSb aaSbb a3Sb3 …… an-1Sbn-1 anbn 其语言为:L(G)={anbn |n>=1}
说明:
★ 只用一个产生式并不足以定义一个语法范 畴,在绝大部分情况下都需要用好几个产生式, 特别是需要含有递归的产生式(产生式左部的 符号直接在右部出现). ★ VN∩VT=Φ:即文法中的任意一个符号要么 为非终结符号,要么为终结符号.
A A1 A 2 A 3 ......

定理2.1 若A是符号串集合,则A*=(A*)* 。
证明 显然 A* (A*)* , 现证 (A*)* A* 任给符号串 x∈(A*)*,则存在n,使得 x∈(A*)n, x 必存在n个子串x1 ,…,xn , 使得x= x1…xn ,且 xi∈A* (i=1,…,n)。 由xi∈A* ,必存在整数pi ,使得xi∈Api , 令 n
句型、句子和语言
* ,其中 S 是开始符号, ∈ V* ,则称 若S 为文法G的句型。 * 特别地,若 S ,且 ∈ VT* ,则称 为 G 的 句子。 文法G所定义的语言,记作:
L(G)={|∈VT*,且S}
*
同一句型有不同的推导序列
设有文法G[N1]: N1→N N →ND|D D→0|1|2 则句子12可由三种不同的推导序列推导出来: (1) N1 N ND N2 D2 12 (2) N1 N ND DD 1D 12 可见,同一句型(句子)可以通过不同的推导 序列推导出来。

|x|= 2 |y|= 3 |z|= 5
|xy|=|x|+|y|
子符号串
设有非空符号串

例如 符号串x=a+b-(c+d),则: a, a+b-,(c+d)等都是x 的子符号串,且其长 度分别为:|a|=1,
u=xvy,其中符号串
V≠ε ,则称v为符号串 u的子符号串。
|a+b-|=4, |(c+d)|=5
非终结符号:需要进一步定义的符号,不会
出现在程序中。 用来代表语法范畴。如“算术表达式”、 “布尔表达式”、“过程”等。一个非终结 符代表一个一定的语法概念。因此非终结符 是一个类(或集合)记号,而不是个体记号。 终结符号:不需要再定义,会出现在程序中。 组成语言的基本符号,即在程序语言中以前 屡次提到的单词符号,如某个基本字,标识 符,常数,算符和界符等
少年时代即参加左翼的共产主义运动1960年代越战期间投身校园反战运动从此开始了异见者的一生被公认为美国政策永远的反他永不懈怠地激烈抨击美国主导的全球化运动的阴谋美国式民主的虚伪美国政治宣传的阴险和外交政策的帝国主义野心
第二章 文法和语言
主要内容

本章讨论与编译实现相关的形式语言理论 基本概念,主要内容有: 文法与语言的形式定义 Chomsky文法及其分类 上下文无关文法的主要特性 句型分析的概念 文法的等价变换
符号串的前缀与后缀
定义2.6
符号串的前 缀与后缀:符号串左 部的任意子串称为符 号串的前缀;符号串 右部的任意子串,称 为符号串的后缀。

例如:字母表 A={a,b,c}上的符号串 x=ab, 则x的
前缀有:ε、a、ab; 后缀有:ε、b、ab。
符号串集合

符号串集合:若集合中所有 例:枚举表示法 元素都是某字母表上的符号 A= {1,11,111,1111} 串,则称之为该字母表上的 省略表示法 符号串集合。通常用大写英 A= {1,11,111,…} 文字母A,B,C…表示 空集:φ
字母表的闭包与正闭包
对于字母表A,它的 闭包:
A* A 0 A1 A 2 A 3 ......

正闭包: 显然
A A A A+=AA*=A*A
* 0
对于字母表A={a,b,c} 正闭包如何表示? 闭包? A+={a,b,c,aa,ab,ac,ba ,aa,…} A*={ε,a,b,c,aa,ab,ac ,ba,aa,…}
G

归约是推导的逆过程。
若存在xyxy,则认为xy能够直接归约成 xy。
如果存在一个直接推导序列: 0α1α2 … αn(n>0) + 表示成:α0 αn + α0 αn : α0=αn或者α0 αn
三种推导的比较
直接推导()的长度为1
+ 直接推导序列( )的长度n≥1 广义推导 的长度≥0

若在推导关系中,每次最先替换最右(左)
的非终结符,则称为最右(左)推导; 若在归约过程中,每次最先归约最左(右) 的非终结符,则称为最左(右)归约。
例:文法G[S]:


S→AB
A→A0|1B B→0|S1 请给出句子101001的最左和最右推导。 最左推导: SAB1BB10B10S110AB1 101BB11010B1101001 最右推导: S AB AS1AAB1 AA01 A1B01 A1001 1B1001 101001

基本思想:从识别符号开始,把当前产生的符号 串中的非终结符号替换为相应规则右部的符号串, 直到最终全由终结符号组成。这种替换过程称为 推导或产生句子的过程,每一步成为直接推导或 直接产生。
G[N]: N →D|ND D→0|1|2|...|9
例如:非负整数的文法表示:
设有文法G[S]
S→P|aPPb P→ba|bQa Q→ab 求语言L(G4). 解: L(G)={ba, baba, ababab … }
例2.1
:文法G1 =({N}, {0, 1},
{N→0N, N→1N, N→0, N→1}, N), 其中:VN ={N}, VT ={0, 1}, V={N, 0, 1}, P={N→0N, N→1N, N→0, N→1} , S= N 。
思考:仅仅用产生式,是否可以表示文法?
如何由文法产生语言的句子?
例2.3 写一文法G3,使其描述的语言为正奇数集合。 令G3 ={ VN,VT,P, <正奇数>}, 其中,VT ={0,1,2,3,4,5,6,7,8,9}, VN ={<正奇数>, <一位奇数>, <一位偶数>, <数 字串>, <数字>}, P: <正奇数>→<一位奇数>│<数字串> <一位奇 数> <数字串>→<数字串><数字>│<数字> <数字>→<一位奇数>│<一位偶数> <一位奇数>→ 1│3│5│7│9 <一位偶数>→ 0│2│4│6│8 思考 :如果要求开头元素非零,如何改造?
|x|=n
符号串集合的闭包与正闭包

闭包:Σ*称为Σ的闭包,若Σ*表示Σ上的所有 有穷长的串的集合。 * { } 2 3 ...... 正闭包: Σ+称为Σ的正闭包,若 * { } 2 3 ......


例:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} Σ+={a,b,aa,ab,ba,bb,aaa,aab,…}
★对任何产生式 A→α,都有: A∈VN , α∈(VT ∪VN)*. ★ 开始符号S至少必须在某个产生式的左部 出现一次. ★ 若干个左部相同的产生式如 P→α1 , P→α2 , P→α3 ,...,P→αn 可合并成一个,缩 写为 P→α1|α2|α3|...|αn , 其中,每个αi 称为是P的一个候选式.
2.1 文法和语言的定义
语言是指符合文法规则的全部句子所组成
的集合。 语言是一个符号串集合。 若语句的数量是有限的,则可用枚举方式 描述语言; 若语句的数量是无限的,则可用文法的有 限条规则(产生式)描述语言。
形式语言和编译理论中的 最基本概念 ——符号串和符号串集合
基本定义 基本运算


描述表示法

字母表是一个符号串集合, 每个符号串的长度为1.
{x|x全由1组成,且 |x|≥1}
符号串集合的乘积

符号串集合的乘积定义 为:
AB {xy | x A, y B}

例: 设A={a1,b2}, B={c3,d4,e5},则
x是符号串集合A中的符 号串,y是符号串集合B 中的符号串

设x、y是同一字母表上的两个符号串,则把y的各 个符号写在x的符号之后得到的符号串,称为x与y 的连接,记作xy。

对于任何字母表上的符号串x,有
x x x

注意:不同字母表上的符号串不能进行连接运算。
例如:

字母表{a,b,c}上有符号串x=ab与y=cba,则 z=xy=abcba 考虑:
M pi
i 1
则 x∈AM,因此推得 x∈A*,
所以

(A*)* A*,
A*=(A*)*。
文法和语言的定义
文法的定义 推导的定义 句型、句子、语言的定义
2.1.2 文法和语言的定义(BNF 范式)
文法是一个四元组:G[S]=(VN,VT,P,S),其中: 1. VN为非终极(/结)符集合或称变量集 (有限的); 2. VT为终极(/结)符集合;VN∩VT =Ф。 令文法符号V= VN∪VT . 3. P为产生式集合;其中设 →∈ P ,则 ∈V*VNV*,∈V* 。(或写作 ::= ) 4. S为开始符号(或称根符号,识别符号)。 G[S]可简写为G。
语言(language)是某个字母表Σ上的串的集
合,是Σ*的一个真子集,其中的每个符号串 都是按照一定规则生成的。 分类
有穷语言:可用穷举法来描述 无穷法的语言相等,则两个文法等价.
例2.2 令G2 ={ VN,VT,P,<数>}, 其中,VT ={0,1,2,3,4,5,6,7,8,9} VN ={<数>,<数字串>,<数字>} P:<数>→<数字串> <数字串>→<数字串><数字>│<数字> <数字>→ 0│1│2│3│4│5│6│7│8│9 其中“│”表示“或”,语言L(G2)为非负整 数。
等运算符; X、Y、Z:文法符号,或VN或VT一个符号; u、v、 w…z: VT中串; α、β、γ: 文法符号串∈(VT∪VN)*;
S:开始符号,一般在第一个产生式中出现; ->:定义符号(推出); |:或。
符号串的推导与归约:
已知文法G=(VN,VT,P,S),V=VN∪VT, 令x, y, , ∈V*,且→∈P。 符号串xy能够直接推导出符号串xy, 记作xyxy;或记作xyxy。
xn=xxn-1=xn-1x
|xn|=n|x|

A0={ }
符号串集合的方幂
例如:

A1=A, A2=AA, …
An=An-1A=AAn-1

字母表是一个特殊的符 号串集合。当A为字母 表时,若X属于An,则
字母表A={a,b,c},则 A2=AA={a,b,c}{a,b,c} ={aa,ab,ac,ba,bb,bc, ca,cb,cc}

AB={a1c3, a1d4, a1e5, b2c3, b2d4, b2e5}
对于任何符号串集合A, 有:{ } A A{ } A
A A
对符号串的运算—方幂
设x是符号串,把x自身连 例如: 接n次得到的符号串,即 x1=x, x2=xx, x3=xxx, z=xx…x(n个x),称为x的n 设x=ab,则 次方幂,记作xn。 x 0= 注意:x0= ,|x0|=0 x3=xxx=ababab
★ 为了简化,在写文法时常常只写出产生式 部分并约定第一个产生式的左部符号为初始 符号,或在 产生式前写上"G[A]",其中G为文法 名,A为初始符号. 例如:文法G[N] N→0N, N→1N, N→0, N→1
习惯写法
VN:用大写字母A、B、C、S等; VT: 小写字母,0~9,+、-
符号与字母表

符号:可以相互区别 的记号(元素).

例如:
= {0,1}
V = {a, b}

字母表:有穷非空的 符号集合,常用大写 英文字母A,B…或希腊 字母 表示 .
符号串及其长度
符号串:由字母表中的符号组成的任何有
穷序列称为符号串。常用小写英文字母t, u 等表示符号串。
符号串的长度:符号串中符号的个数,
如:
符号串x的长度用|x|表示。
空串ε:长度为0的符号串,它不同于φ。
例如:
b, c, ab, ac, aaa, abc都是字母表{a, b, c} 上的符号串。(还有哪些字符串?) abc的长度是|abc|=3, 100010的长度 |100010|=6 |ε|= 0
a,
符号串的运算——连接
相关文档
最新文档