官术网_书友最值得收藏!

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所示。

其余狀態轉換圖和我們介紹過的狀態轉換圖的構成是一樣的,使用時,都是從起始狀態開始,遇到不同的字符后進入不同的識別狀態,最后識別出符號并進入終態。

主站蜘蛛池模板: 广饶县| 石台县| 明水县| 阿拉善右旗| 靖宇县| 赞皇县| 榆树市| 石屏县| 铜鼓县| 镇平县| 大姚县| 沙田区| 象山县| 库尔勒市| 五家渠市| 滕州市| 唐山市| 衡南县| 佳木斯市| 寿光市| 潞城市| 莎车县| 江川县| 黑龙江省| 镶黄旗| 平舆县| 韶山市| 新昌县| 泌阳县| 安多县| 上思县| 高清| 和龙市| 电白县| 金堂县| 上思县| 东乌珠穆沁旗| 吉水县| 忻城县| 禄丰县| 芜湖县|