
上QQ阅读APP看书,第一时间看更新
2.3 状态转换图
2.3.1 状态转换图总体介绍
词法分析的过程是根据C语言的词法规则进行的,为了指导词法分析器的程序设计,需要形式化地表达C语言的词法规则。下面我们用状态转换图的形式来展现这个案例程序能用到的词法规则,如图2-19所示。

图2-19 前面介绍内容所涉及的状态转换图
图2-19是一个完整的转换图,我们来看词法分析的每个步骤在转换图上对应的状态。
首先是起始状态,即我们前面所介绍的计算机准备识别下一个符号的状态,如图2-20所示。

图2-20 状态转换图处于起始状态
我们以标识符符号的识别为例,只要识别到字母、数字或下划线,就进入标识符识别状态,情景如图2-21所示。

图2-21 识别到字母或下划线的状态
之后,只要遇到字母、数字或下划线,就仍然在这个状态中进行识别,情景如图2-22所示。

图2-22 不断识别到字母、数字或下划线的状态
直到条件不再符合,就进入终态,表示此标识符已经识别完毕,情景如图2-23所示。

图2-23 进入终态并确定符号为标识符
然后从起始状态开始准备识别下一个符号,情景如图2-24所示。

图2-24 重新回到起始状态
下一个字符可能是数字、分隔符或运算符。如果是数字,情景如图2-25所示。

图2-25 识别到数字的状态
如果是分隔符,情景如图2-26所示。

图2-26 识别到“,”的状态
如果是运算符,情景如图2-27所示。

图2-27 识别到“=”的状态