編譯原理-1-詞法分析
阿新 • • 發佈:2019-02-01
在上一篇文章中,大致介紹了下編譯過程。從這篇文章開始,我們就開始逐步慢慢深入的學習編譯過程中的步驟。今天我們就來具體看看詞法分析到底是怎麼回事。
========================華麗麗的分割線============================================
對於如上原始碼,在計算機上儲存的形式與如上我們看到的形式不同,以16進位制形式展現的話,上述c語言程式碼看上去就是: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; }
看到上述的一連串數字,心裡肯定想:這TM啥玩意?給個提示:想到了ASCII碼錶了麼?明白了吧。696E742066756E28696E7420612C696E 742063293B0D0A696E74206D3D31303B 0D0A696E74206D61696E28290D0A7B0D 0A20202020696E7420693D343B0D0A20 202020696E74206A3D353B0D0A202020 206D203D2066756E28692C6A293B0D0A 2020202072657475726E20303B0D0A7D 0D0A0D0A696E742066756E28696E7420 612C696E742062290D0A7B0D0A202020 20696E7420633D303B0D0A2020202063 3D612B623B0D0A202020207265747572 6E20633B0D0A7D
好,咱們現在就根本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語言來說,可用使用如下狀態圖來切分符號,提取出識別符號、數字、符號等。
一句話總結:詞法分析就是根據輸入的一連串資料,根據語言特性,切分出有用的識別符號、符號等資訊,為下一步語法分析做準備。