1. select (9+6*5+3%2)/5-3 這個是怎麼算的啊
這個是資料庫的計算,就是求(9+6*5+3%2)/5-3的值,結果為5
2. 在線等 如圖編譯原理
(1)
存在左遞歸:E→EA
進行消除得:
E→E'
E'→AE' | ε
消除後的文法G[E]:
E→iA | E'
E'→AE' | ε
A→i | d | (E)
(2)
FIRST集:
FIRST(E)={i,d,(,ε}
FIRST(E')={i,d,(,ε}
FIRST(A)={i,d,(}
FOLLOW集:
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(A)={#,i,d,(,),ε}
(3)SELECT集:
SELECT(E→iA)={i}
SELECT(E→E')={i,d,(,),#}
SELECT(E'→AE')={i,d,(}
SELECT(ε)={#,)}
SELECT(A→i)={i}
SELECT(A→d)={d}
SELECT(A→(E))={(}
由於SELECT(E→iA)∩SELECT(E→E')={i}∩{i,d,(,),#}={i}≠{Φ},即具有相同左部的產生式的SELECT集合的交集不為空可知,該文法不是LL(1)的。
希望你不是在考試的時候發的。
3. 懂編譯原理的請進
判斷是否是LL(1)文法的方法是根據FIRST集合和FOLLOW集合來判斷的,不是這個SELECT啊!你看的時哪本書?
4. 求 編譯原理 語法分析程序
可以參考我的空間,我在三年前寫過類似代碼。
http://hi..com/逄韶華/ihome/myblog
5. 編譯原理中,經過消除左遞歸的文法就一定是LL1文法么
不一定,還有回溯等其他的情況,判斷文法是不是LL1需要計算每個產生式的select集,根據計算結果才能確定
6. 怎麼求編譯原理中的first集,follow集和selec集
由於終結符的first集合就是它自己,所以求出非終結符的first集合後,就可很直觀地得到每個字元串的first集合三,first集求法
first集合最終是對產生式右部的字元串而言的,但其關鍵是求出非終結符的first集合
7. 關於編譯原理first follow 和select
首先要明白這三個集的作用和用途,知道了他們是用來做什麼的之後,理解起來就簡單一些
First(A)集的作用是標示在替換非終結符A的時候,替換後的文法的首字母集合,語法分析程序根據這個來判斷給定的語言是否是合法的,是符合規則的。
Follow(A)的作用是標示那些可以出現在A之後的字元,語法分析程序根據這個,在A可以被替換為e(空)的時候來進行判斷,看當前的文法是否是合法的。
這里簡單說明下,比如A->b,A->e(空) 當給定的語言是 bXXXXX的時候,根據第一句文法就可以判定句子合法,但是如果給的語言是cXXXXX的時候,因為A->可以替換為空,這時候就需要一句A的follow集來進行判斷,若A的follow集裡面含有c 則語言是合法的
Select集的作用是將first集和follow集進行合並,如果兩個文法的左端都是A,若他們的select集交集為空,表明他們是兩個無關的,不會產生不確定性的文法,反之,則表明文法不是LL(1)文法
計算的公式很繁雜,理解了意思之後,看就能看出來。。。。
8. 編譯原理, 寫一個簡單文法的詞法/語法分析器有簡單的方法嗎
那就用 lex 和 yacc 寫
不過實驗課程就是讓你手算一次
如果你用工具直接生成了意義不大
9. LL(1)文法-------編譯原理
我正在寫一個編譯器,源代碼在這里:
http://code.google.com/p/bellman/source/browse
其中詞法規則在lex.l文件中,語法規則在grammer.y中,分別用flex和bison的輸入文件的格式寫的。我實現了一個類似C/C++的語法
地址如下:
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/lex.l
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/grammer.y
具體有什麼問題可以發郵件[email protected]
10. 編譯原理中follow 集 select 集
不能,
A->aBc
將first c 加入follow(B)中,若c為空,把follow(A)加入follow(B)中