我正在开发一个C ++源代码分析器项目,看起来clang很适合 解析工作。问题是clang严重依赖于基础设施“llvm”项目, 如何配置它以获得干净的前端而不需要任何具体的机器后端? 就像LCC一样,它们为专注于解析器部分的人提供了“空”后端。 任何建议都表示赞赏。
答案 0 :(得分:8)
我最近在Windows上做过这个。
从here下载clang和llvm来源。
安装cmake和Python(与文档相反,你只需要Python来构建clang;至少,如果cmake无法找到Python运行时,它就会放弃。)
您还需要VS2008或VS2010。
有一点不完全明显的是所需的目录结构:
projectRoot
build <- intermediate build files and DLLs, etc. will go here
llvm <- contents of llvm-3.0.src from llvm-3.0.tar go here
tools
clang <- contents of clang-3.0.src from clang-3.0.tar go here
然后从第4步开始执行windows build instructions。不要尝试使用cmake GUI,这是一个恐怖;只需使用构建说明中给出的命令。
一旦构建完成(需要一段时间),您将拥有:
projectRoot
build
bin
Release <- libclang.dll will be here
lib
Release <- libclang.lib will be here
llvm
tools
clang
include
clang-c <- Index.h is here
Index.h定义用于访问有关源代码信息的API;它包含了很多关于API的文档。
要开始使用clang,您需要以下内容:
CXIndex index = clang_createIndex(1, 1);
// Support Microsoft extensions
char *args[] = {"-fms-extensions"};
CXTranslationUnit tu = clang_parseTranslationUnit(index, "mySource.c", args, ARRAY_SIZE(args), 0, 0, 0);
if (tu)
{
CXCursor cursor = clang_getTranslationUnitCursor(tu);
// Use the cursor functions to navigate through the AST
}
答案 1 :(得分:1)
不幸的是,如果没有特定于机器的细节,你就无法获得“纯粹”的前端。 C / C ++本质上是与机器相关的语言。考虑预处理器和内置定义,内置类型的大小等。其中一些可以被抽象出来,但不是例如。预处理器。