自上而下的語法分析,LL(1)文法(消除左遞歸,提取左因子)

自上而下的語法分析:(推導)

由根節點到葉節點


※最左推導和最右推導

(每一步替換最左邊的非終結符/每一步替換最右邊的非終結符),最右推導稱爲規範推導。最右推導對應於最左規約(規範規約)

例:

文法:

S--->AB

A--->a|t

B---->+CD

C--->a

D---->a

最右推導:

S--->AB---->A+CD--->A+Ca---->A+aa----->a+aa

最左推導:

S---->AB----->aB--->a+CD--->a+aD----->a+aa


自上而下文法設計所要注意的:


※※左遞歸:

左遞歸會使分析進入到無限循環之中


直接左遞歸和間接左遞歸

直接左遞歸:如果Aα,則稱文法G是直接左遞歸的


消除左遞歸

消除簡單的左遞歸:

對於含有左遞歸的產生式 Aαβ

可用下面的非左遞歸的產生式 代替:

                A→ β A

                A’ → αAε



消除左遞歸例

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子

 

一般情況消除左遞歸:


對於一般情況而言,若某一文法G的產生式具有如下形式:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子

則可用如下方法消除左遞歸:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子

 

間接左遞歸:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子
 

SQcRbcSabc,出現了左遞歸



消除以上文法的間接左遞歸:

1.將非終結符排序爲RQS

2.R不存在左遞歸,將R代入Q

      Q → Sab|ab|b

3. Q不存在左遞歸,將Q代入S

     S→ Sabc|abc|bc|c

4.消除直接左遞歸後,得文法:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子
 

化簡得:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子
 




※※提取左因子:

(如果最左邊的是一樣的,就不明確下一步應該走哪條路)

比如文法:→(Q|aP|a

遇到a,是PaP,還是Pa



提取左因子的算法:

自上而下的語法分析(消除左遞歸,提取左因子) - 小鏡子~ - 菜園子
 



發佈了61 篇原創文章 · 獲贊 23 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章