是否有任何免费的解析器生成器生成C++代码并正确处理Unicode?

Bil*_*eal 9 c++ unicode parser-generator

在提出这个问题之后,我现在出售试图使用解析器生成器,在我打算手动编写之前.

但是,我似乎找不到任何生成C++代码的解析器,也找不到正确处理Unicode的解析器.(请注意,我的输入是在UCS-2中 - 我不关心支持Basic Multilingual Plane之外的位,如果这使得构建解析器更加困难)

有一些解析器可以生成C,但是这样的解析器似乎都会将异常安全性抛出窗口,这会阻止我在任何语义操作中使用C++.

是否存在满足这两个原则的解析器生成器,或者我是否卡在手上做所有事情?

编辑:哦,我的项目是BSL许可的,因此对解析器生成器本身的输出的使用不会有很多限制.

Ind*_*ant 5

C++有两种方式.使用一个程序,它从一个以自由形式或使用模板编写的语法中生成C++文件.

在模板类型中编写语法时,您有两种选择.使用boost :: proto,重新定义每个运算符以在boost :: fusion中构建语法树(用于boost :: spirit,boost :: msm,boost :: xpressive).(基本思想在于:Expression Templates)或者在自己的模板的帮助下构建手工编写的表达式树,并将其直接存储在boost :: mpl容器中.这个thecnique用于饼干.

在饼干你有

or_<>, seq_<>, char_<>, ..
Run Code Online (Sandbox Code Playgroud)

模板.饼干是基于Yard,但扩展了boost :: range以获得更好的submatch capabaility.

饼干解析器库1

饼干解析器库2

另一个C++的递归下降(YARD)解析框架


Lau*_*ves 1

ANTLR有 Unicode 支持。它具有 C++(以及 C、Java 和其他一些语言)支持,尽管我从未使用过 C++ 支持,所以我不确定它的开发程度如何。

  • 生成的 C 代码与 C++ 兼容这一事实并不意味着 ANTLR 生成 C++ 代码(事实并非如此)。另外,除了 George Shannon 的 wiki 帖子之外,我从未在 ANTLR 邮件列表上看到任何有关他所谓的 C++ 目标开发的详细信息。但你是对的,比利当然可以尝试给那个人发电子邮件。 (3认同)
  • 它说“3.1 版的 C 目标与 C++ 兼容”。在页面底部,George Shannon 说道:“我目前正在开发 C++ 运行时目标。” 那是二月份的事,所以也许可以联系他并了解进展情况。 (2认同)