程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 深入淺出編譯原理-3-詞法分析器

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

編輯:關於C語言

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

3.1工作流程
上面已經簡單描述了詞法分析器的工作流程,下面是一張圖,更直觀的表示了這個流程:
以一條簡單的c語言的程序塊為例,來展現詞法分析器的過程:

 

3.2內在機制
為了能得到一個符合語言描述的規范的詞素,並沒有想象的那麼簡單“不就是得到一個字符串嘛!”,呵呵,咱們錯了,這是一項艱巨的任務,由下圖標示:

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


1》首先,要確定一個詞素,就是讀到一個字符串和模式匹配,
2》模式由DFA來描述。(DFA:確定的有窮自動機)
3》DFA又可以標示為狀態轉移圖
4》狀態圖又可以通過正則表達式來生成
5》正則表達式是通過語言的文法產生式轉換來的
6》文法產生式,又是由編程語言本身來定義的。

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

3.3小結
詞法分析器的核心,就是找出和模式匹配的詞素。要想知道模式描述,就要把具體的編程語言一般描述,先轉化問文法,然後文法產生式,然後正則表達式,然後狀態轉移圖,然後DFA。
詞素找到了,還要創建符號表,並和詞素的屬性,組成詞法單元,然後組成詞法單元序列,最後把序列傳給語法分析器,生成抽象語法樹,這,就是下一小節打算說的內容。

作者:rill_zhen

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved