编译原理-自顶向下的语法分析
1.代替部分由公因子就会出现回溯。
2.LL(1)文法
(1)FIREST集
这样说从文法的左部找右部相关的非终结符号。
若 X->BC..D,则将First(B)所有元素(除了ε)加入First(A),然后检测First(B),若First(B)中不存在ε,则停止,若存在则向B的后面查看,将First(C)中所有元素(除了ε)加入First(A),然后再检测First(C)中是否有ε...直 到最后,若D之前的所有非终结符的First集中都含有ε,则检测到D时,将First(D)也加入First(A),若First(D)中含有ε,则将 ε加入First(A)。
(2)FOLLOW集:记住是从文法的右部去找的。
1)S是开始符号,将#放到follow(S)中.
2)存在A→αBβ(且β!=ε),那么first(β)中除ε之外的所有符号都在follow(B)中。
3)存在A→αB或A→αBβ(且first(β)包含ε),那么follow(A)中的所有符号都在follow(B)中。
(注意都没有说α一定存在。)
(3)SELECT集
对于产生式A—>α。集合select(A—>α)定义如下:
1. 若α不能推出ε,则select(A—>α) = first(α)。
2. 若α能推出ε,则select(A—>α)= first(α)∪ follow(A)。
(4)如何判断一个文法是不是LL(1)文法:
第一消除左递归,先消除去直接左递归,然后看是否有相同最左公因子的,提取出来。
第二分别求出每个推导的SELECT集,同一左部的求SELECT集的交集,所有的这种交集为空的话就是LL(1)文法,否则不是。
3.递归下降分析法:
只针对LL(1)文法的,所以没有左递归。简单的来说就是为每个非终结符号编写一个处理程序,而处理程序的代码结构是由相应的非终结符号的规则右部所决定。p68.
4.预测分析表的构造:p74

浙公网安备 33010602011771号