Ragel是一个状态机代码生成器,支持多种语言C, C++, Objective-C, D, Java, Ruby。一般用来写正则表达式解析协议数据,然后编译成相应代码嵌入到其他语言中。
Ragel的介绍和入门可以看这里:http://blog.dccmx.com/2011/01/ragel-intro-1/
解析http头的例子可以看这里:http://yaoweibin2008.blog.163.com/blog/static/110313920098211472956/,下面的例子抄了部分URL的定义。
所谓流式解析就是限制buffer使用,保持内存为一个常量。例如,要解析4k的数据,如果不使用流式解析,就必须申请4k的buffer。如果使用流式解析,可以每次读取1k数据,解析之后丢弃掉。
Ragel很好的支持这种模式,只需要在解析之后保存cs(自动机状态),解析之前设置cs,就能从上次断点继续解析。