1. 梳理第二章的內容,寫一篇理解與總結。
(1)文法是對語言結構定義與描述,即從形式上描述和規定語言結構,也稱語法
(2)語法規則通過一組規則(產生式),來描述句子的語法結構
(3)處理文法的語法分析器大體上可以分為三種型別:通用的,自頂向下的和自頂向上的。
(4)文法:一種用於描述程式語言語法的表示方法——「上下文無關文法」,簡稱「文法」。
(5).乙個上下文無關文法(文法)有四個元素組成:
文法g可以抽象成四元組的形式:g=(vn,vt,p,s)
其中vn表示非終結符集,vt表示終結符集,p表示產生式集,s表示開始符號。
① 乙個終結符號集合,也稱為詞法單元。是組成串的基本符號。
② 乙個非終結符號集合,也稱為語法變數。是表示串的集合的語法變數。
③ 乙個開始符號。這個符號表示的串集合就是這個方法生成的語言。
④ 乙個產生式集合。描述了將終結符號和非終結符號組合成串的方法。有三個元素組
成:1) 乙個被稱為產生式頭或左部的非終結符號這個產生式定義了這個頭所代表的串集合的一部分。
2) 符號→。
3) 乙個由零個或多個終結符號或非終結符號組成的右部或產生式體。右部中的成分描述了左部的非終結符號所對應的串的某種構造方法。
(6)文法g描述的語言用l(g)表示l(g)=
其中s是文法g的開始符號,我們可以說w是g的乙個句型。因此乙個終結符號串w在g生成的語言l(g)中,當且僅當w是g的乙個句子。可以由文法生成的語言被稱為上下文無關語言。
句型:乙個句型可能既包含終結符號又包含非終結符號,也可能是空串。
句子:是乙個不包含非終結符號的句型。
語言:乙個文法生成的語言是它所有句子的集合。
文法等價:如果兩個文法生成相同語言,這兩個文法就被稱為是等價的。
(7)最左推導:總是選擇每個句型的最左非終結符號。逆過程為最右規約。
最右推導:總是選擇每個句型的最右非終結符號,也稱為規範推導。逆過程為最左規約。
例:文法:
s--->ab
a--->a|t
b---->+cd
c--->a
d---->a
最右推導:
s--->ab---->a+cd--->a+ca---->a+aa----->a+aa
最左推導:
s---->ab----->ab--->a+cd--->a+ad----->a+aa
(8)上下文無關文法及其語法樹:
(9).文法的二義性:如果乙個文法可以為某個句子生成多棵語法分析樹,那麼它就是二義性的。換句話說,二義性文法就是對同乙個句子有多個最左推導或多個最右推導的文法。
造成二義性的原因是:文法中沒有體現出結合率和優先順序。
文法的二義性和語言的二義性:
若乙個文法存在某個句子對應兩棵不同的語法樹,則稱這個文法是二義的
或者,若乙個文法存在某個句子有兩個不同的最左(右)推導,則稱這個文法是二義的
判定任給的乙個上下文無關文法是否二義,或它是否產生乙個先天二義的上下文無關語言,這兩個問題是遞迴不可解的,但可以為無二義性尋找一組充分條件
文法的二義性和語言的二義性是不同的概念。因為可能有兩個不同的文法g和g』滿足l(g)=l(g』),其中g是二義的,g』是無二義的。
如果產生上下文無關語言的每乙個文法都是二義的,則說此語言是先天二義的。
2. 嘗試寫出pl/0 語言的文法。(或者你認為比較好的語言規則)
整數n 整數
n>::=int <
識別符號n>=<
無符號整數
>|<
有符號整數
>
;識別符號i 識別符號
i>::=
無類 | 字 | 整 | 浮點;
表示式e 表示式
> ::= [+ | -] <
語::= | 復合語 | 表示式語 | 選擇語 | 迴圈語 |跳轉語
表示式語 →::=
表示式;>
選擇語 ::=< if(表示式)語 | < if(表示式)語句 > < else 語
迴圈語 ::=< while(表示式)語 | < for(表示式語句表示式語句)語 | < for(表示式語句表示式語句表示式)語
跳轉語::= | |
| | 表示式; >
條件語句::=邏輯『或』表達 | 邏輯『或』表示式?> 表示式:> 條件表達
賦值語句 ::=識別符號
>=<
無符號整數
>|<
有符號整數
>
;復合語句
> ::= begin <
語 end
函式::= 資料型別
> <
標識(形式引數
...)
::= <
分程
第四次作業
扎ogu 典型產品 最高傳輸速率 ieee 802.11a wi fi5 802.11a 43m 450 zyxel p334u 54mbps 1500 zyxel p335u 54mbps 1600 ieee 802.11b d link di 624 a 54mbps 215 linksys w...
第四次作業
作業題一 vs2012 rc在介面上,比beta版更容易使用,彩色的圖示和按照開發 執行 除錯等環境區分的顏色方案讓人愛不釋手。vs2012整合了asp.net mvc 4,全面支援移動和html5,wf 4.5相比wf 4,更加成熟,期待已久的狀態極工作流回來了,更棒的是,現在它的設計器已經支援c...
第四次作業
專案一求1000以內所有偶數的和 includevoid main cout sum includevoid main while i 1000 cout sum includeint main while i 1001 cout 專案3 乘法口訣表 程式設計序,輸出乙個乘法口訣表,形如 1x1 1...