句法分析

来源:互联网 发布:redis java 教程 编辑:程序博客网 时间:2024/06/08 10:13

自顶向下的分析是从树根开始推导的;

S->z1->z2->...->zn

所用到的规则放在一个后进先出的堆栈里,开始时堆栈为空,这个堆栈的作用是记录最近所用到的规则;

堆栈的作用是记录最近所用到的规则;

假定左部符号为A的规则的排列顺序是Pa.1,Pa.2,...,算法如下:

 

局部分析表:

序号:标明是整个分析过程中的第几个据不分析;

根 : 标明该局部分析过程的树根;

起点:标明该局部分析是从输入串的第几个词开始;

终点:标明局部分析是到输入串的第几个词结束;

成分表:标明该局部分析是以哪些局部分析为其构成成分的;

概率与法:

句法歧义: 从自动分析的角度看,这些歧义可分为:外显式和内含式两种: 如果一个词串所对应的若干种结构有各不相同的根,叫做外显式歧义;

如果一个词语串所对应的若干种结构有形同的根,叫做内含式歧义;

 

乔姆斯基范式:

A->a;

A->BC

Ai,j(A)=P(A->a)

 

一般化:

规则概率的调整,需要用到外部概率的概念;

先来考虑A是整个语句绑定后的符号(或者从生成的观点看,是由A推出整个语句)

 

乔姆斯基范式:

 

句法分析二:

 

线图分析算法(Chartparsing
标准LR分析算法
GLR分析算法(Tomita/富田胜算法)
 
Chart算法的过程描述:
1)将待分析字符串w置入输入缓冲区,agenda清为空栈;
2)循环,反复执行下面步骤,直至输入缓冲区和agenda均为空
a)agenda为空,则从输入缓冲区取一个字符,并把该字符及其起止位置
(P1, P2)推入agenda栈;
b)agenda中弹出栈顶的边,该边的起止位置为(P1, P2),边上标记为L
c)检查规则集中的规则,对所有形如AàLb这样的规则,在active arc集合中增加一条起止位置为P1, P2,弧上为AàL · b这样的点规则;
d)把从agenda中弹出的标记为L的边,加入到chart中的P1, P2之间;
e)检查所有active arc,如果存在起止位置为P0, P1,且弧上点规则为A->a·Lbactive arc,就增加一条新的active arc,起止位置为P0, P2,弧上点规则为
A-〉aL ·b
f)如果一条active arc(起止位置为P0, P2)上点规则形如A->aL · (点号在规则最右端),就将起止位置为P0, P2,边上标记为A的边压入agenda
 

 

原创粉丝点击