词法分析(一):状态转换图

词法分析概述


状态转换图

状态转换图是一张有限有向图

  • 结点表示状态,结点用圆圈表示
  • 状态之间存在有向弧,弧上标记有字符字符集
    表示某一状态接受箭弧上的字符/字符集输入后到达另一状态
  • 一张状态转换图中的状态个数是有限的,其中有一个初态,至少有一个终态
    在这里插入图片描述
    如上图表示状态1为初态,状态3为终态,状态1接受字符a到达状态2,接受数字到达状态3
    终态用双圈表示

状态转换图可用于识别 / 接受一定的字符串

若存在一条从初态到某一终态的道路,记这条路上所有弧上的标记符连接成的字(即字符串 )为α,则称α被该状态转换图识别 / 接受

在这里插入图片描述
比如上面的状态转换图,可以用来识别以字母开头,可以存在数字的标识符(状态3的*号表示,不包含到状态3的弧上的字符)

在这里插入图片描述
可以识别整常数的状态图


状态转换图在词法分析中的应用

有某种简单的程序设计语言,单词表如下
该语言所有合法的字都在该单词表内描述

单词符号种别编码助记符内码值
DIM1$DIM
IF2$IF
DO3$DO
STOP4$STOP
END5$END
标识符6$ID内部字符串
常数7$INT标准二进制形式
=8$ASSIGN
+9$PLUS
*10$STAR
**11$POWER
,12$COMMA
(13$LPAR
)14$RPAR

可为单词表设计如下状态转移图
在这里插入图片描述
状态2识别关键字和标识符
状态4识别常数
状态5~12识别操作符和括号
状态13为出错状态
那么,可以由此图对该语言的所有代码进行词法分析


词法分析器的实现:状态转换图→程序

使用循环和swith或if,我们很容易把上面的状态转移图实现为词法分析程序
或者使用更巧妙的表驱动方式

当前状态 \ 字符spaceletterdigit=+*,()其他
001356710111213
101356710111213
34444444444
78888898888

设该数组为state
由当前状态cur_state和读取的字符ch
我们可以查表得到下一个状态state[cur_state][ch]


状态转换图与有限自动机

有限自动机

可以用状态转换图等价表示确定有限自动机(DFA) 或者 非确定有限自动机(NFA)


2019/7/20

  • 28
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值