来自 boost::spirit::x3 AST 的生成器?
generator from boost::spirit::x3 AST?
尊敬的同事们,
我有一个 boost::spirit::x3 解析器(AST),它可以很好地用于将输入文件引入我们的应用程序。
我想翻转一下,让它基于同一棵树生成输出流。
这是我从未做过的事情。我应该使用 boost::karma,还是只为树写一个 visitor/walker? boost 提供了哪些功能可以帮助我开始使用这些方法?
我想在全局和每个级别指定递归深度可能会有用,否则输出可能会很大。
新手需要考虑的其他问题?
谢谢!
X3 的 Karma 无与伦比。
底层 Proto 库之外没有任何设施来遍历表达式树。
不过。您将 运行 陷入可预测的问题,其中输入-输出的映射不是双射。您将始终必须为此类数据选择首选输出表示形式,这意味着您的数据可能不会往返,您可能会进行有损转换。你需要考虑这些。
其实我是不会考虑这个的。我不会将我的实现与复杂库的实现细节紧密耦合¹,我会将我的算法基于您实际控制的 AST 或数据结构。
¹ 与 X3 一样,它也是实验性的,因此如有更改,恕不另行通知
尊敬的同事们,
我有一个 boost::spirit::x3 解析器(AST),它可以很好地用于将输入文件引入我们的应用程序。
我想翻转一下,让它基于同一棵树生成输出流。
这是我从未做过的事情。我应该使用 boost::karma,还是只为树写一个 visitor/walker? boost 提供了哪些功能可以帮助我开始使用这些方法?
我想在全局和每个级别指定递归深度可能会有用,否则输出可能会很大。
新手需要考虑的其他问题?
谢谢!
X3 的 Karma 无与伦比。
底层 Proto 库之外没有任何设施来遍历表达式树。
不过。您将 运行 陷入可预测的问题,其中输入-输出的映射不是双射。您将始终必须为此类数据选择首选输出表示形式,这意味着您的数据可能不会往返,您可能会进行有损转换。你需要考虑这些。
其实我是不会考虑这个的。我不会将我的实现与复杂库的实现细节紧密耦合¹,我会将我的算法基于您实际控制的 AST 或数据结构。
¹ 与 X3 一样,它也是实验性的,因此如有更改,恕不另行通知