C語言解譯器的實現–詞法分析(二)

來源:互聯網
上載者:User

  上一篇:C語言解譯器的實現--儲存結構(一)

  詞法分析是編譯原理中最容易理解的,就算沒有瞭解過編譯原理,也能寫出一個詞法分析器。我們不用理解Regex,不用理解狀態機器原理,就可以輕鬆的完成詞法的分析。
  這裡首先介紹下自頂向下的解析過程,所謂的自頂向下,按我的理解,就是從一個大的集合解析到小的集合。例如:解析一個檔案,那麼進入檔案,解析一個函數,進入一個函數,解析局部變數,解析運算式,進入運算式,解析變數、常量等等,最終完成一個C檔案的解析過程。整個過程,其實就是一個猜測的過程。但是這個過程中,我們必須依賴於檔案中的每個詞(token),token可以看成是解析過程中的一個單位。
  例如:
  1. 關鍵詞有:int char double long for while ......
  2. 運算子有:+ - * / ......
  3. 數字常量:12 0x34 3.45
  4. 字串  :"hello"
  ...
  等等.
 
  那麼我們必須實現一個函數get_token,執行這個函數,我們擷取檔案中的一個token。例如現在一個C檔案:
  int main(int agrc, char **argv ){
      return 0;
  }
  
  那麼多次執行get_token,分別得到的token為:
  int
  main
  (           <----③
  int
  argc
  ...
  ...
  
  除了一個get_token函數外,還需要一個叫做put_back的函數,因為指令碼解析是一個猜測的過程。有時候我們必須知道下一個的token是什麼,才能判斷該走哪個分支。還是上面的例子,在③的地方,我們得到了"(",所以知道main是一個函數,那麼如果該token不是"(", 而是"=", 我們知道它不是一個函數,而是一個基本的變數定義,並且需要初始化。那麼我們必須調用put_back函數,把該token重新放到緩衝中,使得下次get_token的時候,還會拿到這個token,而不是下個token。
  至於get_token和put_back函數如何?,我就不多說了。我使用了最笨的方法,無非就是每個字元一個一個的向後掃描,判斷是該返回什麼標示。每個token被分為各種類型token_type:
  enum tok_types{ DELIMITER = 1, IDENTIFIER, KEYWORD, TEMP, STRING, CHARACTOR, NUMBER, TYPE, BLOCK, PRECOMPILE };
  類型           意義               例如
  -----------------------------------------------------------------------------
  DELIMITER      標示分隔字元         ; | + -
  IDENTIFIER     標示ID標示符       var hello
  KEYWORD        關鍵字             int char while do
  STRING         字串             "string"
  CHARACTOR      字元               'c'
  NUMBER         數字常量           123 012 0x34
  TYPE           類型               typedef int int32;   那麼int32就被標示為TYPE
  BLOCK          塊標誌             { }
  PRECOMPILE     先行編譯行           #define
  TEMP           保留              
  詞法分析的目的就是掃描源碼,區分出這些類型,變返回該token。供解譯器的其他模組使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.