編譯原理測試題及答案-九游会j9娱乐平台
⑴ 一道《編譯原理》求follow集題目,在線等答案
哥們,你這個問題中的一個產生式e』→ te』| e,應該是e-> te』 |ε這樣吧!否則不可能獲得如此結果。
關於求follow集合,龍書中說得很清楚,依據三條規則即可:
1、任何follow(s)都包含輸入終止符號,其中s是開始符號。
適用該條,因此follow(e』)中包含終止符號#。
2、如果存在產生式,a->αbβ,則將first(β)中除ε以外的符號都放入follow(b)中。
該條不適用,因為在上述所有產生式中不存在形如e『->αe』β這樣的產生式。
3、如果存在產生式,a->αb,或a->αbβ,其中first(β)中包含ε,則將follow(a)中的所有符號都放入follow(b)中。
適用該條,因為存在這樣的產生式e-> te』,使得follow(e』)=follow(e)成立。而follow(e)適用上述第二條,根據產生式f→(e)可求得為follow(e)={#,)}。
綜上,follow(e』)=follow(e)={#,)}。
⑵ 編譯原理左遞歸消除
這些題很難啊!!!
都有間接左遞歸。要先變成直接左遞歸,然後消除掉。
--------------------
g3.1
s->sa|ab|b|c
a->bc|a
b->sb|b
--------------------
間接左遞歸轉直接左遞歸
b代入a:a ->(sb|b)c|a -> sbc|bc|a
a代入s:s -> s(sbc|bc|a)|(sbc|bc|a)b|b|c -> ssbc|sbc|sa|sbcb|bcb|ab|b|c
消除直接左遞歸
s->bcbs'|abs'|bs'|cs'
s'->sbcs'|bcs'|as'|bcbs'|ε
s'還是有直接左遞歸,繼續消除
s'->bcs't|as't|bcbs't
t->bcs't|ε
最後,這題答案就是s,s',t的產生式
--------------------
下面兩題更難了,上一題反復代入還能把其他非終結符消掉,下面兩個文法都是最後代入還剩下兩個非終結符反復迭代,佛了!
g3.2
e->et |t
t->tf*|f
f->e|i
--------------------
f代入t: t->t(e|i)*|(e|i)->te*|ti*|e|i
t代入e:
--------------------
g3.3
s->v_1
v_1->v_2|v_1 2 v_2
v_2->v_3|v_2 v_3
v_3->v_1 * |(
這些字母我都不認識了,換一下
s->a|sia
a->b|a b
b->s*|(
--------------------
b代入a:a->(s*|()|a (s*|()->s*|(|a s*|a (
a代入s:
--------------------
⑶ 編譯原理中的文法設計這題該怎麼做,能給一下思路和答案嗎
文法的設計需要考慮文法的類型和表達能力。一種可能的思路是:
首先,確定值為非負的5的倍數或3的李臘消倍數的數字串有什麼特徵,例如結尾只能是0或5或3或6或9,不能有前導0等。
然後,選擇合適的文法類型來描述這些特徵,例如正規文法、上下文無關文法等。
最後,根據文法類哪知型的規則,給出局寬產生式和開始符號。
使用正規文法來描述這個語言。
產生式如下:
- s -> 0 | 3 | 5 | 6 | 9
- s -> a0 | a3 | a5 | a6 | a9
- a -> s
- a -> aa
開始符號為s。
一種可能的答案是:
⑷ 編譯原理題,求大家幫忙看一下如何解答
一、選擇題
a b
d
c
a b
c
d
二、判斷題
錯
錯
錯
對