日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:編寫識別由下列文法所定義的表達式的預測分析程序。

EàE+T | E-T | T

TàT*F | T/F |F

Fà(E) | i

輸入:每行含一個表達式的文本文件。

輸出:分析成功或不成功信息。

?? (題目來源:編譯原理實驗(三)--預測(LL(1))分析法的實現)

?

解答:

?

(1)分析

a) ∵E=>E+T=>E+T*F=>E+T*(E)即有E=>E+T*(E)存在左遞歸。用直接改寫法消除左遞歸,得到如下:

E à TE’ E’ à +TE’ | ?TE’|ε

T à FT’ T’ à *FT’ | /FT’|ε

F à (E) | i

對于以上改進的方法。可得:

對于E’:?FIRST( E’ )=FIRST(+TE’)∪FIRST(-TE’)∪{ε}={+,?,ε}

對于T’:FIRST( T’ )=FIRST(*FT’)∪FIRST(/FT’)∪{ε}={*,∕,ε}

而且:FIRST( E ) = FIRST( T ) = FIRST( F )=FIRST((E))∪FIRST(i)={(,i }

由此我們容易得出各非終結符的FOLLOW集合如下:

FOLLOW( E )= { ),#}

FOLLOW(E’)= FOLLOW(E)={ ),#}

FOLLOW( T )= FIRST(E’)\ε∪FOLLOW(E’)={+,?,),#}

FOLLOW( T’ ) = FOLLOW( T ) ={+,?,),#}

FOLLOW( F )=FIRST(T’)\ε∪FOLLOW(T’)={*,∕,+,?,),#}

由以上FOLLOW集可以我們可以得出SELECT集如下:

對ESELECT(EàTE’)=FIRST(TE’)=FIRST(T)={ (,i }

對E’ SELECT(E’ à+TE’)={ + }

SELECT(E’ à ?TE’)={ ? }

SELECT(E’ àε)={ε,),#}

對TSELECT(TàFT’)={(,i}

對T’ SELECT(T’ à*FT’)={ * }

SELECT(T’ à ∕FT’)={ ∕ }

SELECT(T’ àε)={ε,+,?,),#}

對FSELECT(Fà(E) )={ ( }

SELECT(Fài)={ i }

∴ SELECT(E’ à+TE’)∩SELECT(E’ à ?TE’)∩SELECT(E’ àε)=F

SELECT(T’ à*FT’)∩SELECT(T’ à ∕FT’)∩SELECT(T’ àε)=F

SELECT(Fà(E) )∩SELECT(Fài)= F

由上可知,有相同左部產生式的SELECT集合的交集為空,所以文法是LL(1)文法。

?

b) 由Select集構造文法LL(1)的預測分析表 (表1)

非終

結符

終結符

i

+

-

*

/

(

)

#

ε

E

E >TE’[0]

E->TE’[5]

E’

E’-> + T E’[11]

E’-> - TE’[12]

E’->ε[16]

E’->ε[17]

E’->ε[18]

T

T->FT’[20]

T->FT’[25]

T’

T’->ε[31]

T’->ε[32]

T’->*FT’[33]

T’->/FT’[34]

T’->ε[36]

T’->ε[37]

T’->ε[38]

F

F->i[40]

F->(E)[45]

表1. LL(1)預測分析表

?

(2)設計

算法的主要流程圖(如:圖1)。

圖1.流程圖

?

(3)程序代碼如下

/************************************************************************

*文件名:test3.c

*文件描述:預測分析法實現的語法分析器。分析如下文法:

* E->E+T | E-T | T

* T->T*F | T/F |F

* F->(E) | i

* 輸入:每行含一個表達式的文本文件(#號結束)。

* 輸出:分析成功或不成功信息。

*創建人:余洪周 2006-12-16

*版本號:1.0?

*說明 :為了表示的方便采用了如下的所示表示方法:

*? A=E' B=T'

?* 非終結符:0=E1=E' 2=T 3=T'

總結

以上是生活随笔為你收集整理的编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。