gpt4 book ai didi

objective-c - 使用 Clang 将关键字添加到 Objective-C

转载 作者:太空狗 更新时间:2023-10-30 03:38:35 25 4
gpt4 key购买 nike

我如何使用 Clang 编译器向 Objective-C 添加一个相对微不足道的关键字?例如,添加一个文字 @yes 映射到 [NSNumber numberWithBool:YES]

我看过 Clang 的(优秀)源代码,相信我需要做的大部分工作都在 lib/Rewrite/RewriteObjC.cpp 中。 .有一种方法 RewriteObjC::RewriteObjCStringLiteral(参见前面的链接),它对文字 NSString * 实例执行类似的工作。

我问这个问题是因为 Clang 是非常模块化的,我不确定哪些 .td(参见 tablegen)文件、.h 文件和 AST 访问者通过我需要进行修改才能实现我的目标。

最佳答案

如果我正确理解了 clang 的代码(我仍在学习,所以要小心),我认为这种类型的添加的起点是 clang/lib/Parse/ParseObjc.cpp 中的 Parser::ParseObjCAtExpression。

需要注意的一点是,Parser 类在几个文件中实现(看似按输入语言分开),但完全在 clang/include/Parser.h 中声明。

Parser 有许多遵循 ParseObjCAt 模式的方法,例如,解析对象表达式解析对象语句解析对象指令等..

具体来说,ParseObjc.cpp 的第 1779 行似乎是解析器检测到 @"foo"形式的 Objective-C 字符串文字的地方。但是,它还调用了我还不完全理解的 ParsePostfixExpressionSuffix。我还没弄清楚它是如何知道解析字符串文字的(与 @synchronize 相比,例如)。

ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
...
return ParsePostfixExpressionSuffix(ParseObjCStringLiteral(AtLoc));
...
}

如果您还没有,请访问 clang 的 "Getting Started"开始编译的页面。

关于objective-c - 使用 Clang 将关键字添加到 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9124893/

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