句法分析

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

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 à L b 这样的规则,在 active arc 集合中增加一条起止位置为 P1, P2 ,弧上为 A à L · b 这样的点规则;
d) 把从 agenda 中弹出的标记为 L 的边,加入到 chart 中的 P1, P2 之间;
e) 检查所有 active arc ,如果存在起止位置为 P0, P1 ,且弧上点规则为 A-> a · L b active arc ,就增加一条新的 active arc ,起止位置为 P0, P2 ,弧上点规则为
A-〉 a L · b
f)如果一条 active arc (起止位置为 P0, P2 )上点规则形如 A-> a L ·  (点号在规则最右端),就将起止位置为 P0, P2 ,边上标记为 A 的边压入 agenda
 

 

你可能感兴趣的:(句法分析)