如何判斷二義性文法 編譯原理,證明下面文法G(s)是二義性的?
編譯原理,證明下面文法G(s)是二義性的?證明:如果語法中有這樣一個(gè)句型,而且它有兩個(gè)不同的語法樹,就說語法是歧義的,應(yīng)該盡量避免。(s,s)和(s*s),以及(I,s*s)和(s,SI)可以表示I,
編譯原理,證明下面文法G(s)是二義性的?
證明:如果語法中有這樣一個(gè)句型,而且它有兩個(gè)不同的語法樹,就說語法是歧義的,應(yīng)該盡量避免。(s,s)和(s*s),以及(I,s*s)和(s,SI)可以表示I,I*I,所以g(s):s-> s,s*s*I;語法有歧義。編譯器被分成幾個(gè)“過程”,以使編譯器的結(jié)構(gòu)更清晰。構(gòu)造編譯器時(shí)應(yīng)掌握源程序、目標(biāo)語言和編譯方法的知識(shí)。對(duì)于編譯,變量同時(shí)包含左值和右值。編譯器處理大多數(shù)表。目標(biāo)代碼包括匯編指令代碼、可重定位指令代碼和絕對(duì)指令代碼,因此它不是目標(biāo)代碼。詞法分析遵循構(gòu)詞規(guī)則,語法分析遵循語法規(guī)則,中間代碼生成遵循語義規(guī)則,語義規(guī)則可以定義程序的意義。
簡(jiǎn)述什么是二義性文法?
模棱兩可。歧義的定義:“如果一個(gè)語法的句子中有兩個(gè)不同的語法樹,那么這個(gè)語法就是歧義的?!痹谶@種情況下,“ABC”這個(gè)句子有兩個(gè)不同的語法樹:s | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -. "如果語法不明確,編譯時(shí)就會(huì)有不確定性。遺憾的是,理論上已經(jīng)證明了語法的歧義性是無法確定的,即不可能通過有限的步驟構(gòu)造一個(gè)判斷語法是否具有歧義性的算法。現(xiàn)在的解決辦法是提出一些限制性條件,稱為無歧義的充分條件。當(dāng)語法滿足這些條件時(shí),就可以判斷語法沒有歧義。由于無歧義語法相對(duì)簡(jiǎn)單,我們也可以采用另一種解決方案:不改變無歧義語法,我們可以確定滿足無歧義充分條件的編譯算法?!崩纾谶@種情況下,可以添加一個(gè)限制:AC具有比AB更高的優(yōu)先級(jí),這消除了模糊性。