編譯原理 正則語言 二義文法 急

2025-03-23 14:05:07 字數 3557 閱讀 8311

1樓:俺看過飛天豬

正規語言又稱正則語言是滿足下述相互等價的一組條件的一類形式語言:

可以被確定有限狀態自動機識別;

可以被派或嫌非確定有限狀態自動機識別;

可以被唯讀圖靈機識別;

可以用正規表示式描述;

可以用正則文法生成。

可以用字首文法生成。

例子。所有的有限語言都是正則的。

字母表 上包含偶數個 a 的所有字串構成的語言是正則的。

字母表 上取若干個 a 後緊跟若干個 b形塵手式的所有字串構成的語言是正則的。

定義。在字母表集合 ∑上的正規語言定義如下:

空集合ø是正規語言。

只包含乙個空字串的語言是正規語言。

對所有,是正規語言。

若a, b是正規語言,則(kleene星號)都是正規語言。

除此之外都不是正規語言。

如果乙個語言不是正規語言,它需要乙個記憶體至少是ω(log log n)的自動機才能辨認。換句話說,dspace(o(log log n))等於所有正規語言的集合。實際上,大部份的非正規語言需要至少o(log n)的空間。

封閉性質。這裡語言的運算參見條目形式語言。

正則語言的交、並、差、補運算得到的語言仍然是正則語言;

兩個正則語言連線團讓(把第乙個語言的所有字串同第二個語言的所有字串連線起來)後得到的語言仍然是正則語言;

正則語言閉包運算後得到的語言仍然是正則語言;

正則語言的每個字串轉置後得到的語言仍然是正則語言;

正則語言被任意語言的字串商(左商或右商)後得到的語言仍然是正則語言。

正則語言字串代換後得到的語言仍然是正則語言。

與正則語言字串同態或逆同態的語言仍然是正則語言。

能幫我看看 證明文法: e->e+e|e*e|(e)|i 是二義的 怎麼做麼?

2樓:網友

證明:文法e->e+e|e*e|(e)|i沒有定義出+與*的優先順序,於是i+i*i可以得出兩棵不同的語法樹,分別是。

i+i)*i與i+(i*i),顯然這兩棵語義樹是完全不同的,證畢。

編譯原理:證明下面文法g【s】是二義性的

3樓:網友

證明:若文法中存在這樣的句型,它具有兩棵不同的語法樹,則稱該文法是二義性文法,二義性文法會引起歧義,應儘量避免。

s + s)和(s * s)以及(i s * s)和(s + s i)都可以表示i+i*i,所以g(s):s ->s+s| s*s | s) |i ;文法具有二義性。

將編譯程式分成若干個「遍」是為了使編譯程式的結構更加清晰。

構造編譯程式應掌握源程式、目標語言及編譯方法等三方面的知識。

對編譯而言,變數既持有左值又持有右值。

編譯程式打交道最多的就是各種**。

目標**包括彙編指令**、可重定位指令**和絕對指令**3種,因此不是目標**的。

詞法分析遵循的是構詞規則,語法分析遵循的是語法規則,中間**生成遵循的是語義規則,並且語義規則可以定義乙個程式的意義。

編譯原理關於文法轉語言的一道題

4樓:網友

你這是我也想問啊··知道了以後別刪除問題啊 !

怎樣證明正則語言在補運算下封閉

5樓:網友

一 封閉性。

正則語言之並是正則的。

正則語言之交是正則的。

用自動機的乘積自動機。

如果證明了3,也可以用集合運算。

正則語言的補語言是正則的。

用乙個 dfa 表示原來的語言,然後把非接受狀態改為接受狀態,把接受狀態改為非接受狀態。

正則語言的差是正則的。

集合運算。正則語言的反轉是正則的。

用乙個 dfa a 表示原來的語言,把 a 改造成 ra, 先把所有箭頭反轉;把接受狀態改為普狀態;把初始狀態改為接受狀態。加入乙個新狀態作為初始狀態,併發出 e 箭頭指向原來的全體接受狀態。

另一種方法是歸納。設語言為 l(a),則 r(l(a)) = l(r(a))

正則語言的 kleene 閉包是正則的。

正則語言的連線是正則的。

二 應用舉例。

設字符集合為 . 語言 l 表示由不同個數的 0,1 組成的串, 試證明其為非正則的。

用幫浦引理證明 l 的補語言 l'= 是非正則的。 從而 l' 的補語言 l 是非正則的。

編譯原理中,形式語言裡怎麼區分2型文法與3型文法

6樓:可以叫我表哥

二型文法如下:

s->ac

s->sc

a->ab

a->aab

三型文法如下:

s->as

a->ba

b->cb

b->c

a->bb

a、2型文法是上下文無關文法,表現在產生式上就是產生式的左部只有乙個非終結符;3型文法從廣義上講包括左線形文法、右線形文法和正規文法 。

b、左線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有乙個,且必須位於產生式右部的最左端。

c、右線形文法產生式的右部要麼沒有非終結符,如果有非終結符也只能有乙個,且必須位於產生式右部的最右端 。

d、正規文法是右線形文法的乙個子集,其產生式右部只有三種情況:

1)空串。2)只有乙個終結符。

3)只有乙個終結符後接乙個非終結符。

e、所有的3型文法都是2型文法。

7樓:少年子桑

通過演算法對文法的每一產生式進行分析,如果存在複雜遞迴,則必是上下文無關文法,否則就是正則文法。

1、像a->aa|ε這樣的文法,雖然存在遞迴,但卻是單一的自遞迴,可以通過有窮自動機表示和分析處理,所以是正則文法;

2、但是像e->e+t,t->id|(e)這樣的文法顯然非單一的自遞迴,而是存在複雜遞迴,自動機是無法表示和處理的,必然是上下文無關文法。

另外還請注意:

1、正則文法是上下文文法的子集,正則文法也屬於上下文無法,但有的上下文文法不一定是正則文法;

2、同時再結合這兩個的形式定義認真揣摩必定能悟出一二。

編譯原理中文法二義性問題

8樓:網友

二義性文法。

定義】 若文法中存在這樣的句型,它具有兩棵不同的語法樹,則稱該文法是二義性文法。

二義性文法會引起歧義,應儘量避免之!

e ee + e e * e

i e * e e + e i

i i i i

都可以表示i+i*i

所以g(e):e ->e+e | e*e | e) |i ;文法具有二義性。

文法二義性的消除:

方法1】不改變文法的原有規則,加進一些非形式規定。

加進運算子的優先順序和結合規則對g(e),規定*優於+,*和+服從左結合。

方法2】構造乙個等價的無二義性文法,將排除 二義性的規則合併到文法中。

g(e) -g´(e) :e ->e+t | t t ->t*f | f f ->e) |i ;

編譯原理 學的是什麼,什麼是編譯原理

許詩文 編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程式構造的一般原理和基本方法。內容包括語言和文法 詞法分析 語法分析 語法制導翻譯 中間 生成 儲存管理 優化和目標 生成。編譯原理是計算機專業設定的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論 技術 方法上都對學生...

C語言預編譯命令,C語言提供的預編譯處理命令主要有哪三種

include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 include ...

Altium Designer中,編譯原理圖,出現warn

off grid power 你的電氣柵格 可視柵格 捕獲柵格 之間必須是整數的倍數關係。has no driving 在你設計之前 必須 file new project,再在你的project 下面建立sch 和pcb檔案 就ok了。這是因為引腳的屬性為power io inout output...