Sed*_*ien 7 compiler-construction objective-c llvm clang keyword
我如何使用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 中声明。
解析器有许多遵循 ParseObjCAt 模式的方法,例如 ParseObjCAtExpression ParseObjCAtStatement ParseObjCAtDirectives 等。
具体来说,ParseObjc.cpp 的第 1779 行似乎是解析器检测到@“foo”形式的 Objective-C 字符串文字的地方。但是,它还调用了我还不完全理解的 ParsePostfixExpressionSuffix 。我还没有弄清楚它如何知道解析字符串文字(例如,相对于 @synchronize)。
ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {
...
return ParsePostfixExpressionSuffix(ParseObjCStringLiteral(AtLoc));
...
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有,请访问 clang 的“入门”页面开始编译。
归档时间: |
|
查看次数: |
398 次 |
最近记录: |