一、学习内容

    一、移进归约

        1.基本思想
用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一    部分替换成(归约为)该产生式的左部符号。
2.归约

是指根据文法的产生式规则,把产生式的右部替换成左部符号。

   二、规范归约


   三、用符号栈进行自下而上的语法分析

     算符优先分析法

    思路:

定义算符之间优先关系,借助这种关系来寻找“可归约串”和进行归约

        .算符优先文法
(1)算符文法
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
…QR…
    则我们称该文法为算符文法,也称OG文法 (Operater Grammar) 。
约定:
a、b代表任意终结符;
P、Q、R代表任意非终结符;

‘…’代表由终结符和非终结符组成的任意序列,包括空字

(2)定义终结符之间的优先关系

假定G是一个不含产生式的算符文法。对于任何一对终结符a、b,我们说:

1. a =. b 当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式;

2. a <. b 当且仅当G中含有形如P→…aR…的产生式, 而R     b…或R     Qb…;

3. a>.b 当且仅当G中含有形如P→…Rb…的产生式,而 R     …a或R    …aQ。

(3)如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一:
a=.b
a>.b
a<.b


    则称G是一个算符优先文法(OPG文法)。

2.构造算符优先关系表
(1)通过检查产生式的每一个候选式可以找出满足a=.b
  (即P→…ab…或P→…aQb…的产生式)

(2)为了满足<.和>.,需对G中每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):

(3)构造集合FIRSTVT(P)的算法

① 若有产生式P→a…或P→Qa…,
则a∈FIRSTVT(P);


② 若aFIRSTVT(Q),且有产生式P→Q…,
则aFIRSTVT(P)。

(4)构造构造集合LASTVT(P)的算法

① 若有产生式P→… a或P→… aQ ,
则a LASTVT(P);


② 若aLASTVT(Q),且有产生式P→… Q ,
则a LASTVT(P)

(5)有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系<.和>.的所有终结符对。


LR(1)的工作过程:

第一步  分析开始时,首先将初始状态SO及句子左界符#推入分析栈中。

第二步  设在分析的某一步,分析栈及余留的输入符号串处于如下的格局。 

第三步  重复上述第二步的工作,直到在分析的某一步,栈顶出现“接受状态”或“出错状态”为止。


 LR(0)项目集族和分析表的构造:

活前缀特点:
该前缀加上被分析串中未被分析的终结符,就可以构成一个规范句型

只要输入串的已扫描部分可归约成一个活前缀,意味着扫描过的部分没有错误

活前缀与句柄间的关系

(1)活前缀中已含有句柄的全部符号(句柄的符号即为其最右符号)。
(2)活前缀中含句柄的一部分符号(句柄开头的 若干符号与活前缀最右的若干个符号一致)。

(3)活前缀中全然不包含句柄的任何符号 。

活前缀的识别与LR分析表构造:

LR分析表的构造需要构造识别活前缀的有限自动机,
用有限自动机中的状态表示分析表中的状态,

用状态图中的状态之间的转换关系对分析表中的action goto函数等进行定义。 



二、习题;

编译原理第五章编译原理第五章


编译原理第五章




相关文章:

  • 2021-03-31
  • 2021-11-23
  • 2021-05-15
  • 2021-06-24
  • 2021-09-14
猜你喜欢
  • 2021-04-12
  • 2021-05-12
  • 2021-07-09
  • 2021-09-17
  • 2021-05-04
  • 2021-10-24
相关资源
相似解决方案