询问后this question ,我现在尝试使用解析器生成器,而在此之前我要手动编写东西。
但是,我似乎找不到任何生成 C++ 代码的解析器,也找不到正确处理 Unicode 的解析器。 (请注意,我的输入是在 UCS-2 中——如果这会使构建解析器更加困难,我不关心支持基本多语言平面之外的位)
有些解析器可以生成 C,但这些解析器似乎都将异常安全抛到了窗外,这会阻止我在任何语义操作中使用 C++。
是否存在满足这两个原则的解析器生成器,还是我必须手动完成所有操作?
编辑:哦,我的项目是 BSL 许可的,所以对解析器生成器本身的输出的使用没有太多限制。
最佳答案
C++中有两种方法。使用一个程序,从以自由形式或使用模板编写的语法生成 C++ 文件。
当您在模板类型中编写语法时,您有两种选择。使用 boost::proto,其中每个运算符都被重新定义以在 boost::fusion 中构建语法树(用于 boost::spirit、boost::msm、boost::xpressive)。 (基本思想在这里:Expression Templates)或者在自己的模板的帮助下构建一个手写的表达式树并将其直接存储在 boost::mpl 容器中。这种技术用于 cookies 。
在 cookies 里你有
or_<>, seq_<>, char_<>, ..
模板。 Biscuit 基于 Yard,但扩展了 boost::range 以获得更好的子匹配能力。
Yet Another Recursive Descent (YARD) parsing framework for C++
关于c++ - 是否有免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317799/