Redy词法识别--综合识别


返回文档首页


(一)简介

代码下载: git clone git://git.code.sf.net/p/redy/code redy-code


这一章的内容有:

这一章大家会看到一个完整的大的状态机,用于识别Redy语言中的所有词文。


(二)词文

在前面我们基本上讲完了Redy中大部份词文,其中有变量,字符串,注释,整数,长整数,浮点数,运算符。但还有一小部份词文在前面还没有提到过,分别为:
  1. 关键字(如if,else,while,for等)
  2. 语句分隔符(符号‘;‘和换行符),在Redy中每一条语句占用一行(组合语句除外),如果相把多条语句写在一行的,那么就需要用‘;’来分开。
  3. 白空格(由多个空格或制表符组成),白空格对于我们语言来说没有用处,所以当我们识别到白空格时就把它抛弃。
因为变量识别里面,会一同识别关键字,所以关键字和识别是在识别到词文变量以后再来进行第二次判断,最终到底里什么类型的关键字,或者还是变量。
对于分隔符和白空格,这里就不细说,他们的识别都非常的简单,我只是给出他们的状态机


(三)综合识别

(1)简介

在前面我们已经讲过整数,长整数,浮点数的合并,其实这已经完成了七成的工作了,后面的几个状态机的合并要简单得多,为了表述方便,我们把整数,长整数,浮点数都称为数。下一步的目标是得到一个大的状态机。

(2)状态机合并

现在我们总共有字符串,变量,数,运算符,注释,语句分格符,白空格这么七个小的状态机,为了实现综合识别,我们需要把它们合并在一起,相比前面的整数与浮点数的合并来说,这次合并要简单的多,如果仔细观察可以发现,
  1. 字符串识别的状态机的开始状态只在双引号下发生状态转移
  2. 语句分格符状态机的开始状态只在符号‘;’和符号‘\n‘发生状态转移
  3. 数识别的汰态机的开始状态只在数字0到9和点号下发生状态转移
  4. 变量识别的状态机的开始状态只在字母a到z,字母A到Z,下划线,符号‘@'下发生状态转移
  5. 白空格识别的状态机的开始状态只在空白符和制表符下发生状态转移
  6. 注释识别的状态机的开始符叼只在符号‘/’下发生状态转移
上面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值