編譯原理已知語言求文法的問題
『壹』 編譯原理題:分別構造下列語言的文法(4個題) 200分獻上。。。
(3)任何不是以0打頭的所有奇整數所組成的集合
解:G(S)
=
({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,
I→J|2|4|6|8,
Jà1|3|5|7|9},S)
(4)所有偶數個0和偶數個1所組成的符號串集合
解:對應文法為
S→0A|1B|e,A→0S|1C
B→0C|1S
C→1A|0B
『貳』 【編譯原理】第二章:語言和文法
上述文法 表示,該文法由終結符集合 ,非終結符集合 ,產生式集合 ,以及開始符號 構成。
而產生式 表示,一個表達式(Expression) ,可以由一個標識符(Identifier) 、或者兩個表達式由加號 或乘號 連接、或者另一個表達式用括弧包裹( )構成。
約定 :在不引起歧義的情況下,可以只寫產生式。如以上文法可以簡寫為:
產生式
可以簡寫為:
如上例中,
可以簡寫為:
給定文法 ,如果有 ,那麼可以將符號串 重寫 為 ,記作 ,這個過程稱為 推導 。
如上例中, 可以推導出 或 或 等等。
如果 ,
可以記作 ,則稱為 經過n步推導出 ,記作 。
推導的反過程稱為 歸約 。
如果 ,則稱 是 的一個 句型(sentential form )。
由文法 的開始符號 推導出的所有句子構成的集合稱為 文法G生成的語言 ,記作 。
即:
例
文法
表示什麼呢?
代表小寫字母;
代表數字;
表示若干個字母和數字構成的字元串;
說明 是一個字母、或者是字母開頭的字元串。
那麼這個文法表示的即是,以字母開頭的、非空的字元串,即標識符的構成方式。
並、連接、冪、克林閉包、正閉包。
如上例表示為:
中必須包含一個 非終結符 。
產生式一般形式:
即上式中只有當上下文滿足 與 時,才能進行從 到 的推導。
上下文有關文法不包含空產生式( )。
產生式的一般形式:
即產生式左邊都是非終結符。
右線性文法 :
左線性文法 :
以上都成為正則文法。
即產生式的右側只能有一個終結符,且所有終結符只能在同一側。
例:(右線性文法)
以上文法滿足右線性文法。
以上文法生成一個以字母開頭的字母數字串(標識符)。
以上文法等價於 上下文無關文法 :
正則文法能描述程序設計語言中的多數單詞。
正則文法能描述程序設計語言中的多數單詞,但不能表示句子構造,所以用到最多的是CFG。
根節點 表示文法開始符號S;
內部節點 表示對產生式 的應用;該節點的標號是產生式左部,子節點從左到右表示了產生式的右部;
葉節點 (又稱邊緣)既可以是非終結符也可以是終結符。
給定一個句型,其分析樹的每一棵子樹的邊緣稱為該句型的一個 短語 。
如果子樹高度為2,那麼這棵子樹的邊緣稱為該句型的一個 直接短語 。
直接短語一定是某產生式的右部,但反之不一定。
如果一個文法可以為某個句子生成 多棵分析樹 ,則稱這個文法是 二義性的 。
二義性原因:多個if只有一個else;
消岐規則:每個else只與最近的if匹配。
『叄』 編譯原理,求文法的問題
l1:S->aS|bX
X->bX|cY
Y->cY|ε
l2:S->MbXcY
M->aM|ε
X->bX|ε
Y->cY|ε
例:bc,abc,abbc
l3:S->MX
M->aMb|ε
X->aXb|ε
例:ab,aabbab
l4:S->1S0|X|ε
X->0X1|ε
例:100110,10,1010
『肆』 編譯原理考試問題:已知表達式文法G(Exp)
簡單起見,用E代表Exp,用T代表Term,用F代表Factor。下面是所求屬性文法
(1)E→ E1 + T E.val:=E1.val+T.val /* 為了區別→兩側的E, →右側的E用E1表示 */
(2)E→
T E.val:=T.val
(3)T→ T1 * F T.val:=T1.val*F.val
(4)T→
F T.val:=F.val
(5)F→(E) F.val:=E.val
(6)F→num F.val:=num.val
『伍』 幫我做下兩道簡單的《編譯原理》文法題目,在線等答案O(∩_∩)O謝謝!
『陸』 編譯原理文法
編譯原理文法的概念為:每一種自然語言或者是編程語言都需要文法來描述,文法相當於語言學的語義分析,即分析每一句話所表示的含義,編譯器需要利用文法來完成其語法分析和語義分析。
字母表是元素的非空有窮集合,字母表中的元素稱之為符號,因此,字母表也稱之為符號集。例如C語言中的字母表由字母、數字、關鍵字等組成。
符號串,就是由符號集中的元素組成的序列。例如,給定符號集a、b、c,那麼abc、abb、ac就是由該符號集組成的符號串。一個文法中,含有一個,或多個產生式,產生式,描述了將終結符集合和非終結符集合組合成串的方法。
『柒』 編譯原理求解答案
編譯原理是計算機軟體專業中的非常重要一門課程。例如:如何把我們編寫的高級語言源程序,翻譯成機器可執行的目標程序,這個就需要用到編譯原理技術。
但是學習編譯原理這門課程時,是需要頭腦中對編譯原理課程中涉及到的所有概念必須是相當清楚的,別人才能夠對你的這些問題進行准確的回答。而不是看到這些似曾親切的內容就敢於回答你的內容的。
故我個人的建議還是:你可以向專門講授編譯原理的老師請教你的問題。
以上就是我很多年前學習編譯原理的親身體會。
『捌』 編譯原理:考慮文法G[S]
考慮文法:
(1)消去左遞歸後:
S→a|∧|(T)
T→ST』
T』 →,ST』|ε
(2)計算每個非終結符的FIRST集合和FOLLOW集合:
FIRST(S)={a,∧,(}
FIRST(T)={ a,∧,(}
FIRST(T』)={,ε}
FOLLOW(S)={,#}
FOLLOW(T)={ )}
FOLLOW(T』)={ )}
預測分析表如下:
\x09a\x09∧\x09(\x09)\x09,\x09#
S\x09S→a\x09S→∧\x09S→(T)\x09\x09\x09
T\x09T→ST』\x09T→ST』\x09T→ST』\x09\x09\x09
T』\x09\x09\x09\x09T』 →ε\x09T』 →,ST』\x09
構造的預測分析表中沒有多重入口,所以改造後的文法是LL(1)文法.
『玖』 編譯原理中怎樣寫文法和語言
寫文法:首先要清楚語言集的特徵,即找出其特殊值及通式,然後再按此考慮去寫出文法
寫語言:要先理解推導、句型、句子的概念,語言就是句子的全體。
『拾』 編譯原理問題,求解決
去問下醫生是怎麼回事吧