c++ - 是否有免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?

标签 c++ unicode parser-generator

询问后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 以获得更好的子匹配能力。

The Biscuit Parser Library 1

The Biscuit Parser Library 2

Yet Another Recursive Descent (YARD) parsing framework for C++

关于c++ - 是否有免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317799/

相关文章:

c++ - 制作没有依赖的DLL文件

c++ - 为什么这个程序的结果是三个十进制数 "597, 295, 295,"输入两个十六进制数 "255 127<enter>"

java - Java 如何在其 16 位 char 类型中存储 UTF-16 字符?

python - 如何让 matplotlib 在数字格式化程序中使用等宽 '+' 和 '-' ?

php - 这个文法不是LR(1)吗?

c - 柠檬力与否?

c++ - AMQP-CPP - 基于事件的方法

c++ - 初始化utf8编码字符串c++11

java - 将十进制格式(html 编码)的 Unicode 字符字符串转换为常规字符串

可与闭包编译器一起使用的 JavaScript 解析器生成器