- 編譯系統透視:圖解編譯原理
- 新設計團隊
- 608字
- 2019-01-04 03:30:31
1.3.1 詞法分析
我們仍用第一節介紹的簡單案例介紹編譯的總體過程。
人眼中看到的源代碼是這樣的:
int fun(int a,int b); 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; }
而它在計算機中存儲的形式如圖1-36所示。

圖1-36 案例程序的十六進制形式
這里看不出關鍵字、運算符、標識符,甚至看不出哪幾個字符屬于同一個符號。編譯的第一階段是詞法分析,目的就是在連續的字符中識別出一個一個的符號,并盡可能地識別出符號的屬性。
人們在看C語言源程序時,借助空格、括號等一眼就可以看出標識符、關鍵字。與人相比,現在計算機的智能還是相當低的,無法像人那樣同時看多個字符,只能依據一個非常機械的“電子版”詞法,一個字符一個字符地識別。“電子版”詞法是將狀態轉換圖的思路融匯在詞法分析器的代碼中得以體現的。詞法分析器從源程序的字符串中識別出一個個符號(token),并按序保存。
詞法分析的結果如圖1-37所示。

圖1-37 詞法分析的結果
在詞法分析階段能夠識別出一些符號的含義,它們包括關鍵字、數字、字符串、分隔符,這些符號的含義不需要其他符號的輔助就能確定本身的含義。比如,“int”一定代表整數類型,它不可能是一個變量名稱,也不可能是一個運算符。
而另外一些符號需要通過前后的其他符號才能確定出準確含義。比如“m”,在詞法階段僅能判斷這是一個標識符,但是如果不對所在的句做分析,就無法得知這個標識符代表一個變量還是一個函數。更多詳細的信息需要對符號所在的句型做分析才能獲得。這部分工作由語法分析來完成。
推薦閱讀
- 深入理解Android(卷I)
- Mastering Entity Framework Core 2.0
- ThinkPHP 5實戰
- 大學計算機基礎實驗教程
- JavaScript Unlocked
- 三維圖形化C++趣味編程
- 跟老齊學Python:輕松入門
- Spring Boot+Spring Cloud+Vue+Element項目實戰:手把手教你開發權限管理系統
- SEO智慧
- 案例式C語言程序設計實驗指導
- RocketMQ實戰與原理解析
- INSTANT Apache ServiceMix How-to
- PHP項目開發全程實錄(第4版)
- Mobile Test Automation with Appium
- Learning PrimeFaces Extensions Development