语法分析--左递归的消除,FIRST集合FOLLOW集的求解
来源:互联网 发布:点歌软件 编辑:程序博客网 时间:2024/06/07 12:35
语法分析–左递归的消除,FIRST集合FOLLOW集的求解
左递归的消除
如果自一个文法中,存在一个非终端符号A,使得对某个串α,存在一个推导A→(*)Aα.(其中 →(*)表示可以经过多步推导。)则该文法为左递归文法(left recursive).由于自顶向下语法分析方法不能处理左递归的文法,因此需要一个转换方法来消除左递归。
对于左递归的产生式 A → Aα | β, 替换为非左递归的产生式如下(其中,ε表示空串):
A → βA’
A’ → αA’ | ε
这样的替换不会改变可从A推导得到的串的集合(证明省略)。该规则本身已经足够用来处理许多文法。
Example
对文法
E → E+T | T
T → T*F | F
F → (E) | id
通过使用上述的方法,将其转换为非左递归的文法,结果如下:
E → TE’
E’ → +TE’ | ε
T → FT’+
T’ → +FT’ | ε
F → (E) | id
在上述过程中,E → E+T | T被替换为E→TE’ 和E’ → +TE’|ε。类似的,T和T’的新产生式也是通过消除立即左递归得到的。
FIRST和FOLLOW集
在语法分析部分,使用自顶向下和自底向上的语法分析器的构造可以使用文法G相关的两个函数,即FIRST和FOLLOW。
FIRST
FIRST(α)被定义为可从α推导得到的串的首符号的集合,其中α是任意的文法符号串。如果α→(*)ε,那么ε也在FIRST(α)中。
FIRST集的产生规则。计算各个文法符号X的FIRST(X)时,运用下面的规则,知道没有新的终端符号或ε可以被加入到任何的FIRST集合中为止:
1) 如果X是一个终端字符,那么FIRST(X)=X
2) 如果X是一个非终端字符,且X→Y1Y2Y3…Yk是一个产生式,其中k≥1,那么如果对于某个i,a在FIRST中(Yi)中且ε在所有FIRST(Y1),FIRST(Y2)..FIRST(Yi-1)中,就把a加入到FIRST(X)中。Y1Y2Y3..Yk Yi 中的123ki表示的为小标 而不是终端符号
3) 如果X→ε是一个产生式,那么将ε加入到FIRST(X)中。
对于第二条规则,也就是说,FIRST(Y1)中的每个元素都在FIRST(X)中,且,如果FIRST(Y1)中存在ε(空串),则FIRST(Y2)也存在FIRST(X).对后面的同理
FOLLOW
对于非终端符号,FOLLOW(A)被定义为可能在某些句型中紧跟在A右边的终端字符的集合。例如,如果有S→αAaβ(其中α,β是文法符号),那么终端符号a就在FOLLOW(A)中。如果A是某些句型的最右符号,则
FOLLOW集的产生规则计算各个文法符号X的FOLLOW(A)时,运用下面的规则,知道没有新的终端符号可以被加入到任何的FOLLOW集合中为止:
1) 将
放入到FOLLOW(S)中,其中S是开始符号,而 是输入右端的结束标记
2) 如果存在一个产生式A→αBβ,那么FIRST(β)中除了ε外的所有符号都在FOLLOW(B)中。
3) 如果存在一个产生式A→αB,或存在产生式A→αBβ且FIRST(β)包含ε,那么FOLLOW(A)中的所有符号都在FOLLOW(B)中。
相关例子等待更新。
- 语法分析--左递归的消除,FIRST集合FOLLOW集的求解
- 自上而下的语法分析,LL(1)文法(消除左递归,提取左因子)
- First/Follow集合的求法
- 求解FIRST & FOLLOW集
- LL(1)语法分析之first、follow的实现
- 消除文法的左递归
- 消除文法的左递归
- FIRST集合FOLLOW集
- 编译原理FIRST集合FOLLOW集的求法
- 如何求非终结符的FIRST集合FOLLOW集
- first、follow集合求解 (编译原理)
- 编译原理-First集合和Follow集合的求法
- 编译原理-First集合和Follow集合的求法
- 编译原理中FIRST集合与FOLLOW集合的算法
- 自顶向下语法分析方法:消除左递归
- 汇编语言中的first和follow集合的求法
- First集和Follow集的求法
- First集和Follow集的求法
- 深入Linux文件权限 SUID/SGID/SBIT
- iTween基础之Move(移动)
- AM3359 GPIO 驱动设计
- Web前端优化最佳实践及工具集锦
- 第N个偶斐波那契数
- 语法分析--左递归的消除,FIRST集合FOLLOW集的求解
- float的见解
- JVM内存的设置(解决eclipse下out of memory问题)
- Android百度地图(二)
- 八大排序算法
- 用户和组管理
- Solr6自定义mmseg4j中文分词库,升级mmseg4j
- Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)
- 使用HTMLParser解析器爬取网页内容