一点实用代码

有限状态机
实现了一个确定型的有限状态机,可以向它注册状态跃迁规则和动作,然后在事件发生的时候通知它,别的都由它实现了。动作的原型是一个void (*)(void* params)的函数指针。
FSM的实现不依赖于任何超越标准C++的内容,也就是说,它可以使用在任何支持标准C++的环境中。顺便说一下,我在WinCE和Windows上都使用过它。

HTML2TEXT
一 个简单的例子使用有限状态机,它能够实现快速的把HTML文件转换为TEXT文件,具体的说,就是把标签(头尾tag)去掉,同时其属性也被去掉,把注释 内容去掉,把脚本和内嵌样式单中的内容去掉,把实体引用转换为实体代表的内容本身。该例子只是为了展现有限状态机的使用方式,没有考虑HTML中的标签的 大小写的问题,如果要考虑也不会复杂多少。
HTML2TEXT的实现也完全是标准语言和库实现的,只是采用了*_s之类的安全的函数,在某些环境下不可实现,不过可以简单的替换成没有_s的相应版本。

实现的基本描述:
顺 次的扫描HTML文件(当作一个以零结尾的内存区域),碰到标签<字符,开始忽略其内容,碰到>字符,重新开始记录。碰到<!--开始 忽略其内容,而到-->时重新开始记录,同时,碰到<script时开始忽略,碰到</script>时重新开始,style也 是一样的处理方式,状态机的状态相当少,包括Normal、Tag、Comment、Style、Script、Entity、End,状态机的开始状态 是Normal,最后状态是End,中间可以在这些状态之间跳转。可能的事件包括:    eFindScriptBegin,eFindScriptEnd,eFindStyleBegin,eFindStyleEnd, eFindCommentBegin,eFindCommentEnd,eFindTagStart,eFindTagStop, eFindEntityStart,eFindEntityStop,eFindEnd。它们都很清晰直白,尤其是参看了initFSM_的时候更是如 此。它的输出文件也是一个以零终止的内存区域,不需要由客户分配,在析构该对象时自动释放。

其中比较差的一点是我对Parameter结构的使用,我是特意这样演示的,主要是想展现对于FSM灵活的使用方式,其实最常见也最实用的方式是只使用this作为参数。

显然,HTML2TEXT可以非常容易得扩展成一个完整的HTML Parse【可以加上DOM支持】,再加上HTML Render【包括CSS的支持】,Javascript支持和HTTP支持,就是一个Web Browser了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值