- 編譯系統透視:圖解編譯原理
- 新設計團隊
- 589字
- 2019-01-04 03:30:36
2.3.2 依托狀態轉換圖展現詞法分析過程
下面我們把前面的詞法分析過程映射到狀態轉換圖中。符號“int”的識別如圖2-28~圖2-32所示。

圖2-28 進入起始狀態準備識別符號

圖2-29 進入識別到字母的狀態

圖2-30 繼續處于識別字母的狀態

圖2-31 繼續處于識別字母的狀態

圖2-32 識別到空格并進入終態
繼續往后遍歷,識別到“(”后,符號“fun”被識別出來,如圖2-33和圖2-34所示。

圖2-33 識別到“(”后進入終態

圖2-34 回到起始狀態準備繼續識別
下面還是識別到“(”,如圖2-35所示。

圖2-35 進入識別出“(”的狀態
從狀態轉換圖中我們看到,每次的起始位置都是上一個符號的終結之后,這也是為什么每個導致終結的字符都會被重新分析一遍。它的第二次分析屬于新的起始。
識別其他標識符在狀態圖上的情景與“int”、“fun”、“(”類似,下面我們看一下“=”和數字“10”的識別情景。
先看“=”的識別,識別到字符“=”后無法判斷是“=”還是“==”,還得繼續向后遍歷,如圖2-36和圖2-37所示。

圖2-36 進入識別出“=”的狀態

圖2-37 識別出符號“=”并進入終態
識別到“1”后,可以確定就是“=”了。再看“10”的識別,如圖2-38至圖2-40所示。

圖2-38 進入識別到數字的狀態

圖2-39 不斷處于識別到數字的狀態

圖2-40 識別出符號“10”并進入終態
識別到“;”,最終確定了“10”這個符號,如圖2-40所示。
其余狀態轉換圖和我們介紹過的狀態轉換圖的構成是一樣的,使用時,都是從起始狀態開始,遇到不同的字符后進入不同的識別狀態,最后識別出符號并進入終態。
推薦閱讀
- 自己動手寫搜索引擎
- C# 2012程序設計實踐教程 (清華電腦學堂)
- Cocos2d-x游戲開發:手把手教你Lua語言的編程方法
- AngularJS Web Application Development Blueprints
- Android 9 Development Cookbook(Third Edition)
- Visual Basic程序設計(第3版):學習指導與練習
- Spring Cloud、Nginx高并發核心編程
- 微信小程序入門指南
- 匯編語言編程基礎:基于LoongArch
- Geospatial Development By Example with Python
- Microsoft 365 Certified Fundamentals MS-900 Exam Guide
- Serverless Web Applications with React and Firebase
- 監控的藝術:云原生時代的監控框架
- 深度學習程序設計實戰
- Clojure Polymorphism