在学习项目集规范族的构造之前,要先知道什么是项目?什么是项目集的闭包运算?
文章目录
- 前置知识
- LR(0)项目
- 项目集的闭包运算
- 项目转换函数GO
- 构造项目集规范族
- 解决方法
- 构造LR(0)分析表
- 真题实战:
前置知识
LR(0)项目
项目就是规则加上’·’
例如一条规则,A→abc
它对应的项目就是A→·abc A→a·bc A→ab·c A→·abc·
点的位置不同
项目集的闭包运算
简要来说就是,点后面的是非终结符号,将这个非终结符号的产生式加入闭包集合,前面要加上·
\
项目转换函数GO
GO[I, X]=CLOSURE(J)
构造项目集规范族
为什么要构造项目集规范族?
通过项目集规范族,可以构造出分析表,进而进行句子的分析
解决方法
- 将给出的文法写成拓广文法的形式
- 把起始状态的项目集闭包作为初始状态0,根据状态0,写出对应的转换函数.每一种新的转换函数对应一种新状态.
- 在这个过程中,点如果到达了最右边,则说明要规约或是ACC,转换函数就要写R或ACCEPT
- 重复这个过程,直到分析完所有的状态.
构造LR(0)分析表
对照着转换函数 ,填表,ACTION是终结符号,GOTO是非终结符号,LR(0)分析表碰到Rx,ACTION一整行都是Rx
真题实战:
1.给出文法:S→S; T|T T→a
构造项目集规范族,构造LR(0)分析表,并分析a;a
|
|
2.证明下列文法不是LR(0)文法
也就意味着在写出来项目集规范族之后,发现转换函数既规约又转换