【发布时间】:2012-06-18 12:38:02
【问题描述】:
给定一个clang中的AST对象,我怎样才能得到它背后的代码?我尝试编辑tutorial中的代码,并添加:
clang::SourceLocation _b = d->getLocStart(), _e = d->getLocEnd();
char *b = sourceManager->getCharacterData(_b),
e = sourceManager->getCharacterData(_E);
llvm:errs() << std::string(b, e-b) << "\n";
但是很遗憾,它没有打印出整个 typedef 声明,只打印了一半!打印Expr时也出现了同样的现象。
如何打印并查看构成声明的整个原始字符串?
【问题讨论】:
-
我认为最终源位置指向该范围内的最后一个标记(不是最后一个),因此您会错过最后一个标记。
-
@bames53 看起来你是对的!那么我如何获得最后一个令牌呢?
-
除了第三行应该是
_e而不是_w之外,最后一行的区别是不是弄错了? (即e - b不是b - e) -
@KonradRudolph 已修复,谢谢。