當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 編程軟體 » 編譯原理優先函數表怎麼畫

編譯原理優先函數表怎麼畫-九游会j9娱乐平台

發布時間: 2024-07-01 08:29:17

ⅰ 優先函數是什麼編譯原理

構造算符優先分析表時使用的優先函數,其等價於矩陣表,但存儲量小。
定義兩個函數,其對應元素的值為優先值,通過循環比較各元素的兩個值,每次將優先順序大的值改為小的值 1,若相等則都賦為目前較大的值,循環直至結果沒有變化,構造ok

ⅱ 試述編譯原理中優先函數有何好處與不足之處

構造算符優先分析表時使用的優先函數,其等價於矩陣表,但存儲量校 定義兩個函數,其對應元素的值為優先值,通過循環比較各元素的兩個值,每次將優先順序大的值改為小的值 1,若相等則都賦為目前較大的值,循環直至結果沒有變化,構造ok

ⅲ 編譯原理 文法題目

首先擴展文法為:
1) s1->s
2) s->as
3) s->bs
4) s->a
則:
i0 = closure({s1->.s})={s1->.s,s->.as,s->.bs,s->.a}
go(i0,s) = closure({s1->s.})={s1->s.} = i1
go(i0,a) = closure({s->a.s,s->a.})={s->a.s,s->.as,s->.bs,s->.a,s->a.} = i2
go(i0,b) = closure({s->b.s})={s->b.s,s->.as,s->.bs,s->.a}=i3
go(i2,s) = closure({s->as.})={s->as.}=i4
go(i2,a) = closure({s->a.s,s->a.}) = i2
go(i2,b) = closure({s->b.s}) =i3
go(i3,s) = closure({s->bs.}) = {s->bs.} = i5
go(i3,a) = closure({s->a.s,s->a.}) = i2
go(i3,b) = closure({s->b.s}) = i3

由圖所示,狀態i2,既有歸約項目(s->a.)又有移近項目(s->.as,s->.bs,s->.a),產生沖突。當用srl分析法時,需向前看一步,即求出:
follow(s) = follow(s1) = {#}
則,follow(s)∩{a,b} =∮
故而action(i2,a) = s2
action(i2,b) = s3
action(i2,#) = r4

則構造出srl分析表如下所示:
action goto
a b # s
i0 s2 s3 1
i1 acc
i2 s2 s3 r4 4
i3 s2 s3 5
i4 r2 r2 r2
i5 r3 r3 r3

請採納。

ⅳ 編譯原理:優先函數 f和g 到底怎麼看啊,不懂怎麼構造的 求解...

求算符優先函數的方法—迭代法

若已知運算符之間的優先關系,可按如下步驟構造優先函數:

1、對每個運算符a(包括#在內)令f(a)=g(a)=1

2、如果a⋗b且f(a)<=g(b),令f(a)=g(b) 1

3、如果a⋖b且f(a)>=g(b),令g(b)= f(a) 1

4、如果a≐b而f(a) ≠g(b),令min{f(a),g(b)}=max{f(a),g(b)}

5、重復2~4,直到過程收斂。如果重復過程中有一個值大於2n,則表明不存在算符優先函數。

ⅳ 誰能夠解釋下編譯原理中什麼是firstvt,和lastvt,盡量淺顯易懂點謝謝

給你copy一個看管用不,雖然不懂你在問什麼...

算符優先分析 [上一節] [下一節]

5.2.1 算符優先文法及其優先表構造

一個文法,如果它的任一產生式的右部都不含兩個相繼(並列)的非終結符,即不含如下形式的產生式右部:

…qr…

則我們稱該文法為算符文法。

在後面的定義中,a、b代表任意終結符;p、q、r代表任意非終結符;『…』代表由終結符和非終結符組成的任意序列,包括空字。

假定g是一個不含e-產生式的算符文法。對於任何一對終結符a、b,我們說:

1. a�6�7b當且僅當文法g中含有形如p→…ab…或p→…aqb…的產生式;

2. a�6�3b當且僅當g中含有形如p→…ar…的產生式,而rb…或rqb…;

3. a�6�4b當且僅當g中含有形如p→…rb…的產生式,而r…a或r…aq。

如果一個算符文法g中的任何終結符對(a,b)至多隻滿足下述三關系之一:

a�6�7b,a�6�3b, a�6�4b

則稱g是一個算符優先文法。

現在來研究從算符優先文法g構造優先關系表的演算法

通過檢查g的每個產生式的每個候選式,可找出所有滿足a�6�7b的終結符對。為了找出所有滿足關系�6�3和�6�4的終結符對,我們首先需要對g的每個非終結符p構造兩個集合firstvt(p)和lastvt(p):

firstvt(p)={a | pa…或pqa…,a�0�2vt而q�0�2vn}

lastvt(p)={a | p…a或p…aq,a�0�2vt而q�0�2vn}

5.2.2 算符優先分析演算法

所謂素短語是指這樣的一個短語,它至少含有一個終結符,並且,除它自身之外不再含任何更小的素短語。所謂最左素短語是指處於句型最左邊的那個素短語。如上例,p*p和i是句型p*p i的素短語,而p*p是它的最左素短語。

現在考慮算符優先文法,我們把句型(括在兩個#之間)的一般形式寫成:

#n1a1n2a2…nnannn 1# (5.4)

其中,每個ai都是終結符,ni是可有可無的非終結符。換言之,句型中含有n個終結符,任何兩個終結符之間頂多隻有一個非終結符。必須記住,任何算符文法的句型都具有這種形式。我們可以證明如下定理(證明留給有興趣的讀者作練習):

一個算符優先文法g的任何句型(5.4)的最左素短語是滿足如下條件的最左子串njaj…niaini 1,

aj-1�6�3aj

aj�6�7 aj 1,…,ai-1�6�7ai

ai�6�4ai 1

根據這個定理,下面我們討論算符優先分析演算法。為了和定理的敘述相適應,我們現在僅使用一個符號棧s,既用它寄存終結符,也用它寄存非終結符。下面的分析演算法是直接根據這個定理構造出來的,其中k代表符號棧s的使用深度。

5.2.3 優先函數

在實際實現算符優先分析演算法時,一般不用表5.1這樣的優先表,而是用兩個優先函數f和g。我們把每個終結符q與兩個自然數f(q)和g(q)相對應,使得

若q1�6�3q2 則 f(q1)
若q1�6�7q2 則 f(q1)= g(q2) (5.5)

若q1�6�4q2 則 f(q1)>g(q2)

函數f稱為入棧優先函數,g稱為比較優先函數。使用優先函數有兩方面的優點:便於作比較運算,並且節省存儲空間,因為優先關系表佔用的存儲量比較大。其缺點是,原先不存在優先關系的兩個終結符,由於與自然數相對應,變成可比較的了。因而,可能會掩蓋輸入串的某些錯誤。但是,我們可以通過檢查棧頂符號q和輸入符號a的具體內容來發現那些原先不可比較的情形。

如果優先函數存在,那麼,從優先表構造優先函數的一個簡單方法是:

1. 對於每個終結符a(包括#)令其對應兩個符號fa和ga,畫一張以所有符號fa和ga為結點的方向圖,如果a �6�4�6�7b,那麼,就從fa畫一箭弧至gb;如果a�6�3�6�7b,就畫一條從gb到fa的箭弧。

熱點內容
resin下jsp不能正常編譯 發布:2024-07-17 16:34:44 瀏覽:229
sqlserver如何切換主備伺服器 發布:2024-07-17 16:23:02 瀏覽:299
mc18伺服器ip 發布:2024-07-17 16:23:02 瀏覽:379
仙境傳說手游腳本 發布:2024-07-17 16:09:24 瀏覽:691
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:375
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:955
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:130
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:388
安卓系統視頻製作哪個好用 發布:2024-07-17 15:10:47 瀏覽:210
androidapk結構 發布:2024-07-17 15:10:43 瀏覽:945
网站地图