當前位置:首頁 » 操作系統 » 文法判斷演算法

文法判斷演算法

發布時間: 2022-04-18 22:34:38

⑴ 為什麼說不存在一個可以判斷文法是否有二義性的演算法 如題

二義性是那些模稜兩可的語句產生的,所以不能用演算法消除 追問: 不是消除,是判斷 回答: 那也沒有判斷的,只能自己判斷,因為二義性它不是錯誤語句,不管怎樣它都能運行 追問: 難道不存在一個分析樹演算法,判斷是否有兩種分析樹? 回答: 說實話我真沒有見過有這種演算法

⑵ 如何判斷一個文法是否為SLR(1)文法

是。
例如證明下列文法是ll(1)文法但不是slr(1)文法
s->aaab|bbba
a->ᵋ(空值)
b->ᵋ(空值)
(1)首先該文法無左遞歸存在,沒有公共左因子.
其次:對於s→aaab|bbba
first(aaab)={a}
first(bbba)={b}
first(aaab)∩first(bbba)=φ
所以該文法是ll(1)文法.
(2)證明該文法不是slr的.
文法的lr(0)項目集規范族為:
i0={s』→.s
s→.aaab
s→.bbba
a→.
b→.}
i1={
s』→
s.
}
i2={
s→a.aab
}
i3={
s→b.bba
}
i4={
s→aa.ab
a→.
}
i5={
s→bb.ba
b→.
}
i6={
s→aaa.b
}
i7={
s→bbb.a
}
i8={
s→aaab.
}
i9={
s→bbba.
}
考察i0:
follow(a)={a,b}
follow(b)={a,b}
follow(a)∩follow(b)=
{a,b}
產生規約-規約沖突.
所以該文法不是slr(1)文法.

⑶ MATLAB問題求解,文法推斷演算法的問題,最後結果是無限循環,估計問題出在參數定義或者循環條件上

...

⑷ 為什麼說不存在一個可以判斷文法是否有二義性的演算法

二義性是那些模稜兩可的語句產生的,所以不能用演算法消除 追問: 不是消除,是判斷 回答: 那也沒有判斷的,只能自己判斷,因為二義性它不是錯誤語句,不管怎樣它都能運行 追問: 難道不存在一個分析樹演算法,判斷是否有兩種分析樹? 回答: 說實話我真沒有見過有這種演算法

⑸ 如何判斷文法是SLR,LR,LALR

1、構造它的LR(0)項目集合的DFA(即識別該文法全部活前綴的DFA); 2、根據該DFA畫出該文法的LR(0)分析表; 3、在分析表中,每格要麼只有一個內容,要麼沒有內容,(即無沖突)則為LR(0)文法。

⑹ 如何判斷文法是SLR(1),LR(1),LALR(1)

LL(1)就是向前只搜索1個符號,即與FIRST()匹配,如果FIRST為空則還要考慮FELLOW。

LR需要構造一張LR分析表,此表用於當面臨輸入字元時,將它移進,規約(即自下而上分析思想),接受還是出錯。
LR(0)找出句柄前綴,構造分析表,然後根據輸入符號進行規約。
SLR(1)使用LR(0)時若有沖突,不知道規約,移進,活移進哪一個,所以需要向前搜索,則只把有問題的地方向前搜索一次。
LR(1)1.在每個項目中增加搜索符。2.舉個列子如有A->α.Bβ,則還需將B的規則也加入。
LALR(1)就是假如兩個產生式集相同則將它們合並為一個,幾合並同心集。
我認為LR(1),SLR(1),LALR(1)只是對LR(0)的一種更全面的分析與考慮,關鍵先把LR(0)搞懂。

編譯原理實現判斷是不是一個文法的句子

構造LL(1)語法分析程序,任意輸入一個文法符號串,並判斷它是否為文法的一個句子。程序要求為該文法構造預測分析表,並按照預測分析演算法對輸入串進行語法分析,判別程序是否符合已知的語法規則,如果不符合(編譯出錯),則輸出錯誤信息。

⑻ 怎麼判斷一個文法是LR(0)

LR(0)分析就是LR(K)分析當K=0的情況,亦即在分析的每一步,只要根據當前的棧頂狀態 (或者說根據當前分析棧中已移進或歸約出的全部文法符號)就能確定應採取何種分析動作,而無須向前查看輸入符號。

LR(0)分析器的分析能力最低,但它是構造其餘三種LR分析器的基礎。SLR是「簡單LR」分析的縮寫,它是為了解決構造LR(0)分析器所出現的問題而形成的一種方法,其分析能力自然要比LR(0)分析器稍強一些。

(8)文法判斷演算法擴展閱讀:

1965年,D.Knuth首先提出了LR(K)文法及LR(K)分析技術。所謂LR(K)分析,是指從左至右掃描和自底向上的語法分析,且在分析的每一步,只須根據分析棧當前已移進和歸約出的全部文法符號,並至多再向前查看K個輸入符號,就能確定相對於某一產生式左部符號的句柄是否已在分析棧的頂部形成,從而也就可以確定當前所應採取的分析動作。

LR分析是當前最一般的分析方法。這是因為它對文法的限制最少,現今能用上下文無關文法描述的程序設計語言一般均可用LR方法進行有效的分析,而且在分析的效率上也不比諸如不帶回溯的自頂向下分析、一般的「移進歸約」以及算符優先等分析方法遜色。

此外,LR分析器在工作過程中,還能准確及時地發現輸入符號串的語法錯誤。凡此種種,就使LR分析方法在國際上受到了廣泛的重視。

⑼ 如何判斷一個文法是LL文法

  1. 對文法G的句子進行確定的自頂向下語法分析的充分必要條件是,G的任意兩個具有相同左部的產生式A->α|β 滿足下列條件:

    (1)如果α、β均不能推導出ε,則 FIRST(α) ∩ FIRST(β) = Φ。

    (2)α 和 β 至多有一個能推導出 ε。

    (3)如果 β *═> ε,則 FIRST(α) ∩ FOLLOW(A) = Φ。

    將滿足上述條件的文法稱為LL(1)文法。

  2. 第一個L代表從左向右掃描輸入符號串,第二個L代表產生最左推導,1代表在分析過程中執行每一步推導都要向前查看一個輸入符號——當前正在處理的輸入符號。

  3. LL(1)文法既不是二義性的,也不含左遞歸,對LL(1)文法的所有句子均可進行確定的自頂向下語法分析。

  4. 並不是所有的語言都可以用LL(1)文法來描述,而且不存在判定某語言是否是LL(1)文法的演算法。也就是說,確定的自頂向下分析只能實現一部分上下文無關語言的分析,這就是LL(1)文法所產生的語言。另外,在上述LL(1)文法的條件中,要求:ε ∈ FIRST(α1),ε ∈ FIRST(α2),…ε ∈ FIRST(αn) 中至多有一個成立。

熱點內容
python獲取當前路徑下的文件夾 發布:2024-09-30 15:07:24 瀏覽:141
java解析xml數據 發布:2024-09-30 15:06:39 瀏覽:625
微信傳輸助手的文件夾 發布:2024-09-30 15:03:05 瀏覽:937
老電腦音樂伺服器 發布:2024-09-30 15:02:20 瀏覽:317
連接linux下的資料庫 發布:2024-09-30 14:58:29 瀏覽:609
語言翻譯方法主要是編譯型的解釋 發布:2024-09-30 14:47:17 瀏覽:846
幫助跨站腳本 發布:2024-09-30 14:39:08 瀏覽:209
怎麼對wps表格加密 發布:2024-09-30 14:20:39 瀏覽:158
amd編譯代碼 發布:2024-09-30 14:10:46 瀏覽:521
映射網路驅動器拒絕訪問 發布:2024-09-30 13:55:46 瀏覽:446