- 編譯系統(tǒng)透視:圖解編譯原理
- 新設(shè)計(jì)團(tuán)隊(duì)
- 509字
- 2019-01-04 03:30:35
2.3 狀態(tài)轉(zhuǎn)換圖
2.3.1 狀態(tài)轉(zhuǎn)換圖總體介紹
詞法分析的過(guò)程是根據(jù)C語(yǔ)言的詞法規(guī)則進(jìn)行的,為了指導(dǎo)詞法分析器的程序設(shè)計(jì),需要形式化地表達(dá)C語(yǔ)言的詞法規(guī)則。下面我們用狀態(tài)轉(zhuǎn)換圖的形式來(lái)展現(xiàn)這個(gè)案例程序能用到的詞法規(guī)則,如圖2-19所示。

圖2-19 前面介紹內(nèi)容所涉及的狀態(tài)轉(zhuǎn)換圖
圖2-19是一個(gè)完整的轉(zhuǎn)換圖,我們來(lái)看詞法分析的每個(gè)步驟在轉(zhuǎn)換圖上對(duì)應(yīng)的狀態(tài)。
首先是起始狀態(tài),即我們前面所介紹的計(jì)算機(jī)準(zhǔn)備識(shí)別下一個(gè)符號(hào)的狀態(tài),如圖2-20所示。

圖2-20 狀態(tài)轉(zhuǎn)換圖處于起始狀態(tài)
我們以標(biāo)識(shí)符符號(hào)的識(shí)別為例,只要識(shí)別到字母、數(shù)字或下劃線,就進(jìn)入標(biāo)識(shí)符識(shí)別狀態(tài),情景如圖2-21所示。

圖2-21 識(shí)別到字母或下劃線的狀態(tài)
之后,只要遇到字母、數(shù)字或下劃線,就仍然在這個(gè)狀態(tài)中進(jìn)行識(shí)別,情景如圖2-22所示。

圖2-22 不斷識(shí)別到字母、數(shù)字或下劃線的狀態(tài)
直到條件不再符合,就進(jìn)入終態(tài),表示此標(biāo)識(shí)符已經(jīng)識(shí)別完畢,情景如圖2-23所示。

圖2-23 進(jìn)入終態(tài)并確定符號(hào)為標(biāo)識(shí)符
然后從起始狀態(tài)開(kāi)始準(zhǔn)備識(shí)別下一個(gè)符號(hào),情景如圖2-24所示。

圖2-24 重新回到起始狀態(tài)
下一個(gè)字符可能是數(shù)字、分隔符或運(yùn)算符。如果是數(shù)字,情景如圖2-25所示。

圖2-25 識(shí)別到數(shù)字的狀態(tài)
如果是分隔符,情景如圖2-26所示。

圖2-26 識(shí)別到“,”的狀態(tài)
如果是運(yùn)算符,情景如圖2-27所示。

圖2-27 識(shí)別到“=”的狀態(tài)
- Data Visualization with D3 4.x Cookbook(Second Edition)
- R語(yǔ)言數(shù)據(jù)分析從入門(mén)到精通
- Python數(shù)據(jù)分析入門(mén)與實(shí)戰(zhàn)
- DevOps for Networking
- 程序員面試筆試寶典
- Unity 2020 Mobile Game Development
- C語(yǔ)言程序設(shè)計(jì)立體化案例教程
- 從學(xué)徒到高手:汽車(chē)電路識(shí)圖、故障檢測(cè)與維修技能全圖解
- Microsoft Dynamics GP 2013 Reporting, Second Edition
- MySQL數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)實(shí)踐教程 (清華電腦學(xué)堂)
- iOS編程基礎(chǔ):Swift、Xcode和Cocoa入門(mén)指南
- 飛槳PaddlePaddle深度學(xué)習(xí)實(shí)戰(zhàn)
- 青少年學(xué)Python(第1冊(cè))
- Java 從入門(mén)到項(xiàng)目實(shí)踐(超值版)
- Practical Maya Programming with Python