1. 程式人生 > >編譯原理_複習筆記1-2章

編譯原理_複習筆記1-2章

第一章&第二章 引論與語法描述介紹

編譯程式:把某一種高階語言程式等價地轉換為另一種低階語言程式(如彙編或機器碼)的程式

描述詞法規則的有效工具是:正規式(r)和有限自動機(DFA)

識別符號是語義概念,名字是語法概念

語法

  • 詞法規則(描述工具:有限自動機):一般包括常數、識別符號、基本字、算符,界符等
  • 語法規則(描述工具:上下文無關文法):通常包括表示式、語句、分程式、過程、函式、程式等

語法規則詞法規則定義了程式的形式結構

最左推導:任何一步 α => ß 都是對α中最左非終結符進行替換

最右推導(規範推導):任何一步 α => ß 都是對α中最右非終結符進行替換,由規範推導所得的句型稱為規範句型

符號表達與概念

  • E:算術表示式
  • i:變數
  • 句型:設有文法G,S是它的開始符號。如 S=*=>α (從文法開始符號開始經過若干步推導推出α:包括一步推出S=>α和多步推出S=+=>α)則α稱是一個句型,這裡α可以是終結符和非終結符組成的串。
  • 句子:僅含終結符的句型是一個句子
  • 語言:文法產生的句子的全體是一個語言(假定G是一個文法,文法G所產生的句子的全體是一個語言,將它記為 L(G)。)
  • 遍(pass):把源文字從頭到尾掃描一遍
  • 開始符(一般用大寫字母表示)是非終結符(就是還能繼續推)
  • 終結符則無法再推
  • 文法的推導說白了就是從句型推到句子,因為句子都是終結符。

文法分類

  • 0型(短語文法,圖靈機),最寬泛:產生式形如 α -> ß,α ∈ (Vt ∪ Vn)^* 且至少含有一個非終結符(一說 α 只需含有1-2個非終結符); ß ∈ (Vt ∪ Vn)^*
  • 1型(上下文無關文法,線性界限自動機),只要左邊比右邊短:產生式形如 α -> ß, |α| ≤ |ß|, 僅 S -> ℇ 例外
    • 在0型基礎上要求 α長度(|α|) ≤ ß長度(|ß|)
    • 是0型文法的特例
  • 2型(上下文無關文法,非確定下推自動機),左邊更短,只有一個非終結符:產生式形如 A -> ß,A ∈ Vn(即左邊一定是一個非終結符),ß ∈ (Vt ∪ Vn)^*(表示終結符和非終結符組成的閉包,即右邊可以是終結符和非終結符組成的任意長度
    的串)
    • 左邊只能是非終結符(大寫字母)
    • 右邊是終結符和非終結符組成的串
    • 是1型文法的特例
  • 3型(正規文法,有限自動機),不僅左邊只有一個非終結符,右邊【要麼是一個終結符一個非終結符】、【要麼是一個非終結符一個終結符】或【只有一個終結符】
    • 之所以由αB和Bα兩種,是因為分右線性非終結符在右邊終結符在左邊)和左線性文法(非終結符在左邊終結符在右邊
    • 產生式形如 A -> αB 或 A -> Bα 或 A -> α, α ∈ Vt^*, A、B ∈ Vn
    • 說白了就是等號右邊長度在[1, 2]之間,長度是1的時候就必須是終結符,長度是2的時候可以有一個非終結符一個終結符,不能有串。有串就退化成2型文法了。
    • 比如E = E * E就不是3型文法,右邊長度為3了!

現今程式設計語言的語言結構,用上下文無關文法描述就足夠了。做編譯器要用到的兩種文法:2型和3型。2型文法是第4章語法分析時要用的:即文法識別的時候用的是非確定的下推自動機,做語法分析。3型文法可以用來做詞法分析,比2型文法限制更多,是2型文法的特例。

規定V^0 = {ℇ},令 V^* = V^0 ∪ V^1 ∪ V^2 ∪ V^3 ∪ … 稱 V^* 是 V 的閉包;

記 V^+ = VV^* ,稱V^+是V的正規閉包。

用一張圖表示一個句型的推導,稱為語法樹。如果一個文法存在某個句子對應兩顆不同的語法樹,則說這個文法是二義的。

語言的二義性:一個語言是二義性的,如果對它不存在無二義性的文法。

visitor tracker
訪客追蹤外掛

相關推薦

編譯原理_複習筆記1-2

第一章&第二章 引論與語法描述介紹 編譯程式:把某一種高階語言程式等價地轉換為另一種低階語言程式(如彙編或機器碼)的程式 描述詞法規則的有效工具是:正規式(r)和有限自動機(DFA) 識別符號是語義概念,名字是語法概念 語法 詞法規則(描述工

Stanford公開課《編譯原理》學習筆記(1~4課)

目錄 一. 編譯的基本流程 二. Lexical Analysis(詞法分析階段) 2.1 Lexical Specification(分詞原則) 2.2 Finite Automata (典型分詞演算法-有

Stanford公開課《編譯原理》學習筆記2)遞迴下降法

目錄 一. Parse階段 CFG Recursive Descent(遞迴下降遍歷) 二. 遞迴下降遍歷 2.1 預備知識 2.2 多行語句的處理思路

《從0到1》讀書筆記2"像1999 年那樣狂歡"第1記:小結及詞匯解析

content 高新 1.8 匯率 穩定 盈利模式 fun csdn 外匯 小結 本章的目的應該是通過90年代末的互聯網泡沫的背景,成因。影響,以及教訓來教誡人們,在全部人都瘋狂的拋身於洪流熱潮之中時,我們要冷靜的思考辨識出那些不切實際的大眾觀點,

Python編程入門到實踐 - 筆記1,2

python編程 python入門 自學 Python 有段時間了,總是覺得自己基礎不牢,想著把看完的兩本基礎書寫個博客做個筆記啥的。準備在重新看一遍《Python編程入門到實踐》,堅持寫博客筆記。Python編程入門到實踐的前兩章筆記,學習的內容如下:查看當前環境中的 python 版本python

Python學習筆記__4.1.2 filter

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記1、概覽Python內建的filter()函數用於過濾序列和map()類似,filter()也接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定

Hadoop權威指南-大資料的儲存與分析第四版——學習筆記——第2——1

MapReduce 適合處理半結構化的資料 MapReduce任務階段 Map階段+Reduce階段 Key-Value作為輸入輸出 實現兩個函式:map(),reduce() Map階段 輸入的Key:文字中的偏移量 輸入的value:文字 輸出的k-v給reduce處

《Linux系統編程手冊》讀書筆記——第2基本概念

守護 setenv 代碼 不存在 export 層級 用途 運行時 創建 操作系統的核心--內核 內核的職責 進程調度:Linux屬於搶占式多任務操作系統,多個進程可同時駐留於內存,且每個進程都能獲得對CPU的使用權。哪些進程獲得對CPU的使用,以及每個進程能使用多長時間

網路文件共享服務原理_學習筆記

block pass 打開 設計 china 自己 project 發送數據 方案 實際需求和局域網內解決方案 SMABNFSFTP DAS NAS SAN 1、FTP 協議(File Transfer Protocol 文件傳輸協議) FTP報文格式 FTP有2種工作模

【大話存儲II】學習筆記2), SSD

ssd 中一 logs 什麽是 直接 範圍 平衡 機械 ive 我們知道機械硬盤最大的缺點在於,尋道時間比較長,也就是不適合隨機小塊IO。所以這幾年固態存儲大行其道,因為它對任何地址訪問的開銷都相等,節省了機械尋道時間,所以隨機IO性能很好。 當前的SSD硬盤,單塊SSD的

讀書筆記——1.2.16

開發 想是 如果 專業 意義 說明 一起 關於 AD   首先是第一章,書中例舉出了從小孩玩的紙飛機,到“飛屋”,到萊特兄弟的飛機最後到我們看到的飛機。我想到的是,有的人從興趣出發,覺得某些項目也好,工程也好,需要去實現。有的人放棄了,止步於紙飛機,有的人堅持了,做出了航模

Python學習筆記__3.2 叠代

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記1、概覽如果給定一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們稱為叠代(Iteration)。當然,不止 list 和 tuple 可以叠代。只要是可叠代對象,無論有無下標,都

Python學習筆記__2.2 定義函數

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記1、定義函數定義一個函數需要有函數名、參數、函數體。函數體中最好還有 傳入的參數判斷 1.1、函數創建定義一個函數用def,數據類型檢查用isinstance。例子如下:def my_abs(x): if not

Python學習筆記__4.2 返回函數

編程語言 python # 這是學習廖雪峰老師python教程的學習筆記1、函數作為返回值高階函數除了可以接受函數作為參數外,還可以把函數作為結果值返回。# 累加函數def external(*args): def internal(): ax = 0 for n i

Python學習筆記__8.2 調試

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記1、概覽如何在程序出錯時,知道哪些變量的值是正確的,哪些變量的值是錯誤的。1.1、print()用print()把可能有問題的變量打印出來def foo(s): n = int(s) print('>&g

Python學習筆記__9.2 StringIO 和 BytesIO

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記很多時候,數據讀寫不一定是文件,也可以在內存中讀寫。1、StringIOStringIO顧名思義就是在內存中讀寫str。1.1、寫入StringIO要把str寫入StringIO,我們需要先創建一個StringIO,然後,像文件一

Python學習筆記__10.2 多線程

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記1、概覽多任務可以由多進程完成,也可以由一個進程內的多線程完成。進程是由若幹線程組成的,一個進程至少有一個線程。由於線程是操作系統直接支持的執行單元,因此,高級語言通常都內置多線程的支持,Python也不例外,並且,Python的

Python學習筆記__12.2collections

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記collections是Python內建的一個集合模塊,提供了許多有用的集合類。1、namedtuplenamedtuple是一個函數,它用來創建一個自定義的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來

Python學習筆記__13.2 requests

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記相比於Python內置的urllib模塊,使用requests可以更好地處理URL資源。1、使用requests 1)通過GET訪問一個頁面>>> import requests>>> r

Python學習筆記__16.2 TCP編程

編程語言 Python # 這是學習廖雪峰老師python教程的學習筆記Socket是網絡編程的一個抽象概念。通常我們用一個Socket表示“打開了一個網絡鏈接”,而打開一個Socket需要知道目標計算機的IP地址和端口號,再指定協議類型即可。1、客戶端大多數連接都是可靠的TCP連接。創建TCP連接時