如何消除二義性 編譯原理

2025-03-29 11:25:30 字數 2962 閱讀 2095

1樓:糖糖寳寳

1、需要在語法設計時就要考慮了,即使是c/c++也存在二義性笑掘、不確定性數薯的語法,對於這種情況,各編譯器考慮的不同的方案,主要還是看你如何進行文法分析,可以選一種方薯公升者便分析的一種去做。

2、要判斷二義性的存在,可以嘗試使用不同的優先順序解釋。

假如解釋出現歧義,那麼一定存在二義性的語法(如經典的++運算)3、要消除二義性,最簡單可行的就是定義優先順序,不過不一定適合所有情況。

2樓:己優翁憶雪

二義性文法。

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

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

ieeeeiii

ii都可以表示i+i*i

所以g(e):e

e+ee*ee)i

文法高豎具有二義性。

文法二義性的消除:

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

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

方法2】構造乙個等價的無二義性文法,將排除。

二櫻逗義性的規則合併到文法中。g(e)

g´(e)e

e+tttt*ff

fe)i

編譯原理 例2.7的二義性問題

3樓:網友

你的理解沒錯。

產生二義性的原因,就是既有無else的if,又有帶跡念else的if,造成你舉的例子中後面else的組合關係不唯一。

去掉帶櫻鉛else的if語句,這個文法就不是二義的脊州好了。

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

4樓:網友

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

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

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

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

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

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

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

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

編譯原理 文法二義性 語法樹

5樓:焉湉湉

因為文法中沒有規定先做*再做+,也就是說沒有定義優先順序,所以你可以先對i+i進行分解,也可以先對i*i進行分解,這樣就存在兩棵不同的語法樹了,也表明這個文法二義性。

怎樣為「逗號分隔的左結合的標誌符列表」構建無二義性的上下文無關文法?

6樓:小魚泡泡

這段話時龍書上的原話:

依照慣例,9+5+2等價於(9+5)+2,9-5-2等價於(9-5)-2.當乙個運算分量(比如上式中的5)的左右兩側都優於氨酸時,我們需要一些規則來決定哪個運算子被應用於該運算分量。我們說運算子」+「是左結合(associate)的,因為當乙個運算分量左右兩側都有」+「號時,它屬於其左邊的運算子。

在大多數程式設計語言中,加減乘除四種算術運算子都是左結合的。

某些常用的運算子是右結合偶的,比如指數運算子。作為另乙個例子,c語言中的賦值運算子」=「及其後裔(即+=,-=等譯者注)也是右結合的。對表示式a=b=c的處理和對表示式a=(b=c)的處理相同。

帶有右結合運算子的串,比如a=b=c,可以由如下文法產生;

right = letter = right | letterletter = a|..z這是乙個左結合的分析樹,它向左下端延伸。

這是右結合的分析樹,它向右下方延伸。

所以你的答案為 list ——list , a | a.

7樓:忘我之魚

很遺憾地告訴樓主,消除二義性的方法很靈活,不是能用形式語言表達出來的,所以除非你拿一道題來讓我做,要具體問題具體分析,沒有定式的方法!

更遺憾地告訴樓主,你這個題目是錯誤地,文法是用來描述語言的結構的,不能用來描述列表這個知識,所以對於你這個題目,我還是無能為力,實在抱歉了╮(╯

本人才疏學淺,關於編譯原理的教材本人唯讀過龍書,清華張素琴的,和高教陳意雲的(以前考研用的),其他著名教材不是很清楚,所以還望樓主海涵了。

最後鄭重宣告:本人沒能力回答樓主問題,樓主理應不採納本人的答案,但本人絕不是為了騙分,30分對本人來說一點意義都沒有,本人回答問題從來不看給不給分,分只是虛無縹緲的東西,本人追求的是真才實學,本人的目的只有乙個,那就是學習,在回答問題中瞭解自己不瞭解的,然後不斷進步,僅此而已。

編譯原理題目:下列文法能否轉換為等價的非二義文法?

8樓:低億卉

二義性文法【定義】 若文法中存在這樣的句型,它具有兩棵不同的語法樹,則稱該文法是二義性文法。二義性文法會引起歧義,應儘量避免之! e e e + 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 ;

高手幫忙做下編譯原理的題目

9樓:夾芯氷

sorry.我沒有學過,真的幫不了你。我會找人幫你的。

焦慮如何消除?如何消除焦慮

1 要想消除這樣的心理必須要知道原因,也就是自己為什麼會出現這樣的情況。一般認為是害怕被人評價自己做的不夠好 在公共場合出醜而產生的緊張 焦慮。只要瞭解這一點慢慢克服就可以了。2 要做好預想的補救措施,既然是擔心出醜就需要做好出醜的補救,有些人認為反正已經出醜了,再補救也晚了。這樣就會使人們的心理更...

如何消除煩惱 怎樣消除煩惱

一切煩惱,失眠,空虛,鬱悶,無聊,壓力。皆有心生。所以應該調節自己 1.慾望少點,2.攀比少點,3.心態平衡點,4.知足常樂多點 5.改變能改變的,接受不能改變的,不要迷失了自己 6.根據自己的能力去生活吧,不要讓別人的生活狀況左右了你的心情。朋友 你好 無形的煩惱都是由生活和社會帶來的 好象你看到...

如何消除自卑?怎樣消除自卑?

心理暗示的作用是巨大的,不但能影響人的心理與行為,還能影響到人體的生理機能。因此,消極的暗示能擾亂人的心理 行為以及人體的生理機能 而積極的暗示能起到增進和改善的作用。很多人都有自卑的心理習慣,或者總是自我懷疑,這其實就是一種消極的心理暗示習慣,自信與自卑只在一念之間,就看你的思想是向左傾還是向右傾...