在slr分析表中

编译原理-LR分析table的自底向上语法分析LR分析table的结构如上,分为ActionGoto和两个参数状态I两部分,结束符号a(s(i)代表第I个状态,r(i)代表第I个状态 。LR文法(Knuth,1963)是最大的文法类,可以构造相应的约简文法分析,LR(k) 分析,向前看k个输入符号的LR 分析,k0,k1有实际意义,省略(k)时,表示k1,在LR(k)的名称中,k代表分析时所需的lookaheadsymbol的个数 , 即除了当前处理的输入符号外,还要向右引用几个符号;省略(k)时,视为LR(1),而非LR(0) 。

回答:如何正确识别手柄?句柄是逐渐形成的,“状态”表示句柄识别的进度 。比如在自下而上分析 overview中提到了手柄识别错误的例子,可以通过状态和下一个输入符号来判断应该采取哪种动作,状态相当于一个记忆功能来记录当前手柄识别了多少 。与移入分析 decoder不同,LR 分析 decoder有一个与符号栈平行的状态栈 。后续的分析过程和上面类似,直到下面的状态,分析成功 。

1、编译原理——LR 分析表Bottom-up Grammar分析LR分析表格的结构如上 , 分为两部分:ActionGoto和两个参数状态I,终止符a(s(i)代表第I个状态,r(i)代表第I个表达式)Goto的SLR(前面介绍过 。它的优点是状态少,制表算法简单,大部分编程语言基本都可以用SLR(1)文法来描述 。但有这样一个文法,其项集的“移入归约”冲突是SLR(1)规则无法解决的 。试试下面的例子 。例4?8考察文法G[S]({S ,D},{a,b},S ),其中p由以下产生式组成:0?
【在slr分析表中】B→C1?S→CbBA5?B→Db2?A→Aab6?C→a3?A→ab7?图418显示了d→一个DFA,用于识别这个文法的所有活前缀 。其中,项集i10 {s → CBBA,A → A AB}存在“移入归约”的冲突,但由于FOLLOW(S){#},上述冲突可以用SLR(1)规则解决,但是,在项目集i8 {c → a,d → a}中 , 由于遵循(C){a 。

    推荐阅读