深入淺出編譯原理 3 詞法分析器

2021-06-07 12:06:53 字數 1153 閱讀 4253

引言

編譯器的工作的開始,就是讀入原始碼(預編譯先不考慮),然後,去除一些空字元,然後經過詞素匹配,並和其屬性(可選),組成乙個的詞法單元,多個詞法單元,連線成詞法單元序列。自此,此法分析器的工作就算完成了。呵呵,就這麼簡單。可見,找到乙個詞素,是詞法分析器的核心工作,那,如何獲得乙個詞素呢?就是本節要討論的主要內容。

3.1工作流程

上面已經簡單描述了詞法分析器的工作流程,下面是一張圖,更直觀的表示了這個流程:

以一條簡單的c語言的程式塊為例,來展現詞法分析器的過程:

3.2內在機制

為了能得到乙個符合語言描述的規範的詞素,並沒有想象的那麼簡單「不就是得到乙個字串嘛!」,呵呵,咱們錯了,這是一項艱鉅的任務,由下圖標示:

下面是此法分析器的內在機制一張圖:

1》首先,要確定乙個詞素,就是讀到乙個字串和模式匹配,

2》模式由dfa來描述。(dfa:確定的有窮自動機)

3》dfa又可以標示為狀態轉移圖

4》狀態圖又可以通過正規表示式來生成

5》正規表示式是通過語言的文法產生式轉換來的

6》文法產生式,又是由程式語言本身來定義的。

需要說的是,編譯原理是比較複雜的,要知道dfa,就要學習離散數學;要知道狀態圖,就要知道『圖』,就是要學習資料結構;還要會正規表示式;還要會程式語言,等等,這些都要有所涉獵。所以編譯原理的學習,稍微有點難度,遇到乙個概念,就要學習這個概念對應的知識點。況且,這只是詞法分析器,後面還有語法分析器,**優化演算法,計算機的體系結構方面的知識。不過不要灰心,只要靜下心來,慢慢來,可能學完之後,咱們可能並不能自己去寫乙個編譯器,但是,我想,對於自己寫**優化方面,ic設計方面,一定會有所幫助。

3.3小結

詞法分析器的核心,就是找出和模式匹配的詞素。要想知道模式描述,就要把具體的程式語言一般描述,先轉化問文法,然後文法產生式,然後正規表示式,然後狀態轉移圖,然後dfa。

詞素找到了,還要建立符號表,並和詞素的屬性,組成詞法單元,然後組成詞法單元序列,最後把序列傳給語法分析器,生成抽象語法樹,這,就是下一小節打算說的內容。

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理,例 詞法分析器

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...

編譯原理(一)詞法分析器

詞法分析器的功能是輸入源程式,輸出單詞符號。單詞符號是乙個程式語言的基本語法符號。程式語言的符號一般可以定義為以下幾種 關鍵字 是由程式語言定義的具有固定意義的識別符號,也稱這些識別符號為保留字或基本字。例如 c 語言中的define do for while if else等 識別符號用來表示各種...