1. 梳理第二章的內容,寫一篇理解與總結。html
答:第二章內容有7小節,分別是:算法
(1)文法的直觀概念 (2)符號和符號串 (3)文法和語言的形式定義 (4)文法的類型函數
(5)上下文無關文法及其語法樹 (6)句型的分析 (7)有關文法實際應用的一些說明.net
在文法的概念中咱們能夠知道,文法是描述語言規則的形式規則。即由一些符號組成的一個有含義的句子的規則或協議。其中,使用EBNF來表示這種句子的構成規則,一般是按照一組規則去推導或者產生句子,好比「我是大學生」,按照了EBNF中的<句子> : : = <主語> <謂語>、<主語> : : = <代詞> <名詞>、<代詞> : : = 我 | 你 | 他 等來表示產生的過程。debug
文法中最經常使用的是上下文無關文法,即不關聯上下文就可以推導出結果的過程。其中,想要造成上下文無關文法,還須要「配件」的組成。在文法中,字母是源頭「配件」,由字母造成的各式各樣的表達式可以推導出最後的規則。接下來詳細說明我所理解的文法。字母是符號的集合,語言是字符串的集合,符號能夠隨機組合成字符串,字符串表明的單詞符號能夠進而造成表達式,語句又由表達式構成,最後在程序中做爲程序塊將完整程序展現出來。以下圖所示:htm
流程圖中的「單詞符號——>表達式——>語句——>程序塊——>程序」即上下文無關文法。實用型文法,不須要上下文關聯就可以推導出最後的結果。對象
規範上來講,文法G定義爲四元組(VN, VT, P, S)。其中,VN爲非終結符(或語法實體、或變量);VT爲終結符集;P爲規則的集合,即由一開始的推導一直推導n次以後產生的規則,且當中至少包含一個非終結符。VN、VT和P都是非空有窮的集合。S是開始符,也是一個非終結符,至少有一條規則的左部要出現它。blog
在前面我寫了上下文無關文法,其實這只是文法類型當中的一種,也是最容易、最省時的文法,由於不須要與上下文掛鉤便可進行文法規則推導。文法類型還包括了0型文法(也稱爲短文法)、1型文法(上下文有關的)、2型文法(上下文無關的)以及3型文法(正規文法)。須要明確的是,2型文法並不能說是3型文法,但3型文法倒是2型文法。字符串
在文法中,若是想要直觀分析推導出結果,那麼語法樹是必不可少的對象。語法樹又稱爲分析樹,顧名思義是用於文法中起分析做用的。在推導過程產生的圖形,即爲語法樹。文法分爲無二義文法和二義文法,判讀的依據便在語法樹上。語法樹能夠是使用最左推導推導出來的,也能夠是使用最右推導推導出來的。若是一個文法存在某個句子對應兩棵不一樣的語法樹,則說這個文法是二義的。或者說。若一個文法中存在某個句子,它有兩個不一樣的最左(最右)推導,則這個文法是二義的。須要注意的是,文法的二義與語言的二義是不相同的。get
在語言的編譯實現中,把完成句型分析的程序稱爲分析程序或識別程序,分析算法又稱爲識別算法。分析算法能夠分爲自頂向下的和自底向上的。在分析算法中,短語、直接短語以及句柄是很是重要的知識點。簡單來講,一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語。若是子樹中再也不包含其餘的子樹,即A只能推導出b,而b不能再推出其餘的式子,則b爲此句型的直接短語。直接短語中的最左直接短語爲該句型的句柄。
總結:文法的產生式以及整哥推導過程都符合以及聽從某些規則來進行,所以,掌握好文法的各個關鍵點尤其重要。不只須要知道文法的概念,還須要挖掘出文法包含了什麼,表明着什麼,裏面產生式推導出來的結果具備怎樣的意義。
2. 嘗試寫出PL/0 語言的文法。(或者你認爲比較好的語言規則)
整數n
標識符i
表達式e
條件語句
賦值語句
複合語句
函數
程序
...
答:整數n :<n>::=<id>=<integer>
標識符i:<i>::=var<id>{,<id>};
表達式e:<e>::=[+ | -]<項>{<加減運算符><項>}
條件語句:<條件>::=<表達式><關係運算符><表達式>|odd<表達式>
賦值語句:<賦值語句>::=<id>:=<表達式>
複合語句:<複合語句>::=begin<語句>{;<語句>}end
函數:<函數>::=procedure<id>;
程序:<程序>::=<分程序>.
…
參考資料:https://www.cnblogs.com/yuxiuyan/p/7627371.html?utm_source=debugrun&utm_medium=referral