1. 程式人生 > >編譯原理-1-詞法分析

編譯原理-1-詞法分析

上一篇文章中,大致介紹了下編譯過程。從這篇文章開始,我們就開始逐步慢慢深入的學習編譯過程中的步驟。今天我們就來具體看看詞法分析到底是怎麼回事。

========================華麗麗的分割線============================================

int fun(int a,int c);
int m=10;
int main()
{
    int i=4;
    int j=5;
    m = fun(i,j);
    return 0;
}

int fun(int a,int b)
{
    int c=0;
    c=a+b;
    return c;
}
  對於如上原始碼,在計算機上儲存的形式與如上我們看到的形式不同,以16進位制形式展現的話,上述c語言程式碼看上去就是:
   696E742066756E28696E7420612C696E
   742063293B0D0A696E74206D3D31303B
   0D0A696E74206D61696E28290D0A7B0D
   0A20202020696E7420693D343B0D0A20
   202020696E74206A3D353B0D0A202020
   206D203D2066756E28692C6A293B0D0A
   2020202072657475726E20303B0D0A7D
   0D0A0D0A696E742066756E28696E7420
   612C696E742062290D0A7B0D0A202020
   20696E7420633D303B0D0A2020202063
   3D612B623B0D0A202020207265747572
   6E20633B0D0A7D
   看到上述的一連串數字,心裡肯定想:這TM啥玩意?給個提示:想到了ASCII碼錶了麼?明白了吧。

    好,咱們現在就根本ASCII碼錶,來翻譯上述一連串數字到底是啥玩意:

 69  6E   74  20    66  75   6E  28  69  6E  74  20   61  2C  69    6E

   i      n      t    空格   f    u      n     (     i      n     t   空格 a      ,        i      n

   74    20     63   29  3B  0A  69   6E   74  20   6D   3D   31   30  3B

    t    空格    b     )       ;    \n       i     n     t   空格   m     =      1     0      ;

    ……

  根據不同語言的要求,遍歷一連串數字,切分出符號並提取出資訊。

例如對於c語言來說,可用使用如下狀態圖來切分符號,提取出識別符號、數字、符號等。


     一句話總結:詞法分析就是根據輸入的一連串資料,根據語言特性,切分出有用的識別符號、符號等資訊,為下一步語法分析做準備。