我目前正在从事一个与数据库相关的项目,其中我生成了很多C++代码。这些代码被编译并作为动态库加载。我使用这种技术来构建数据库模式和查询的高效代码。
目前,我使用简单的文件写入来生成代码(这对概念验证实现来说还可以)。现在,我正在寻找一种更优雅但同样灵活的解决方案来生成C++代码。
我已经搜索了很多,但是到目前为止,我发现的所有解决方案都相当复杂/繁琐,不够高效或者不够灵活。
您在C++项目中使用哪些库来生成代码?
最好的祝福, Moritz
我目前正在从事一个与数据库相关的项目,其中我生成了很多C++代码。这些代码被编译并作为动态库加载。我使用这种技术来构建数据库模式和查询的高效代码。
目前,我使用简单的文件写入来生成代码(这对概念验证实现来说还可以)。现在,我正在寻找一种更优雅但同样灵活的解决方案来生成C++代码。
我已经搜索了很多,但是到目前为止,我发现的所有解决方案都相当复杂/繁琐,不够高效或者不够灵活。
您在C++项目中使用哪些库来生成代码?
最好的祝福, Moritz
你可以使用程序转换系统(PTS)来可靠地定义和组合代码模板。
大多数PTS能够定义语法,然后使用该语法将源代码解析为AST。更重要的是,它们接受模式:源代码片段(通常是非终端符或非终端符列表),其中包含占位符,这些占位符对应于良好格式化的子片段(表示子树的非终端符)。这些模式通常坚持指定命名的占位符完全匹配(请参见下面的示例)。可以使用这些模式与解析的AST匹配,以查找使用表面语法的代码片段。
因此,可以使用一个模式:
pattern x_squared(t: term): product
= " \t * \t ";
(p + q[17])*(p+q[17)
2 * (x-3)
(2^x)*(2^x)
... P * Q ...
rule optimize_matrix_times_unit(m: term, n: term): product -> product
" \m * \q "
-> " \m "
if is_identity_matrix(q)
system()
来运行编译器的操作。 - Tyler