詞法規則:合法單詞的構成規則,也就是如何從字母表中選擇字元構成乙個合法單詞
語法規則:合法程式的構成規則,也就是如何把各個單詞符號組成更大的語法單位
高階語言的一般特性:1.表示式的形式(字首,中綴,字尾)
2.表示式中的運算子(算數,關係,邏輯;優先順序,結合性)其中優先順序和結合性是消除文法二義性
3.運算子的代數性質(決定了在優化的過程中應採取的優化策略)
最左推導和最右推導
所謂最左推導就是對推導的每一步中都對最左非終結符進行替換。
所謂最右推導就是對推導的每一步中都對最右非終結符進行替換。
語法分析樹與二義性
如果乙個文法存在某個句子對應兩棵不同的語法樹,則稱這個文法是二義的。
也就是說,若乙個文法存在某個句子,它有兩個不同的最左(最右)推導,則這個文法是法是二義的
語法分析樹的意義:
一顆語法分析樹表示了乙個句型種種可能的(但是未必是全部可能)的推導過程,包括最左和最右推導。那麼乙個句型是否只有一棵語法分析樹和乙個唯一最左最右推導呢,其實不然。可能有的句型存在多個語法分析樹,這樣的句型叫做二義性文法。已經可以證明的是,二義性文法是不可判定的。
文法二義性的幾個問題
文法二義不等於語言二義
文法的二義性是不可判定的
文法的二義性證明:找出乙個句子,它有兩個不同的最左推導或最右推導
文法二義性的消除:給每個產生式定義優先順序
上下文無關文法的幾點限制:
(1)文法中不含任何下面形式的產生式: p→p因為這種產生式除了產生二義性外沒有任何用處。
(2)每個非終結符p必須有用處。
這一方面意味著,必須存在含p的句型;也就是,從開始符號出發,存在推導 s*p.
另一方面意味著,必須存在終結符串vt*,使得p+;也就是,對於p不存在永不終結的迴路。
總結:用高階語言比低階語言程式設計來的方便,但計算機是怎麼懂得獲得高階語言這就需要源程式到目標程式的轉化,這也是我們學習編譯原理的目的,構造乙個編譯程式,要去理解語言的語法規則和語義規則是採用什麼理論構成的,現在剛開始學語法描述,理解了一部分語法規則,這是本章的基礎要學好。
編譯技術基礎 (二)高階語言及其語法描述
語法 語法是指一組可以形成和產生合式程式的規則,包括詞法規則和語法規則兩部分。詞法規則,指單詞符號的形成規則 語法規則,指語法單位的形成規則 語義 一組可以定義程式意義的規則,這些規則稱為語義規則 文法的分類 0型文法 也稱為短語文法,指的是p中每個產生式 的左部 中至少含有乙個非終結符的文法。0型...
C語言及程式設計高階例程 24 查詢問題及其求解
賀老師教學鏈結 c語言及程式設計高階 本課講解 順序查詢 include define size 10 int main 也可以通過鍵盤輸入等方式給出資料 int i int key key表示待查詢資料 int index 1 用index表示查詢結果 關鍵字key出現的位置 printf inp...
C語言及程式設計高階例程 24 查詢問題及其求解
賀老師教學鏈結 c語言及程式設計高階 本課講解 順序查詢 include define size 10 int main 也可以通過鍵盤輸入等方式給出資料 int i int key key表示待查詢資料 int index 1 用index表示查詢結果 關鍵字key出現的位置 printf inp...