上QQ阅读APP看书,第一时间看更新
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所示。
其余状态转换图和我们介绍过的状态转换图的构成是一样的,使用时,都是从起始状态开始,遇到不同的字符后进入不同的识别状态,最后识别出符号并进入终态。