您的位置:首页 > 编程语言 > Go语言

编译原理手记04-通过状态图设计词法分析器

2014-07-22 17:04 381 查看
状态图的元素:

圆圈 -> 状态

箭头 -> 状态的转换,通常附近会标明转换条件

星号 -> 再peek一个字符

例如一个标识符的词法解析状态图:



根据状态图,我们就可以写出相应的程序出来,上面这个状态图转化成程序后大概如下:

var token string
for {
// ch代表每次读取的字符
switch state {
// 第一次读取到一个下划线或字母则进入状态1
case 0:
if ch == '_' || ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') {
token += string(ch)
state = 1
}
// 如果读取到的字符不是下划线、字母,也不是数字,则进入状态2(结束状态)
case 1:
if ch == '_' || ('A' <= ch && ch <= 'Z') || ('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9') {
token += string(ch)
} else {
state = 2
}
// 这是结束状态,返回的token就是这次解析出的标识符
case 2:
return token
}
}


根据设计好的状态图来实现词法分析器会非常简单,而且可以在写代码之前就发现一些该提早发现的设计问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息