在上一篇文章中,大致介紹了下編譯過程。從這篇文章開始,我們就開始逐步慢慢深入的學習編譯過程中的步驟。今天我們就來具體看看詞法分析到底是怎麼回事。
========================華麗麗的分割線============================================
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語言來說,可用使用如下狀態圖來切分符號,提取出標識符、數字、符號等。
一句話總結:詞法分析就是根據輸入的一連串數據,根據語言特性,切分出有用的標識符、符號等信息,爲下一步語法分析做準備。