编译原理-自顶向下的语法分析

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>α。集合selectA>α)定义如下:

1. 若α不能推出ε,则selectA>α) = firstα)。

2. 若α能推出ε,则selectA>α)= firstα)∪ follow(A)

(4)如何判断一个文法是不是LL(1)文法:

第一消除左递归,先消除去直接左递归,然后看是否有相同最左公因子的,提取出来。

第二分别求出每个推导的SELECT集,同一左部的求SELECT集的交集,所有的这种交集为空的话就是LL(1)文法,否则不是。

3.递归下降分析法:

只针对LL(1)文法的,所以没有左递归。简单的来说就是为每个非终结符号编写一个处理程序,而处理程序的代码结构是由相应的非终结符号的规则右部所决定。p68.
4.预测分析表的构造:p74

posted @ 2017-04-25 17:25  freeflying  阅读(237)  评论(0)    收藏  举报