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.根據自己的能力去生活吧,不要讓別人的生活狀況左右了你的心情。朋友 你好 無形的煩惱都是由生活和社會帶來的 好象你看到...
如何消除自卑?怎樣消除自卑?
心理暗示的作用是巨大的,不但能影響人的心理與行為,還能影響到人體的生理機能。因此,消極的暗示能擾亂人的心理 行為以及人體的生理機能 而積極的暗示能起到增進和改善的作用。很多人都有自卑的心理習慣,或者總是自我懷疑,這其實就是一種消極的心理暗示習慣,自信與自卑只在一念之間,就看你的思想是向左傾還是向右傾...