编译原理笔记10  自上而下分析-预…

来源:互联网 发布:全国网络电视台直播 编辑:程序博客网 时间:2024/05/17 04:36

预测分析程序与LL(1)文法

一、预测分析程序

1.带预测分析的PDA

1)在PDA中加入预测分析之后,可以消除自上而下分析中出现回溯的现象,此时PDA可以改造为:

  编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

2)注:a、改造后,整个分析过程都在预测分析程序控制下工作。B、预测分析程序用了一个预测分析表,它是预测分析程序分析时的主要依据。

3)预测分析表:预测分析表是一矩阵M[A,a],其中行标A是非终结符,列标a是终结符或串结束符;矩阵元素M[A,a]是存放A的一个候选式,指出当前栈顶符号为A且面临读入符号为a时应选的候选式;或者存放“出错标志”,指出A不该面临读入符号a

2.预测分析程序算法描述

设栈顶符号为X,读入符号为a,则

1)X=a=#’,则表示识别成功,退出分析程序;

2)X=a=#’,则表示匹配,弹出栈顶符号X,读头前进一格,让读头指向下一个符号,以读入下一个符号;若X是终结符,但X<>a,则调用error处理;

3)X属于非终结符,则查预测分析表M。若M[X,a]中存放着关于X的产生式,则弹出X,且将相应产生式右部以自右向左的顺序压入栈,在输出带上记下产生式编号;若M[X,a]中存放着出错标记,则调用相应Error处理。

二、求串α的终结首符集和非终结符A的随符集

a) 求串α的终结首符集First(α)

i. 定义:假定α是文法G的一个符号串,α属于星闭包,则First(α)={a   α广义推导出a......a,a属于终结符}

注:1)若α推导出空串,那么空串就属于First(α)

2)First(α)集合是α的所有可能推导出的开头终结符或空串所组成的集合。

ii. 算法

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

具体步骤:

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

b) 求非终结符A的随符集Follow(A)

i. 定义:假定S是文法G的开始符号,对于G的任何非终结符A,定义:

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

ii. 算法

1. 对文法开始符号S,将‘#’加入到Follow(S)中;

2. B->αAβ是文法G的一个产生式,则将First(β)-空串加入到Folow(A)中;

3. B->αA是文法G的一个产生式,或B->αAβ是文法G的一个产生式,且β推导出空串,则将Follow(B)加入到Follow(A)中;

注:这里的文法必须消除左递归且提取了左因子后的文法。

三、构造预测分析表

a) 基本思想

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

b) 构造算法

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

预测分析表的形式化:

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

四、LL(1)文法、

a) 定义:若文法G的预测分析表M中不含有多重定义项,则称GLL(1)文法。

注:1LL(1)文法是无二义的,二义文法一定不是LL(1)文法。

2)LL的含义是从左到右扫描输入串,采用最做推导分析句子。

3)数字1表示分析句子时需向前看一个输入符号。

4)LL(1)就有LL(k)LL(k)向前看k个输入符号,选择候选式更加准确,但M的尺寸会以nk次方增长,其中编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法对程序设计语言去k=1就够了。

b) 证明定理

文法GLL(1)文法当且仅当对于G的每个非终结符A的任何两个不同产生式A->α|β有:

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

五、状态表:

编译原理笔记10 <wbr> <wbr>自上而下分析-预测分析程序与LL(1)文法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


0 0
原创粉丝点击