gpt4 book ai didi

c - 如何在程序中自动插入 pragma

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:22 25 4
gpt4 key购买 nike

我需要编写一个工具,可以使用 C 代码并将 pragmas 置于某些函数之上。哪个编译器框架最容易完成这样的任务。另外,如果您能提供一个示例,我将不胜感激。

最佳答案

如果你想可靠地做到这一点,你需要一个完整的 C 前端,以及修改解析代码的能力。

我们的 DMS Software Reengineering Toolkit与其 C Front End大概可以做你想做的事。 DMS 可以解析、构建 AST,并对源文本执行自定义转换,无论是程序转换还是表面语法转换。

宏和预处理器指令存在一些问题;如果你解析并保留这些,它在很多情况下都可以这样做,但它会在它们不是“结构化”的地方扩展这样的指令。保留意味着您没有得到符号表。如果展开所有指令,在解析后,您可以获得与 C 编译器生成的内容相同的符号表。

对于 OP 的特定任务,他想编写一个源到源的转换,如下所示:

 rule decorate_function_definition_with_pragma(fh:function_head, b: block): declaration -> declaration
= " \fh \b " ->
" \fh
#pragma my_pragma
\b "
if some_condiiton(fh);

其中“my_pragma”基本上被他想要的编译指示文本替换,而 some_condition 是自定义谓词,用于过滤匹配的 function_headers,应该为其插入编译指示。

模式与语法树匹配,因此它不会像 sed 或正则表达式那样不匹配。秘诀在于模式变量引用 C 前端中的语法规则; function_head 类型的模式变量只能匹配 function_head 语法规则可以满足的那些树。

需要一些简单的控制逻辑来为每个遇到的函数定义运行一次此转换。

关于c - 如何在程序中自动插入 pragma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10962656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com