基本概念
- 短语:以非终结符为根的子树中所有从左到右的叶子。
- 直接短语:短语+父子关系的树。
- 句柄:最左直接短语(唯一)
- 句子:只包含终结符。
- 句型:包含非终结符和终结符。
自下而上的语法分析采用移进-归约的方式分析句子,用一个栈记住将要规约句柄的前缀,形成前移进,形成后规约。
需要使用符号栈和输入缓冲区,#标记栈底或者输入串的右端。
使用格局(栈,剩余输入,改变格局的动作)表示一个状态。动作包括移进,规约,接受,报错。
最左规约是最右推导的逆过程,都是规范推导
活前缀,句柄在栈顶形成。
用分析树表示就是剪句柄。
LR分析
核心:移进规约分析器+驱动器。
特点:无回溯的移进规约方法,可分析LL文法的真超集,能及时发现错误,分析表较复杂。
重点:分析表的组成,分析,构成方法。
分析表组成
- 动作表(action[s,a]),与输入有关,改变格局的动作。si(移进),rj(替换,与goto共同完成规约),acc(接受),blank(报错)
- 转移表(goto[s,A]),非终结符的转移。
LR(K)分析器,L表示从左到右扫描,R表示逆序的最右推导,k为确定下一动作向前看的终结符个数,通常K<=1。k==1时简称LR。k>1构造很复杂,我们只构造SLR(1)分析器。
重点:构造SLR(1)分析器
思路:识别文法所有活前缀的DFA + 向前看信息。