gpt4 book ai didi

Clang - 如何将 "Expr"作为字符串检索?

转载 作者:行者123 更新时间:2023-12-01 10:21:28 24 4
gpt4 key购买 nike

我正在使用 Clang/libtooling(ASTComsumer 和匹配器)来访问所有 return语句 ( ReturnStmt )。我需要提取关键字 return 后面的表达式以字符串形式,以便我可以将其放入要替换的宏中 return声明与。

例如,我想替换以下行:

return somefunc() + 1;


FUNCTION_EXIT(somefunc() + 1); // FUNCTION_EXIT is a C macro

宏将 return在做一些日志记录后从函数中。

我正在使用 ReturnStmt::getRetValue()返回 Expr并试图以字符串形式获取它(以便它可以传递给宏),但我还没有找到方法。有没有办法字符串化 Expr ?

最佳答案

Clang 在抽象语法树 (AST) 和实际源代码之间有严格的关注点分离。在这些之间转换的组件是 Lexer .获取 Expr e: 的原始来源

const string text = Lexer::getSourceText(e.getSourceRange(), source_manager, opt);

请注意,SourceManager 和 LangOptions 可从 ASTContext 获得。 .如果您正在解析的代码有宏,那么事情会变得更加复杂,因为您必须关心拼写位置与扩展位置; SourceManager有一堆不同的函数可以在这些函数之间进行转换。

祝你好运!

关于Clang - 如何将 "Expr"作为字符串检索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446834/

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