来自 boost::spirit::x3 AST 的生成器?

generator from boost::spirit::x3 AST?

尊敬的同事们,

我有一个 boost::spirit::x3 解析器(AST),它可以很好地用于将输入文件引入我们的应用程序。

我想翻转一下,让它基于同一棵树生成输出流。

这是我从未做过的事情。我应该使用 boost::karma,还是只为树写一个 visitor/walker? boost 提供了哪些功能可以帮助我开始使用这些方法?

我想在全局和每个级别指定递归深度可能会有用,否则输出可能会很大。

新手需要考虑的其他问题?

谢谢!

X3 的 Karma 无与伦比。

底层 Proto 库之外没有任何设施来遍历表达式树。

不过。您将 运行 陷入可预测的问题,其中输入-输出的映射不是双射。您将始终必须为此类数据选择首选输出表示形式,这意味着您的数据可能不会往返,您可能会进行有损转换。你需要考虑这些。

其实我是不会考虑这个的。我不会将我的实现与复杂库的实现细节紧密耦合¹,我会将我的算法基于您实际控制的 AST 或数据结构。


¹ 与 X3 一样,它也是实验性的,因此如有更改,恕不另行通知