編譯原理:文法及其二義性(判定及消除)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈

學編譯原理時,會學到文法,老師在介紹完文法的相關定義后又介紹了文法的二義性,但是沒說到底是如何避免文法的二義性的。

這篇博文就是我的學習結果

文法的二義性:如果文法G中的某個句子存在不只一棵語法樹,則稱該句子是二義性的。如果文法含有二義性的句子,則稱該文法是二義性的。

我舉個例子,來說明文法的二義性及其避免方法:

有下面這個文法:

S - >S and S | S or S | not S | p | q | (S)

那么要是得到 not p and q:

其推導過程如下:都用最左推導

A、S -> not S

? ? ? ? ?-> not S and S

? ? ? ? ?-> not p and S

? ? ? ? ?-> not p and q

B、S -> S and S

? ? ? ? ?-> not S and S

? ? ? ? ?-> not p and S

? ? ? ? ?-> not p and q

顯然這兩個推導過程不同,說明與兩個過程相對應的語法樹也不同,所以,此文法具有二義性

那么怎么修改呢?

這就到了消除二義性的方法了:

1、人為規定其中的“not”,“and”,“or”的優先級

依照此法,可將上述文法修改為:

S -> S or T | T

T -> T and F | F

F -> not F | (E) | p | q

2、第二種方法就是重寫文法

文中的文法例子來源于:如何消除文法的二義性_dianaaaaa的博客-CSDN博客_消除二義性,這個博客是我在尋找方法的時候學習的,但是他寫的沒我的詳細,哈哈!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531104.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言(CED)與long long相關的知識

在寫代碼時,有時int、double定義的變量的范圍遠遠小于題目要求的范圍,那么現在就是使用long long的時候 1、 long long 是C99標準對整型類型做的一個擴展,每個long long類型的變量可以占8字節,每個字節8位,一共64位。…

C語言(CED)對于一個2行N列的走道。現在用1*2,2*2的磚去鋪滿。問有多少種不同的方式(遞歸求解)

又涉及到遞歸問題,這道題的大致內容是這樣的: (請用遞推方式求解)對于一個2行N列的走道。現在用1*2,2*2的磚去鋪滿。問有多少種不同的方式。下圖是一個2行17列的走道的某種鋪法。 提示:觀察前n個結果,可以…

C語言(CED)王老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數(遞歸求解)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 題目大意:王老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數。例如:…

C語言(CED)查找最接近的元素(分治法/二分查找):在一個非降序列中,查找與給定值最接近的元素。(遞歸實現)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 一、題目大意 查找最接近的元素(分治法/二分查找):在一個非降序列中,查找與給定值最接近的元素。…

C語言(CED)輸出前k大的數(分治法/局部快速排序):給定一個數組,統計前k大的數并且把這k個數從大到小輸出。

)輸出前k大的數(分治法/局部快速排序):給定一個數組,統計前k大的數并且把這k個數從大到小輸出。 [輸入] 第一行包含一個整數n,表示數組的大小。 第二行包含n個整數,表示數組的元素,整數之間以一個空格分…

C語言(CED)最長公共子序列----動態規劃第一題

一、動態規劃算法與分治法的異同 相同點: A、二者均是將待求解的問題分成若干子問題來求解。 B、二者在編寫代碼的時候,都要用到遞歸。 不同點: A、分治法求解的問題,在將問題分成若干子問題之后,其子問…

C語言(CED)01背包——動態規劃第二題

一、問題描述 給定n種物品和一個背包。物品i的質量Wi,其價值Vi,背包的容量為c。問如何選擇裝入背包中的物品,使得裝入背包中的物品總價值最大? 二、解題思想 01背包和最長公共子序列都是動態規劃題目中求最優解的問題&#xff0…

C語言(CED)gameboy接餡餅問題

一、題目大意 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。這餡餅別處都不掉,就掉落在他身旁的10米范圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的背包去接。但由…

C語言(CED)遞歸實現漢諾塔問題

一、問題大意 大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,任何時候,在小圓盤上都不能放大圓盤,…

C語言(CED)智力大沖浪——貪心算法第一題

一、題目大意 小偉報名參加中央電視臺的智力大沖浪節目,本次挑戰賽吸引了眾多參賽者,主持人為了表彰大家的勇氣,先獎勵每個參賽者m元。先不要太高興!因為這些錢還不一定都是你的!接下來主持人宣布了比賽規則&#xff…

C語言(CED)鋼條最優切割收益

目錄 一、題目大意 二、大致思路 三、具體實現 一、題目大意 一家公司購買長鋼條,將其切割成短鋼條出售,切割本身沒有成本,長度為i的短鋼條的價格為Pi。那給定一段長度為n的鋼條和一個價格表Pi,求鋼條的切割方案使得收益Rn最大。提示&…

C語言(CED)如何用sort函數根據結構體里的某一屬性進行排序

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 前幾天在編寫代碼的時候,突然要根據結構體的屬性進行從小到大的排序,這即是我寫這篇文章的導火索。 正如大家所知…

撰寫paper時,如何在word里輸入圖片或其他文獻(PDF)里的公式?(更新時間2022.03.01)

我們在寫paper時,經常會遇到在Word里編寫數學公式的問題,其中大多數公式是已經存在的,所以只需要識別、復制、粘貼即可,那么接下來,我就介紹一下“Mathtype”“Mathpix”的方法,分為所需軟件、軟件操作、公…

家里接入某運營商300M寬帶,為何網速還是很慢?(還未裝修房屋的請進來)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 引言:家里接入300M的寬帶,但是自我感覺網速不佳,遂結合所學知識,對此問題進行分析、研究和調察&…

(CED)列指針與行指針的聯系與區別

一、列指針(豎為列) 1、列指針相關定義 列指針:被稱為是指針變量指向二維數組的某個元素 一般使用時會有如下定義: int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代碼定義的指針p,一般按照下表方式指向…

C語言(CED)C語言中雙引號和單引號的區別

最簡單的區別: 在字符型變量賦初值時,用單引號;為字符串變量賦初值時用雙引號! 具體區別: 1、大小 單引號引起的一個字符,其大小為1個Byte。 雙引號引起的字符串,因為在其結尾需加一個二進…

一、Pytho第一課——Python安裝及配置路徑方法(最詳細小白教程,沒有之一。如若不懂,不是還可以私信嘛!對吧?)

目錄 一、下載軟件 二、安裝 三、編輯器 四、在Pycharm上成功運行Python程序(配置Python解釋器) 一、下載軟件 官方下載地址:https://www.python.org/downloads/(打開似乎很吃力,必要時刻“掛燈”) …

二、Python第二課——變量命名規則及字符串變量相關函數

目錄 一、變量命名規則 二、字符串變量及相關函數 1、字符串變量 2、相關函數 最后瑣碎雜物: 1、字符串之間的拼接 2、字符串格式控制(制表符和換行) 一、變量命名規則 正如其他編程語言一樣,程序離不開聲明變量&#x…

三、Python第三課——Python中數字的用法及編碼原則(Python禪意)

目錄 一、Python中的數字 1、整數 2、浮點數 3、整數、浮點數和字符串的聯系和區別 二、編碼原則 1、為代碼增加注釋 2、Python 禪意 A、編碼精美 B、避繁就簡 C、無簡就繁 D、使用常規方法解決問題 E、先有效、再精巧、逐步升華 一、Python中的數字 編程中&#…

四、Python第四課——Python中列表及其操作(增刪改查)

目錄 一、Python中的列表 1、列表的定義和賦值 2、列表的使用 二、列表的“增刪改查” 1、列表中元素的增加 A、在列表尾添加元素 B、在列表中插入元素 2、列表中“元素的刪除” A、使用del語句刪除元素 B、使用pop()函數刪除元素 C、彈出列表中任何位置元素…