在询问
this question之后,我现在出售尝试使用解析器生成器,之前我要手动写东西.
然而,我似乎找不到任何这样的生成C代码的解析器,也不能找到正确处理Unicode的解析器. (请注意,我的输入是在UCS-2 – 我不在乎支持基本多语言平面之外的位,如果这使建立解析器更困难)
有一些可以产生C的解析器,但是这样的解析器似乎把异常安全性抛出窗口,这将阻止我在任何语义动作中使用C.
存在符合这两个原则的解析器生成器,或者我卡住了一切手?
解决方法
C有两种方法.使用程序,从使用免费格式或使用模板编写的语法生成C文件.
当您在模板类型中编写语法时,您有两种选择.使用boost :: proto,其中每个操作符被重新定义,以在boost :: fusion(boost :: spirit,boost :: msm,boost :: xpressive中使用)中构建一个语法树. (基本思想在这里:Expression Templates)或者用自己的模板建立一个手工编写的表达式树,并直接存储boost :: mpl容器.这款巧克力用于饼干.
在饼干你有
or_<>,seq_<>,char_<>,..
模板.饼干是基于Yard,但扩展了扩展boost ::范围,以获得更好的submatch功能.
Yet Another Recursive Descent (YARD) parsing framework for C++