1、第八章 句法分析(二),詹卫东 2002.6http:/ 线图分析算法(Chart parsing) 2 标准LR分析算法 3 GLR分析算法(Tomita/富田胜算法),3,1 线图分析算法,(1) S NP VP (2) NP N (3) NP CS 的 (4) VP V NP (5) CS NP V (6) V V V,我是县长派来的 苍蝇是瞎子打死的 主意是董永想出来的 N V N V V 的,4,线图结构图示,1,2,3,4,5,6,0,N,N,V,V,V,的,我 是 县长 派 来 的 苍蝇 是 瞎子 打 死 的 主意 是 董永 想 出来 的,V,CS,NP,VP,S,线图 Char
2、t,NP,NP,5,基本概念:线图/chart,线图是一组节点(node)和边(edge)的集合节点:对应着输入字符串中的字符间隔 边:其中标记为非终结符或终结符问题:如何从输入串开始,一步步形成chart,使得存在一条边可以覆盖全部节点,并且边上标记为S?,6,Chart的另一种表示形式,“边”的起始位置,边的终止位置,“边”上的标记,7,Chart算法的基本数据结构,1) chartedgei i=1,2, edge := 2) agenda栈(stack)结构,存放等待加入到chart中的边(edge)3) active arc存放当前分析状态,状态由三部分组成,8,Chart算法的过程
3、描述,将待分析字符串w置入输入缓冲区,agenda清为空栈; 循环,反复执行下面步骤,直至输入缓冲区和agenda均为空 若agenda为空,则从输入缓冲区取一个字符,并把该字符及其起止位置 (P1, P2)推入agenda栈; 从agenda中弹出栈顶的边,该边的起止位置为(P1, P2), 边上标记为L; 检查规则集中的规则,对所有形如AL 这样的规则,在active arc集合中增加一条起止位置为P1, P2,弧上为AL 这样的点规则; 把从agenda中弹出的标记为L的边,加入到chart中的P1, P2之间; 检查所有active arc,如果存在起止位置为P0, P1,且弧上点规则
4、为A L 的active arc,就增加一条新的active arc,起止位置为P0, P2,弧上点规则为 A L 如果一条active arc(起止位置为P0, P2)上点规则形如A L (点号在规则最右端),就将起止位置为P0, P2,边上标记为A的边压入agenda栈。,9,Chart算法分析示例,1,2,3,4,5,6,0,chart active arc,输入缓冲区,agenda,10,Chart算法分析示例(续),agenda,输入缓冲区,chart,active arc,(0,1) NP,11,Chart算法分析示例(续),agenda,输入缓冲区,N,NP N ,CSNP V
5、,S NP VP,NP,12,Chart算法分析示例(续),agenda,输入缓冲区,N,NP N ,S NP VP,NP,V,VP V NP,V V V,CSNP V ,(1,3) VP,13,Chart算法分析示例(续),agenda,输入缓冲区,(0,3) S,N,NP N ,S NP VP,NP,V,VP V NP,V V V,N,NP N ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,CSNP V ,CSNP V ,14,Chart算法分析示例(续),agenda,输入缓冲区,(3,4) V,N,NP N ,S NP VP,NP,V,VP V NP,V V V
6、,N,NP N ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,CSNP V ,CSNP V ,15,Chart算法分析示例(续),agenda,输入缓冲区,(4,5) V,N,NP N ,S NP VP,NP,V,VP V NP,V V V,N,NP N ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,CSNP V ,CSNP V ,16,Chart算法分析示例(续),agenda,输入缓冲区,(3,5) V,N,NP N ,CSNP V
7、,S NP VP,NP,V,VP V NP,V V V,N,NP N ,CSNP V ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,V ,CSNP V ,17,Chart算法分析示例(续),agenda,输入缓冲区,(2,5) CS,N,NP N ,CSNP V ,S NP VP,NP,V,VP V NP,V V V,N,NP N ,CSNP V ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,
8、V ,CSNP V ,CS,NPCS 的,18,Chart算法分析示例(续),agenda,输入缓冲区,(5,6) 的,N,NP N ,CSNP V ,S NP VP,NP,V,VP V NP,V V V,N,NP N ,CSNP V ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,V ,CSNP V ,CS,NPCS 的,的,NPCS 的 ,19,Chart算法分析示例(续),agenda,输入缓冲区,N,NP N ,CSNP V ,S NP VP,NP,V,VP V NP,V V V,N,N
9、P N ,CSNP V ,S NP VP,NP,VP,VP V NP ,S NP VP ,S,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,V ,CSNP V ,CS,NPCS 的,的,NPCS 的 ,NP,VP,S,20,Chart算法分析示例(续),agenda,输入缓冲区,N,NP N ,CSNP V ,S NP VP,NP,V,VP V NP,V V V,N,NP N ,CSNP V ,S NP VP,NP,VP V NP ,S NP VP ,V,VP V NP,V V V,V,VP V NP,V V V,V V V ,V ,CSNP V ,CS,NPC
10、S 的,的,NPCS 的 ,NP,VP,S,21,2 标准LR分析算法(Left-to-right Reduce),22,LR分析算法的基本思想和基本概念,利用预读字符(Lookahead)和当前状态来决定下一步分析动作 状态由二元组(项目)构成: 分析动作: 移进(shift) 归约(reduce) 成功(accept) 报错(error),根据规则集中规则之间的相互制约关系,来判断当前规则的使用是否合理。比如根据示例规则,CS后面一定是个“的”;NP后面要么是V,要么是$,23,First(x)函数 实现Lookahead,First(x) = | x , VT , VN VT 若 x V
11、T ,则 First(x) = x,*,(1) S NP VP (2) NP N (3) NP CS 的 (4) VP V NP (5) CS NP V (6) V V V,X ,XA ,示例:,First(S) =N First(NP) = N First(N) = N First(CS) = N First(VP)=V First(V ) = V,24,LR分析算法 之 状态构造算法 ,首先添加一条新规则S S,并把S定义为新的文法开始符号; 0是一个状态,项目二元组属于状态0, $是输入串结束标志; 如果项目二元组属于状态 i ,y 是规则集中的一条产生式规则,那么项目二元组也属于状态
12、i ,其中 t first()(若不为空), 若为空,则 t= t; 状态 j 是状态 i 遇到字符(终结符或非终结符)y 时的后继状态, 对于所有状态 i 中形如 的项目二元组, 项目二元组都属于状态 j 。,25,状态构造算法示例,(0) S S (1) S NP VP (2) NP N (3) NP CS 的 (4) VP V NP (5) CS NP V (6) V V V,规则集,0:,1 0遇见N : ,2 0遇见NP :,3 0遇见S : ,26,状态构造算法示例(续),4 0遇见CS : ,5 2遇见VP : ,6 2遇见V :,7 2遇见V : ,8 4遇见“的” : ,9
13、6遇见V : ,27,状态构造算法示例(续),10 6遇见N : ,11 6遇见NP :,12 6遇见CS : ,13 11遇见CS : ,14 11遇见V : ,14 12遇见“的” : ,15 13遇见V : ,= 状态7,= 状态9,28,状态构造算法示例(续),0:,1 0遇见N : ,2 0遇见NP :,3 0遇见S : ,4 0遇见CS : ,5 2遇见VP : ,6 2遇见V :,7 2遇见V : ,8 4遇见“的” : ,9 6遇见V : ,10 6遇见N : ,11 6遇见NP :,12 6遇见CS : ,13 11遇见CS : ,14 12遇见“的” : ,29,LR分析算
14、法 之 分析表构造算法,如果状态s遇见符号x转移到状态s,那么在转移表(go to)中s为行,x为列的格子里填入状态s (s, s为整数,x是非终结符或终结符)。 条件同上。如果x是终结符,那么在动作表中的s为行、x为列的格子里填入动作“移进”(shift)。 如果s中包含有项目元组,其中x 是规则集中编号为 i 的产生式规则,那么在动作表中的s为行、t为列的格子里填入“归约i ”(reduce)。 如果s中包含有项目元组,那么在动作表中的s为行、$为列的格子里填入“成功”(accept)。 反复执行()(),直至所有状态均已遍历。最后动作表中所有没有填入内容的格子里的默认填入值为“报错”;转
15、移表中所有没有填入内容的格子里的默认填入值为“不可转移”.,30,LR分析表示例,31,LR分析表示例(续),32,LR分析算法过程描述,分析栈: 分析过程中,不断按“状态”“字符”“状态”“字符” 的顺序向栈中压进当前分析状态及等待规约的字符待分析字符串指针:指向当前待分析字符输入:符号串W= w1w2, 文法规则集G,LR分析表 输出:若W是合法句子,输出“成功”,否则输出“错误”,33,LR分析算法过程描述(续),把状态0压入分析栈,W$放入输入缓冲区中,指针p指向W$的第一个符号; 循环执行下面的语句 设s是分析栈的栈顶状态,并且c是p所指向的当前字符; 若 Actions, c=移进
16、k , 则 把c和 k 先后压入分析栈中, p指向下一个输入符号; 若 Actions, c=归约j, 并且第 j 条产生式为 A (长度为m), 则 (i) 从栈顶弹出2*m个符号; (ii) 设x为当前栈顶,把A和Go tox, A先后推入分析栈中; 若 Actions, c=成功,则宣布分析成功,算法结束; 若 Actions, c=报错,则宣布分析失败,算法结束;,说明:Actionx,y表示分析表中x行,y列的动作值, Go tox,y表示分析表中x行,y列的转移值,34,LR分析算法过程示例,35,分析树形成过程示意图,(1) S NP VP (2) NP N (3) NP CS
17、的 (4) VP V NP (5) CS NP V (6) V V V,2, 2, 6, 5, 3, 4, 1,N V N V V 的,36,LR分析算法的不足,LR分析器又被称为“确定性下推自动机”(push-down automata) (1)不允许回溯 (2)只能分析标准LR文法,不能处理有歧义的文法 描述自然语言的文法不可避免地存在着歧义 因此,难以直接用LR分析算法分析自然语言 Tomita(1985)对标准LR算法提出了改进,37,3 Tomita算法/Generalized LR算法,GLR分析表允许有多重入口(即一个格子里有多个动作)将线性分析栈改进为图分析栈处理分析动作的歧义
18、(分叉)采用共享子树结构来表示局部分析结果,节省空间开销通过节点合并,压缩局部歧义,38,GLR分析示例,I saw a girl with a telescope Pron V Det N Prep Det N,39,两棵句法树,SVPVP PPNP NP NPPron V Det N Prep Det N I saw a girl with a telescope,SVPNPPPNP NP NPPron V Det N Prep Det N I saw a girl with a telescope,40,GLR分析表,s: shift r: reduce,41,GLR分析过程,圆点表示状
19、态,上方数字为状态号,方点表示指针,指向分析树中所对应的节点,上方数字为指针序号,Next Word是指向输入字符串的指针,指向当前待输入符号,正在形成中的树节点, 中是节点内容,左边数字是节点指针序号,分析表中动作,s代表移进,3代表状态号,分析表中动作,r代表归约,7代表规则序号,42,GLR分析过程(续),43,GLR分析过程(续),44,GLR分析过程(续),图分析栈裂变为两个栈顶,45,GLR分析过程(续),46,GLR分析过程(续),47,GLR分析过程(续),48,GLR分析过程(续),49,GLR分析过程(续),50,GLR分析过程(续),51,GLR分析过程(续),52,GL
20、R分析过程(续),满足局部歧义压缩条件,53,GLR分析过程(续),54,GLR分析过程(续),55,GLR分析树(压缩共享森林),56,进一步阅读文献,翁富良、王野翊(1998)计算语言学导论,第5章,中国社会科学出版社 杜淑敏 等(1990)编译程序设计原理,第4章,北京大学出版社 赵铁军 等,2000,机器翻译原理,哈尔滨工业大学出版社,第5.5节 吴立德 等,1997,大规模中文文本处理,复旦大学出版社,第4章 Masaru Tomita, 1987, An efficient augmented context-free parsing algorithm. Computational Linguistics, vol. 13, No. 1, pp31-46.,57,复习思考题,用自底向上线图分析法分析“I saw a girl with a telescope” 用GLR分析法分析“老虎咬死了猎人的狗” 终结符符号串可简化为: N V N 的 N 规则集如下: SNP VP VP V NP NP N NP NP 的 NP NP VP 的 NP,N 老虎 | 猎人 | 狗 V 咬死了,