![编译系统透视:图解编译原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/487/844487/b_844487.jpg)
上QQ阅读APP看书,第一时间看更新
2.3.2 依托状态转换图展现词法分析过程
下面我们把前面的词法分析过程映射到状态转换图中。符号“int”的识别如图2-28~图2-32所示。
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0070.jpg?sign=1739271377-I69wyh1lJzRZbXADzLvKaAHZUwKDDEjL-0-ad82dd2de79782f0e70070fd7df91ba2)
图2-28 进入起始状态准备识别符号
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0071.jpg?sign=1739271377-rzm7KVdCXijeSn1eXHCUIoqgDUSEJBIs-0-14a69ceb5617b15d660bfb1ba25347c5)
图2-29 进入识别到字母的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0072.jpg?sign=1739271377-skZnNYWT5M6Hjo8jzGnd8kpeXYX3BicH-0-c05d5cb5cd10584d971ee0df8d217f33)
图2-30 继续处于识别字母的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0073.jpg?sign=1739271377-3oNyPSPqvLNy9BcUbSWgT87XZOQm1KPD-0-ae463b3c7c62d40beaa3922e1ffd89da)
图2-31 继续处于识别字母的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0074.jpg?sign=1739271377-MMpM3GzKw7ZTpJamEX0itlwf88dGSUBu-0-4e51ffd52c3b8c66f95de939f3fa76e3)
图2-32 识别到空格并进入终态
继续往后遍历,识别到“(”后,符号“fun”被识别出来,如图2-33和图2-34所示。
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0075.jpg?sign=1739271377-MPUpvJUnK9fJrEwp3WA0jRcqObV2DLbp-0-585fc41f8679cf3ec3a6a90fe1aceda6)
图2-33 识别到“(”后进入终态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0076.jpg?sign=1739271377-0Vmi5jfx3Suaqy3x2JZM9SGhxSJ8qbc7-0-f885fd45174e7f0b30429483e6b1031c)
图2-34 回到起始状态准备继续识别
下面还是识别到“(”,如图2-35所示。
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0077.jpg?sign=1739271377-B0rw172HTfWCoC6AVLQILQY5LsPPfqo6-0-b4a0a64fbcffca4704d3c92d2c979bb2)
图2-35 进入识别出“(”的状态
从状态转换图中我们看到,每次的起始位置都是上一个符号的终结之后,这也是为什么每个导致终结的字符都会被重新分析一遍。它的第二次分析属于新的起始。
识别其他标识符在状态图上的情景与“int”、“fun”、“(”类似,下面我们看一下“=”和数字“10”的识别情景。
先看“=”的识别,识别到字符“=”后无法判断是“=”还是“==”,还得继续向后遍历,如图2-36和图2-37所示。
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0078.jpg?sign=1739271377-S1lc9wQ2cXaSE4RCj4ck6x8yKnUDy53A-0-b4f48df241b08ebe198c5f503c463fa2)
图2-36 进入识别出“=”的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0079.jpg?sign=1739271377-JKF1iwh08JSzSceJDuRVFw40BYNVzk6g-0-88acf40d29f4f685146815df982e1d3d)
图2-37 识别出符号“=”并进入终态
识别到“1”后,可以确定就是“=”了。再看“10”的识别,如图2-38至图2-40所示。
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0080.jpg?sign=1739271377-s7wHdTLM486y7wQT8SLdnKVxRapQTJLq-0-84ea77098c26cbcf8e59b68b95f8f20e)
图2-38 进入识别到数字的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0081.jpg?sign=1739271377-CVtkaZRvHYzYwbVJwk0MxPZIhLilcyAE-0-a8993d4deda6564b9ea87f2c46320b43)
图2-39 不断处于识别到数字的状态
![](https://epubservercos.yuewen.com/CCC398/5922738704546701/epubprivate/OEBPS/Images/figure_0082.jpg?sign=1739271377-qB0liDzl477T7NBFvY7hMMhWPstmKHob-0-fc9a5c47f79e6e8ff7fd291000a42eab)
图2-40 识别出符号“10”并进入终态
识别到“;”,最终确定了“10”这个符号,如图2-40所示。
其余状态转换图和我们介绍过的状态转换图的构成是一样的,使用时,都是从起始状态开始,遇到不同的字符后进入不同的识别状态,最后识别出符号并进入终态。