chapter 8-上下文无关语言的性质
形式语言自动机——上下文无关文法与下推自动机(一)
y1 y2
y3 y4 y5
11
归约过程自下而上构造了一棵树 如对于文法Gexp ,关于 v (v+d) 的一个归约过程可以认为是构造了如下一棵树:
E
EO v
E (E )
EO E v+ d
(1) E EOE (2) E (E) (3) E v (4) E d (5) O +
(6) O
(5)
翻译 2型文法对应的识别器——下推自动机
PDA(Push Down Automata)由输入带、有限 控制器和下推栈构成(书P152 图)
2
回顾:在第一讲中介绍过如下内容 设 T= 0, 1 , L = 0n1n n 1,
如 0011, 000111, 01 L, 而10, 1001 , , 010 L .
递归推理出字符串 v (v+d) 的一个归约过程为
(5)
v (v+d) (4)
(1)
vO(EOE)
v (v+E) (6)
(3)
vO(v+E)
vO(E+E)
(2)
(3)
(1)
vO(E)
vOE
EOE
E
5
归约与推导
推导过程举例
对于CFG Gexp = ({E,O}, { (, ),+, , v, d }, P , E ) ,P 为
基础 步数为 1. 一定有产生式 A w . w 可以归约到 A.
归纳 设步数大于 1,第一步使用了产生式A X1X2…Xk . 该推导如 A X1X2…Xk w . 可以将 w 分成 w = w1w2…wk,其中 (a) 若 Xi 为终结符,则 wi = Xi. (b) 若 Xi 为非终结符,则 Xi wi. 由归纳假设, wi 可以归约到 Xi . 这样,wi 或者为Xi,或者可以归约到 Xi ,使用产生 式A X1X2…Xk ,得出w 可以归约到 A.
编译原理-第四章语法分析-4.2上下文无关文法
编译原理 -第四章语法
1.形式语言 2.例
二、推导
1.定义 2.基本概念 3.例
三、语法分析树
1.定义 推导的图形表示形式,过滤掉了推导过程中对非终结符 应用产生式的顺序,描述如何从文法的开始符号推导出其语言中的一个语句 2.性质 3.例
四、二义性
1.定义 2.原因 在产生句子的过程中某些直接推导有多于一种选择 3.注意 4.例
五、验证文法产生的语言
六、上下文无关文法和正则表达式
1.文法 2.正则表达式 3.正则表达式到上下文无关文法转换 例:
参考——慕课-苏州大学
形式语言与编译八上下文无关文法、及其二义性、对二义性文法的正规化
形式语⾔与编译⼋上下⽂⽆关⽂法、及其⼆义性、对⼆义性⽂法的正规化上下⽂⽆关⽂法(context free grammar)语法分析的数学基础。
正则语⾔不能描述所有的语⾔,因此引⼊上下⽂⽆关⽂法(注意它也不能描述所有的语⾔,只是相对正则语⾔,描述范围增⼤)它的功能⽐RE和DFA要强许多,可以描述句⼦的结构对于嵌套结构,⽐如程序中的括号⾮常有⽤,上下⽂⽆关⽂法可以处理⽂法四元组定义:G=<V N,V T,S,P>之前⽤正则语⾔⽐较难以定义下⾯这个语⾔,但是现在⽤上下⽂⽆关语⾔,就很容易定义这个CFG产⽣式如下形式:变量—>(变量 |终结符)* 形式化:A−>α,A⊂V N,α⊂(V T∪V N)∗在使⽤上下⽂⽆关⽂法产⽣式的时候,名字"上下⽂⽆关"由来:S−>0S1,S=>00S11 替换的时候对于S不⽤管S的左边0,右边1;⽽是直接替换(可以说产⽣式头的核⼼,其核⼼左右边有⽆东西,意义不⼤,不影响,因此可以忽略,认为左边产⽣式头只有⼀个)对于0S−>0S11, 我们需要"瞻前顾后",只有字符串是0S的时候,才可以被替换为0S11;(产⽣式头不只⼀个核⼼,核⼼左右也有⾮常重要的字符,需要观察配对){V T={0,1},V N={S},S,{S−>01,S−>0S1}}迭代式推导(间接推导):=>∗上⾯E+E,a+E,a+E∗E,a+1∗E含有⾮终结符的叫做句型;(语法单位与串的混合;全部变量,和全部终结符也是特殊句型)a+1∗0不含有⾮终结符的叫做句⼦。
————————————————————————————w是终结符号串,S是开始符号G=<V N,V T,S,ϵ>L(G)=w|S=>∗w,w∈V∗T正则语⾔⼀定是上下⽂⽆关语⾔(可以由上下⽂⽆关⽂法强于正规⽂法的⾓度看)实际应⽤(编程)中,可以对CFG进⾏扩充,最著名BNF范式:::=,|,…(⼀到多),正规式⽤ +,前⾯Lex还⽤花括号{1,2,3,4},不同规范定义⼀到多标准不⼀样,但是含义都⼀样。
上下文无关文法 例题
上下文无关文法例题【原创实用版2篇】目录(篇1)1.什么是上下文无关文法2.上下文无关文法的特点3.例题解析4.上下文无关文法在自然语言处理中的应用正文(篇1)一、什么是上下文无关文法上下文无关文法(Context-Free Grammar,简称 CFG)是形式语言理论中的一种文法,用于描述由终结符(即单词)和非终结符(即符号)组成的字符串。
它是一种上下文无关的文法,意味着字符串的生成只与当前符号有关,而与前面的符号无关。
二、上下文无关文法的特点上下文无关文法具有以下特点:1.唯一性:每个非终结符对应唯一的产生式规则。
2.线性性:每个产生式规则的右部都是线性的,即由一个或多个非终结符组成。
3.穷尽性:文法能够生成所有可能的字符串。
三、例题解析假设有一个上下文无关文法如下:```S → ABA → aB → bB | ε```其中,S 表示字符串,A 和 B 表示非终结符,a 和 b 表示终结符,ε表示空字符串。
根据这个文法,可以生成如下字符串:```S1: aBbS2: abBS3: aBbBS4: abBb```可以看到,这个文法可以生成所有以"ab"、"bB"开头的字符串。
四、上下文无关文法在自然语言处理中的应用上下文无关文法在自然语言处理(Natural Language Processing,简称 NLP)中有广泛应用,例如:1.词性标注:通过训练上下文无关文法,可以为文本中的每个单词分配正确的词性标签。
2.句法分析:利用上下文无关文法可以对自然语言句子进行句法分析,生成句子的句法结构树。
3.机器翻译:在机器翻译任务中,可以使用上下文无关文法对源语言句子进行分析,然后生成目标语言句子。
目录(篇2)1.概览上下文无关文法2.上下文无关文法的特点3.应用实例:例题解析4.总结正文(篇2)一、概览上下文无关文法上下文无关文法(Context-Free Grammar,简称 CFG)是一种用来描述自然语言或其他形式语言的文法。
上下文无关语言和非上下文无关语言
8 上下文无关语言和非上下文无关语言8.1 上下文无关语言的泵引理从第6章到第7章,我们给出了两种描述CFL的模型,CFG和PDA。
这两种模型都没有提供直接、明确的方法来判断一个形式语言不是CFL。
然而,正如例子6.7对自然语言的一个简单考察,我们发现CFG存在描述能力的局限。
本节中,我们精确定义和讨论CFL的一个性质,它类似于正则语言的泵引理。
利用这个性质能够发现许多不是CFL的语言。
正则语言的泵引理基于这样的事实,如果一个足够长的输入字符串x导致FA在状态转移中,到达某个状态超过一次,即接受路径上存在回路,根据回路容易将x分成三部分,u是回路之前的字符串,v是回路的字符串,w是回路后的字符串,那么在回路上的多次重复,得到的新的字符串也应该被FA接受,即对任意的m>=0,uv m w被FA接受。
如果我们用CFG生成(而不是PDA移动)CFL,容易得到类似的观察。
设CFG G的一个推导出现同一个非终结符的嵌套重复,如下面的形式,S⇒*vAz⇒*vwAyz⇒*vwxyz其中,v, w, x, y, z∈∑*。
推导过程中,出现了A⇒*wAy,我们可以多次重复这个推导过程,如S⇒*vAz⇒*vwAyz⇒*vw2Ay2z⇒*vw3Ay3z⇒*...⇒*vw m Ay m z又由于A⇒*x,因此所有这类字符串vxz, vwxyz, vw2xy2z, ..., vw m xy m z都输入语言L(G)。
为了将上面的观察总结成CFL的泵引理,我们必须说明对于足够长的字符串的推导过程中都会出现非终结符的嵌套重复。
同时我们也尽量发现分解得到的5个子串:v, w, x, y, z,的一些性质。
这类似于我们处理正则语言的泵引理。
在6.6节,我们证明了所有的CFG产生式都可以改写成Chomsky范式,而不会影响CFG 接受语言的能力(唯一的影响是不能接受空字符,由于此处仅仅关心足够长的字符串,因此这个影响可以忽略)。
形式语言与自动机_课件_陈有祺第08章 上下文无关语言的性质
上下文无关语言的泵引理
上下文无关语言的泵引理
在Chomsky范式文法中,对于较长字符串的语法分析树,其中必 然存在较长的路径(树的最大层数 - 1)。为了确切说明着这一事 实,将图8.1所示的语法分析树的所有叶结点,都复制到最底层上, 得出如图8.2所示的一棵树。
在图8.2中,由S推导出的终结符号串中各符号都出现树的最底层 上。根据二元树的性质可知,二元树的第i层上最多有2i-1个结点, 那么,若|z|≥2n ,则z的语法分析树不能少于n+2层,即从根到 叶至少有一条长度超过n的路径。
上下文无关语言的泵引理
仅举一例,说明P的构造。设G的产生式为S→AS|b和A→a。取 z=aaaaaab(G只有2个变元,|z|=7已满足要求),并指定前5 个a的位置为特殊位置。则z的语法分析树(将叶结点都复制到最底 层)和路径P如图8.7所示。
在图8.7中,用圆圈标出的变元为分支点,用双线标出的边为路径。 例如,对于第二层的结点S,它有两个儿子A,S(在第三层), 它们都有后代(叶结点)处于特殊位置,但是A只有一个,而S有 三个后代(叶结点)处于特殊位置,所以在路径中取S而不取A。 又如第五层的结点S,它虽然也有两个儿子A,S(在第六层), 但只有A有一个后代(叶结点)处于特殊位置,而S没有。所以取 A加入路径。另外,第五层的结点S,它虽然在路径中,但它不是 分支结点,所以对它不画圆圈。最后,路径P(从根到叶)包含的 各结点:S,S,S,S,S,A,a 。
|vwx|≤k,将z写成z = uvwxy,可能出现以下几种情况:
① 如果v或x包含两种不同的符号,取i=2,无论v或x在什么位置,则 uv2wx2y都将成为ambnapbrasbt形式,这里不论m,n,p,r,s,t为何 值(都不为0),ambnapbrasbt都不能写成ww形式。因此它不在L2中。 ② 如果v和x都只包含a或都只包含b,则取i=0,uwy中不是少了a就是少 了b,再不能写成ww形式,因此它不在L2中。 ③ 如果v只包含前面的a,x只包含前面的b,则取i=0,uwy中前面的a和 b的个数少于后面的a和b的个数,不能再写成ww形式,因此它不在L2中。 ④ 如果v只包含前面的b,x只包含后面的a,则取i=0,uwy中前面的a, b的个数与后面的a,b的个数将不会对应相等,不能再写成ww形式,因 此它不在L2中。如果v只包含后面的a,x只包含后面的b,理由与③类似, uwy将不在L2中。 根据引理8.1或引理8.2,L2不是CFL。
上下文无关文法
mcy
35
3.2 上下文无关文法的形式定义
1.
2. 3. 4. 5. 6. 7. 8.
上下文无关文法(即2型文法)的形式定义 chomsky文法的分类 推导和规约的定义 句型和句子的定义 最左和最右推导 文法定义的语言 递归产生式和递归文法 文法和语言
mcy
36
5. 最左和最右推导
最左推导 对于文法G[S]: S * 是一个最左推导 是指:在推导过程中的任何一步直接推导α β , 都是对字符串α 中的最左非终结符进行替换,其中 α 、β 是句型。 简单整型算术表达式文法:
mcy
20
3型文法:通常,我们把右线性文法及左线性文法
统称为3型文法或正规文法。 若文法G中任一产生式α→β的形式都为A→aB 或 A→a,其中 A∈VN ,B∈VN ,a∈VT ,则称G 为右线性文法; 类似地,如果G中仅含有形如A→Ba 或 A→a的 产生式,则称G为左线性文法;
mcy
mcy
32
4. 句型和句子的定义
定义4 句型和句子:设G=(VN , VT , P , S)是一文 法,且 V=VN∪VT 若S =>*α,α∈V*,则称α为文法G的句型;
若S=>+α,α∈VT*,则称α为文法G的句子;
mcy
33
简单整型算术表达式文法:
exp → exp op exp|(exp)|number op → +|-|* 给出算术表达式(34-3)*42的一个推导,请 列出推导过程中出现的句型和句子。
28
例:G[S]:S→0S1,S→01 直接推导: S 0S1 0S1 00S11 00S11 000S111 000S111 00001111
上下文无关
上下文无关文法的基本概念
符号的使用约定 :
6.
如果A → α1、A → α2、…、A → αk 是所 有以A为左部的产生式(称为A产生式), 则可以把它们写成A → α1|α2|…|αk,我们 将α1、α2、…、αk称为A的候选式。除非另 有说明,否则第一个产生式左部的符号是开 始符号。
上下文无关文法的基本概念
文法的设计
消除二义性 - “悬挂else”的问题
stmt → if expr then stmt | if expr then stmt else stmt | other
文法的设计
消除二义性 - “悬挂else”的问题
每个else都同其前面最近的未匹配的then相匹配 改写后的文法如下:
stmt → matched_stmt | unmatched_stmt matched_stmt → if expr then matched_stmt else matched_stmt | other unmatched_stmt → if expr then stmt | if expr then matched_stmt else unmatched_stmt
文法的设计
例 考虑下面的算术表达式文法: E→E + T |T T→T * F |F F→( E ) | id 消除E和T的直接左递归,可以得到 E → T Eˊ Eˊ→ + T Eˊ|ε T → F Tˊ Tˊ→ * F Tˊ|ε F→( E )|id
文法的设计
例 考虑下面的文法: A→Ba|Aa|c B→Bb|Ab|d 令A1 = A,且A2 = B,当i = 1时,得到的文法是: A →B a Aˊ | c Aˊ Aˊ → a Aˊ |ε B → B b | A b| d 当i = 2得到了文法: A →B a Aˊ | c Aˊ Aˊ → a Aˊ |ε B → B b | B a Aˊb | c Aˊb | d
上下文无关语言(精)
Xi 子树。 即对于任意的 i,1≤ i ≤m,对应于 Xi*αi,存在以 αi 结果的 Xi 子树。
18
定理6-1
由于 AX1X2…Xm,所以 A→X1X2…Xm∈P 可以得到 A 子树的上半部分。 然后再将所有的 Xi 子树对应地接在 Xi 所标识的顶点上,就可以得到树。 显然该树的结果为 α。所以结论对 n=k+1 成立。 由归纳法原理,结论对任意的 n 成立。
顺序 v1 , v2 是派生树 T 的两个不同顶点,如果存在顶点 v,v 至少有两个儿子, 使得 v1 是 v 的较左儿子的后代,v2 是 v 的较右儿子的后代,则称顶点 v1 在顶点 v2 的左边,顶点 v2 在顶点 v1 的右边。
结果(yield) 派生树 T 的所有叶子顶点从左到右依次标记为 X1 , X2 , …, Xn,则称符号 串 X1X2…Xn 是 T 的结果。
高级程序设计语言的绝大多数语法结构都可以用上下文无关文法 (CFG) 描述。
近年来,上下文无关文法也被用来描述文档格式:XML 中使用的 DTD(文档类型定义)就是用来描述 Web 上的信息交换格式的。
3
主要内容
关于 CFL 的分析 派生和归约、派生树
CFG 的化简 无用符、单一产生式、空产生式
当 Xi≠αi 时,注意到 Xi*αi,所用的步数 ni≤k,由归纳假设,存在与之 对应的 Xi 到αi 的最左派生: Xi*左αi。从而
A左X1X2…Xm *左α1X2…Xm *左α1α2…Xm …
*左α1α2…αm 所以,结论对 n=k+1成立。由归纳法原理,结论对任意的 n 成立。 设α是 CFG G=(V, T, P, S) 的一个句型。由句型的定义, S*α。 由于 S 是 V 中的一个元素,由上述证明, S*左α。 同理可证,句型α有最右派生。
上下文无关语言CFL的判定问题ppt课件
• 设G=(V, T, S, P)是一个CFG,则G产生的语言是所有可由G产生的字 符串组成的集合,即L(G)={x∈T* | Sx}。一个语言L是上下文无关语言 〔Context-Free Language, CFL),当且仅当存在一个CFG G,使得 L=L(G)。 *⇒
• 例如,设文法G:S→AB
算法总流程
从上往做全扫描,最多也只能做26次 第一个规则
数据结构
动态生成一维数组 char *left=new char [n+1]; 存储规则式左边的非终结符号
动态生成二维数组 char** right=new char* [n+1];存储规则式右边的一串字符
设置一个固定一维数组 short int flag[26];标志对应的非终结符是否可化为终结符 如果值为1 表示该非终结符在这些规则下可以转化为终结 符,如果值为0 表示不可以最终转化为终结符
结果输出: 将判定结果输出到文件output.txt中。
算法思想
题目理解: 判断一个非终结符是否能转化为终结符也就是一个大写字母能 否用小写字母来表示。那判断该文法对应的语言是否为空,也 就是判断S是否能用一连串的小写字母来表示。
扫描思想: 从第一个规则式到最后一个规则式进行一次全扫描:如果发现S 还不能转化为小写字符且至少有一个新的其他大写字母能转化 为小写字母,则又开始进行一次全扫描;如果发现S能转化为小 写字母,则跳出程序,输出no;如果发现没有新的大写字母可 以化为小写字母且S目前也没办法化为小写字母,则跳出程序, 输出yes。
一条规则的判断流程
Left
right flag
A B ---------- Z
(1)、数组left取出该规则的左部大写字母,接着到flag数组中查 看该字母是否可以化为非终结符。可以的话,则跳出,对 下一条规则进行判断,如果不可以的则继续往下执行
上下文无关语言和非上下文无关语言
8 上下文无关语言和非上下文无关语言8.1 上下文无关语言的泵引理从第6章到第7章,我们给出了两种描述CFL的模型,CFG和PDA。
这两种模型都没有提供直接、明确的方法来判断一个形式语言不是CFL。
然而,正如例子6.7对自然语言的一个简单考察,我们发现CFG存在描述能力的局限。
本节中,我们精确定义和讨论CFL的一个性质,它类似于正则语言的泵引理。
利用这个性质能够发现许多不是CFL的语言。
正则语言的泵引理基于这样的事实,如果一个足够长的输入字符串x导致FA在状态转移中,到达某个状态超过一次,即接受路径上存在回路,根据回路容易将x分成三部分,u是回路之前的字符串,v是回路的字符串,w是回路后的字符串,那么在回路上的多次重复,得到的新的字符串也应该被FA接受,即对任意的m>=0,uv m w被FA接受。
如果我们用CFG生成(而不是PDA移动)CFL,容易得到类似的观察。
设CFG G的一个推导出现同一个非终结符的嵌套重复,如下面的形式,S⇒*vAz⇒*vwAyz⇒*vwxyz其中,v, w, x, y, z∈∑*。
推导过程中,出现了A⇒*wAy,我们可以多次重复这个推导过程,如S⇒*vAz⇒*vwAyz⇒*vw2Ay2z⇒*vw3Ay3z⇒*...⇒*vw m Ay m z又由于A⇒*x,因此所有这类字符串vxz, vwxyz, vw2xy2z, ..., vw m xy m z都输入语言L(G)。
为了将上面的观察总结成CFL的泵引理,我们必须说明对于足够长的字符串的推导过程中都会出现非终结符的嵌套重复。
同时我们也尽量发现分解得到的5个子串:v, w, x, y, z,的一些性质。
这类似于我们处理正则语言的泵引理。
在6.6节,我们证明了所有的CFG产生式都可以改写成Chomsky范式,而不会影响CFG 接受语言的能力(唯一的影响是不能接受空字符,由于此处仅仅关心足够长的字符串,因此这个影响可以忽略)。
08 上下文无关语言的性质
(3) 图中只有满足条件1和2的顶点和弧。
G 的可派生性图表示中,任意两个顶点之间最多有一条相同方向的弧。 G 的可派生性图表示表达了文法 G 中的语法变量之间的派生关系。
派生A+αAβ存在的充分必要条件是 G 的可派生性图表示中存在一条从 标记为A的顶点到标记为A的顶点的长度非 0 的有向回路。
u v
y
x w
7
上下文无关语言的泵引理
z = uvwxy 注意到 v1-子树的最大路长小于等于 |V|+1, 所以,v1 的结果 vwx 满足:| vwx |≤2 (|V|+1)-1 = 2|V| = N v1 的后代 v2 标记为变量 A,所以,| vx |≥1。 此时有 S * uAy+ uvAxy+ uvwxy 显然,对于 i = 0, 1, 2, 3, … A* viAxi + viwxi 所以 u S * uAy + uviAxiy + uviwxiy。 v
9
例8-1 证明 L={anbncn | n≥1}不是 CFL。
取 z=aNbNcN∈L ,设 z = uvwxy, 主意到 |vwx|≤N,所以 v, w 和 x 并在一起不能同时有 3 种字符。 可能出现以下几种情况: (1) v 和 x 只包含 a,取 i=2,则在 uv2wx2y 中, a 的个数明显大于 b, c 的个数,因此它不在 L 中。 (2) v 和 x 只包含 b 或只包含 c,理由与 (1) 同,uv2wx2y 也不在 L 中。 (3) v 只包含 a, x 只包含 b,取 i=2,则在 uv2wx2y 中, a, b 的个数将超过 c 的个数,它不在 L 中。 (4) v 只包含 b, x 只包含c,理由与 (3) 同,uv2wx2y 也不在 L 中。 (5) v 或 x 包含两种不同的符号,例如,v 包含 a 和 b,则在 uv2wx2y 中 将呈现 a 和 b 交错出现的情况,显然它不在 L 中。 所以,L 不是 CFL。
形式语言自动机——上下文无关文法与下推自动机(五)
§4.6 上下文无关语言的性质1. 2型语言的泵浦引理:设L 是上下文无关语言,存在常数p ,如果ω∈L , 且︱ω︱≥p ,则ω可以写为ω=ω1ω2ω0ω3ω4,使ω2ω3≠ε,∣ω2ω0ω3∣≤p ,对于i ≥0有ω1ωi2ω0ωi3ω4∈L 。
(不含L ={ε}的情况) 物理意义:线性语言的泵浦引理是说,在正规集合中,每个足够长的字符串都包含一个短的字串,随便将这个子串在原处重复插入多少次,所得的新字串还是在原正规集中。
2型语言的泵浦引理是说,有两个靠得很近的子串,它们可以重复任意多次(但二者重复的次数相同),所得的新串依然属于该2型语言。
证明:设G 是Chomsky 文法(形如A →BC,A →a ),产生语言L -{ε} 若ω∈L 且ω有一定的长度,则边缘为ω的推导树有一定长度的路径。
对于Chomsky 范式,设路径长度为n ,则有边缘长度 ︱ω︱≤ 2n -1,如下图所示a 路径 =1︱ω︱=︱a ︱=21- 1=1a a路径 =2︱ω︱=︱aa ︱=22- 1=2设文法G 有n 个非终结符,取p =2n若ω∈L ,且︱ω︱≥p (即︱ω︱≥ 2n)则必有︱ω︱≥ 2n -1,即存在一条长度 > n 的路径,至少为n+1。
这时,该路径上的结点数为n+2(包括最高层顶点及最底层叶子)。
∵G 中只有n 个非终结符∴在这条路径上必然有某两个结点相同设为v 1= v 2=A, v 1靠近树根,v 1到叶子的最长路径为n+1。
路径=4︱ω︱≤24- 1=8 (第i 层最多有2i个非终结符。
第i+1层若全为终结符,则与第i 层非终结符个数相等。
)ω2 ω0 ω3=εv 1靠近根,其子树为T 1,Z 1v 2远离根,其子树为T 2,ω0如图:Z 1=ω2ω0ω3︱Z 1∣≤2 n =p (∵v 1到叶子的路径最多为n+1) 而v 1* =>ω2v 2ω3, v 2* =>ω0∵v 1=v 2=A ∴v 1 *=>ω2v 2ω3 =>ω2ω2v 2ω3ω3=>ωi2ω2v 2ω3ωi3 =>ωi2v 2ωi3 =>ωi2ω0ωi3∴ S =>ω1ω2ω0ω3ω4 *=>ω1ωi 2ω0ωi3ω4 v 1的子树得证#2型文法泵浦引理的用途:判断一给定语言是否是上下文无关文法。
上下文无关文法与语言
上下⽂⽆关⽂法与语⾔第 5 章上下⽂⽆关⽂法及语⾔现在我们把注意⼒从正则语⾔转移到另外⼀⼤类语⾔上来,它们叫做“上下⽂⽆关语⾔”。
这个语⾔类有着⾃然、递归的表⽰⽅法,这种表⽰⽅法叫做“上下⽂⽆关⽂法”。
从1960年以来,上下⽂⽆关⽂法⼀直在编译技术中扮演着重要的⾓⾊。
它们能够把分析器(⼀类⽤来在编译过程中发掘源程序结构的程序)的实现从⼀种费时的、不通⽤⽅式的设计⼯作转变成为⼀种能够很快完成的⼯作。
近年来,上下⽂⽆关⽂法也被⽤来描述⽂档格式:XML(eXtensible Markup Language 可扩展标记语⾔)中使⽤的DTD(Document-Type Definition ⽂档类型定义)就是⽤来描述Web上的信息交换格式的。
在本章中,我们将⾸先介绍上下⽂⽆关⽂法的表⽰⽅法,然后将介绍怎样⽤⽂法来定义语⾔。
我们将会讨论到“语法分析树”──对⼀个⽂法处在它所表⽰的语⾔的字符串中结构的图形描述。
语法分析树是对⼀个编程语⾔的语法分析器的产物,也是通常⽤来获得程序结构的途径。
上下⽂⽆关语⾔还有另外⼀种等价的⾃动机表⽰叫做“下推⾃动机”。
我们将在第6章介绍下推⾃动机。
虽然它不如有穷⾃动机重要,但仍然要介绍它,原因是作为⼀种语⾔的定义机制来说,它跟上下⽂⽆关⽂法具有等价性,后⾯在第7章研究如何判定上下⽂⽆关语⾔以及研究上下⽂⽆关语⾔的封闭性时,这种等价性是⾮常有⽤的。
5.1 上下⽂⽆关⽂法这⼀章的内容将从⾮形式化地介绍上下⽂⽆关⽂法的表⽰法开始。
形式化的定义会在读者了解到这些⽂法的⼀些重要的能⼒之后给出。
届时我们将会说明怎样形式地定义⼀个⽂法,并将介绍⼀种叫作“推导”的过程:它能够决定在⼀个⽂法的语⾔中到底有哪些串。
5.1.1⼀个⾮形式化的例⼦下⾯来考虑⼀个“回⽂(palindrome)”的语⾔。
“回⽂”是指正向和反向读起来都⼀样的串,⽐如otto或者madamimadam(“Madam, I’m Adam,”引⾃Eve在Eden的花园⾥听到的第⼀句话)。
形式语言与自动机第八章 上下文无关语言的性质
试着设计一个 CFG 或者 PDA
S → aBc | e B → ??
read a / push x read b / pop x
???
看一看CFG应该满足的特征:
设某个上下文无关文法CFG如下 :(是CNF
范式)
S BC B CS | b C SB | a
i≥1。假设在i-1步时(*)式成立。 ([p0,q0],xa,Z0)┝(i-1步) ([p´,q´],a,β)┝([p,q],ε,γ), 其中w=xa,a∈∑∪{ε}。对于第i-1步,根据归纳法假设,得到 (q0,x,Z0)┝(i-1步)(q´,ε,β)且δA(p0 ,x)= p´。
上下文无关语言的泵引理
引理8.2 设L是一个字符串的集合,假设L有下述性质: “对一切 正整数k,存在z∈L,|z|≥k,将z划分为5个子串z = uvwxy, 这里|vx|≥1,|vwx|≤k,并有某个i≥0,使得uviwxiy L”,则L 不是CFL。
和正则语言一样,若想证明某个集合不是CFL,可以设想你和对手 “打赌”,你的对手认为L是CFL,你认为不是。双方采取以下步 骤进行争论:
① 你的对手选出一个正整数k。 ② 你选出某个z∈L,且|z|≥k。 ③ 你的对手选出子串u,v,w,x,y,使z = uvwxy,且满足
|vx|≥1,|vwx|≤k。 ④ 你选出某个i≥0。如果uviwxiy L,那么你就赢了,证明了L不是
CFL。
上下文无关语言的泵引理
引理8.3(Ogden引理) 对每个CFL L ,都存在正整 数k,对每个z∈L,并且在z中标出k个或多于k个特殊 位置,将z写成z=uvwxy,且满足: ① v或x中至少有一个符号处于特殊位置; ② vwx中至多有k个符号处于特殊位置。 则对任何i≥0,uviwxiy都属于L。
自己动手开发编译器(六)上下文无关语言和文法
⾃⼰动⼿开发编译器(六)上下⽂⽆关语⾔和⽂法上回我们已经学习了语法分析第⼀阶段——词法分析的原理和⼯具,介绍了正则表达式、正则语⾔和DFA等⼯具。
今次我们要开始涉及编译器前端最重要的阶段——语法分析。
简单⽽⾔,这⼀步就要完整地分析整个编程语⾔的语法结构。
上回说到词法分析的结果是将输⼊的字符串分解成⼀个个的单词流,也就是诸如关键字、标识符这样有特定意义的单词。
⼀种完整的编程语⾔,必须在此基础上定义出各种声明、语句和表达式的语法规则。
观察我们所熟悉的编程语⾔,其语法⼤都有某种递归的性质。
例如四则运算与括号的表达式,其每个运算符的两边,都可以是任意的表达式。
⽐如1+a是表达式,(1+a)*(2 – c)也是表达式,((a+b) + c) * (d – e)也是表达式。
再⽐如if语句,其if的块和else的块中还可以再嵌套if语句。
我们在词法分析中引⼊的正则表达式和正则语⾔⽆法描述这种结构,如果⽤DFA来解释,DFA只有有限个状态,它没有办法追溯这种⽆限递归。
所以,编程语⾔的表达式,并不是正则语⾔。
我们要引⼊⼀种表现能⼒更强的语⾔——上下⽂⽆关语⾔。
要介绍上下⽂⽆关语⾔,我们先来了解⼀下定义上下⽂⽆关⽂法的⼯具——产⽣式的写法。
我们还是使⽤编程语⾔的表达式作为例⼦,但这次我们假设表达式只有三种——单个表⽰变量名标识符、括号括起来的表达式和两个表达式相加。
⽐如a是⼀个变量表达式,a+b是两个变量表达式相加的表达式,(a+b)是⼀个括号表达式。
我们⽤符号E来表⽰⼀个表达式,那么这三种表达式分别可以定义为:E → idE → E + EE →( E )这种形式的定义就叫做产⽣式。
出现在→左侧符号E称作⾮终结符(nonterminal symbol),代表可以继续产⽣新符号的“⽂法变量”。
符号→表⽰⾮终结符可以“产⽣”的东西。
⽽上述产⽣式中的蓝⾊id、+、(等符号,是具有固定意义的单词,它们不再会产⽣新的东西,称作终结符(terminal symbol)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§1、泵引理
定理1、设L为一个上下文无关语言,那么存在常数N,对于 z L,当| z | N 时,都存在u, v, w, x, y, 使得 z uvwxy 且 ( 1) ( 2) ( 3)
| vwx | N
| vx | 1
uv iwx i y L,i 0, 1, 2,
p
p
证:设D为CFL,取p为泵长度,取 s 0 1 0 1 ,显然
p p
s p ,设s=uvxyz,根据泵引理(3),有 vxy p
① 如果vxy不在s的中点,则 uv xy z 中,1移到后一半的第一个 位置; 2 2 uv xy z =00101100011 {ww} ) (ex:s=00110011,则 ② 如果vxy在s的中点,取i=0,则
2 2
uxz 0 p1k 0 j1p {ww}, Q k , j p
综上,可知D不是上下文无关的。
第八章、上下文无关语言的性质
总结: CFL泵引理与RL的泵引理类似,它也不能 用来证明一个语言是CFL,而是采用反证法来 证明一个语言不是CFL。
第八章、上下文无关语言的性质
§2、上下文无关语言的封闭性
c不会都在v中,也不会都在y中,所以 的a,b,c;
uv xy z 不可能含有相同个数 uv xy z a,b,c个数可能
222Fra bibliotek2②设v,y含一种以上符号,则这时在
相同,但次序乱了,矛盾,所以,B不是CFL。
第八章、上下文无关语言的性质
例 2、
D {ww | w {0,1}*} 不是上下文无关的。
证明:略。
第八章、上下文无关语言的性质
例1、B {a
n
b c n | n 0}不是上下文无关的。
p
p
n
p s a b c 证明:设B为CFL,取p为泵长度,取
显然, s p 如果s=uvxyz,则由泵引理(2), v,y中至少有 一非空串,不妨设v 非空,
① 设v,y只含一种符号,则根据泵引理第(3)条,a,b或者b,
定理8-1. CFL在并、乘积、闭包运算下是封闭的。 定理8-2. CFL在交和补运算下是不封闭的。 定理8-3. CFL与RL的交是CFL。
注意以上的结论与平时的很多结论是不一致的。