編譯原理優先文法
㈠ 編譯原理,文法G1是不是算符優先文法
G1是算符優先文法,它是1)不含空產生式的上下文無關文法,2)沒有形如U-->...VW...其中V,W屬於非終結符。
0)S'->#S#
1)S->S-T
2)S->T
3)T->T/F
4)T->F
5)F->(S)
6)S->e
1. 找到『=』關系
由0和5得 #=# (=)
2. 找到」<「關系
#S,則:#<FirstVT(S)
-T,則:-<FirstVT(T)
/F,則:/<FirstVT(F)
(S,則:(<<FirstVT(S)
3. 找到」>「關系
S# ,則:LastVT(S)>#
S-,則:LastVT(S)>-
T/,則:LastVT(T)>/
S),則:LastVT(S)>)
而
S'的FirstVT={ # } LastVT = { # }
S的FirstVT={- / ( e} LastVT = { - / ) e}
T的FirstVT= { /( e} LastVT = { /) e}
F的FirstVT= { ( e} LastVT = { ) e}
| - | / | ( | ) | e | #
- | > | < | < | > | < |>
/ | > | > | < | > | < |>
( | < | < | < | = | < |>
) | > | > | | > | |
e | > | > | | > | |>
# | < | < | < | | < |=
證明:任意二個終結符間至多隻有一種算符優先關系存在,所以該文法為算符優先文法。
㈡ 請問什麼是算符優先文法(編譯原理)
一個文法,如果他的任何一個產生式的右部都不包含連個連續的非終結符,那麼則稱之為算符文法,比如說加減乘除都是算符文法,而算符優先文法就是在算符文法中加上了優先關系,比如說乘除的優先順序就大於加減,有三個判斷依據:
1.P->ab或P->aAb,則a的優先順序等於b
2.P->aQ,則a的優先順序小於Q中所有符號的優先順序
3.P->Qa,則Q中所有符號的優先順序大於a的優先順序
具體情況看書吧,這里只是大略地講一下,其實要復雜一些,還要牽扯到算符優先表的構造
㈢ 編譯原理中,算符優先文法和LR文法什麼關系
算符優先分析法比LR分析(規范歸約)法的歸約速度快。在LR分析一章的語法分析器自動生成工具Yacc中,對算數表達式的歸約往往會用到算符優先關系的概念。算符優先分析的缺點是對文法有一定的限制,在實際應用中往往只用於算數表達式的歸約。由於算符優先分析不是規范歸約,所以可能把不是文法的句子錯誤的歸約成功
㈣ 編譯原理 將算術運算表達式寫成算符優先文法
算符優先分析法比LR分析(規范歸約)法的歸約速度快。在LR分析一章的語法分析器自動生成工具Yacc中,對算數表達式的歸約往往會用到算符優先關系的概念。算符優先分析的缺點是對文法有一定的限制,在實際應用中往往只用於算數表達式的歸約。由於算符優先分析不是規范歸約,所以可能把不是文法的句子錯誤的歸約成功
㈤ 編譯原理
4、文法G為:
A->aABe/Ba
B->dB/ε
構造LL(1)分析表並判斷adae是否是該文法的句子。
5、文法G為:
A->i:=E;
E->E+E
E->E*E
E->i
構造SLR分析表,並判斷i:=i*i是否是該文法的句子。
6、文法G為:
S->E
E->aB/bB
A->cA/d
B->Cb/d
構造該文法的LR(0)和SLR(1)分析表,並模擬分析句子bcd時分析棧和輸入串的變化。
7、文法G為:
E->E+T/T
T->T*F/F
F->P^F/P
P->(E)/i
判斷該文法是否為算符優先文法,若是,構造優先表。
㈥ 急求!!!用C語言編寫一個編譯原理實驗的簡單優先分析法程序
編譯原理IF條件語句的翻譯程序設計—簡單優先法、輸出四元式通過設計、編制、調試一個條件語句的語法及語義分析程序,加深對語法及語義分析原理的理解,並實現詞法分析程序對單詞序列的詞法檢查和分析。具體做到以下幾點:①對輸入語句進行詞法分析。將輸入的字元串進行掃描和分解,識別出一個個合法的單詞。單詞種類包括:關鍵字,標識符,運算符,常數和界限符②進行語法分析。編寫條件語句的相應文法,按照語法分析方法中的簡單優先分析法為文法設計簡單優先表,對詞法分析得到的單詞序列進行語法分析,以判別輸入的語句是否屬於該文法的條件語句。③語法制導翻譯。設計中間代碼(四元式)序列的結構及屬性文法,運用語法制導翻譯,在進行語法分析的同時,執行相應的語義規則描述的動作,從而實現語義處理,生成中間代碼以四元式的形式輸出。④錯誤提示。對不同的錯誤給出簡略描述,並終止程序的繼續執行。下載地址如下,有你要的東西!pile.rar
㈦ (編譯原理)請舉例:算符優先文法把正確的句子判定為錯誤的
請把問題補充完整,特別是規則是什麼?,然後用工具bison生成.
c程序
即可快速有效的判定!
不懂的看看bison源代碼分析裡面的怎麼寫
語法規則
一部分內容。
㈧ 編譯原理里的算符優先文法程序
Nike 還出相機哦!
㈨ 誰能夠解釋下編譯原理中什麼是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)<g(q2)
若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的箭弧。
㈩ 編譯原理,算符優先文法採用"移進-規約"技術,其規約過程是規范的. 這句話錯在哪了謝謝
算符優先文法確實使用了移入歸約技術,但其歸約過程不滿足規范歸約(最左歸約),算符優先文法每次歸約的是最左素短語,而規范歸約每次歸約的是最左直接短語(句柄)
