2014状态机的编程思想.docVIP

  • 12
  • 0
  • 约6.58千字
  • 约 7页
  • 2016-12-14 发布于北京
  • 举报
状态机的编程思想 KR习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套”。 如果不考虑字符常量和字符串常量,问题确实很简单。只需要去掉//和/* */的注释。 考虑到字符常量\和字符串常量he\/*hehe*/,还有类似secure/_stdio.h的头文件以及表达式5/3中的除号/,情况就比较复杂了。? 我想,这种问题最适合用正则表达式来解析,perl之类的语言应当很好处理,问题是这里让你用C语言实现,但是C语言对正则表达式并没有显式的支持。 学过编译原理的应该知道,正则表达式对应三型文法,也就对应着一个有限状态自动机(可以用switch偏重算法来实现,或者用状态转换矩阵/表偏重数据结构来实现), 所以这里的问题其实是设计一个状态机,把输入的字符流扔进去跑就可以了。 【一个简单的状态机】 先看《KR》第一章的一个简单习题1-12:编写一个程序,以每行一个单词的形式打印其输入? 在这个题目之前,1.5.4节的单词计数示例中,其实KR已经展示了一个非常简单的状态机。但没有提到这种编程思想。 当然这个题目也可以状态机的思想来编程。 回到题目,我们设初始的状态state为OUT,表示当前字符不在单词中(不是单词的组成字符),如果当前字符在单词中(属于单词的一部分),则state设为IN。 显然字符只能处于

文档评论(0)

1亿VIP精品文档

相关文档