• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
clang-intro
 

clang-intro

on

  • 5,673 views

an unofficial, non-gentle introduction to clang compiler.

an unofficial, non-gentle introduction to clang compiler.

Statistics

Views

Total Views
5,673
Views on SlideShare
5,571
Embed Views
102

Actions

Likes
2
Downloads
62
Comments
0

3 Embeds 102

http://www.enjoitech.jp 72
http://www.slideshare.net 19
http://www.enjoitech.com 11

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    clang-intro clang-intro Presentation Transcript

    • Clang: A New Tool for Old Languages MORITA Hajime <omo@dodgson.org> http://steps.dodgson.org/ 2009/03/21 1
    • //===----------------------------------------------------------------------===// // C Language Family Front-end //===----------------------------------------------------------------------===// Chris Lattner I. Introduction: clang: noun 1. A loud, resonant, metallic sound. 2. The strident call of a crane or goose. 3. C-language family front-end toolkit. http://llvm.org/svn/llvm-project/cfe/trunk/README.txt
    • • Clang ? • ? 3
    • • Clang ? • ? 4
    • //===----------------------------------------------------------------------===// // C Language Family Front-end //===----------------------------------------------------------------------===// Chris Lattner I. Introduction: clang: noun 1. A loud, resonant, metallic sound. 2. The strident call of a crane or goose. 3. C-language family front-end toolkit. http://llvm.org/svn/llvm-project/cfe/trunk/README.txt
    • //===----------------------------------------------------------------------===// // C Language Family Front-end //===----------------------------------------------------------------------===// Chris Lattner I. Introduction: clang: noun 1. A loud, resonant, metallic sound. 2. The strident call of a crane or goose. 3. C-language family front-end toolkit. http://llvm.org/svn/llvm-project/cfe/trunk/README.txt
    • C/C++/Obj-C • LLVM.org • 2006 • written in C++ 6
    • C/C++/Obj-C • LLVM • Apple • (as LLVM) • (as LLVM) 7
    • LLVM • • • • JIT 8
    • Apple • • gcc ( ) • MSVC ( ) • 9
    • • • • • AST • • 10
    • Frontend Lex Driver Basic Parse CodeGen LLVM/ Sema LLVM System Analysis AST Rewrite Core App 11
    • Core 1/5: clang/Basic • I/O (+ ) • • • • basic LLVM 12
    • Core 2/5: Token clang/Lex Preprocessor Preprocessor Lexer • Lexer, Token, Preprocessor, ... • Lexer: Lexer PTHLexer • pull style: Lexer::Lex(Token& result); • hand-written • (: ) • PTH(Preprocessed-Token-Header) 13
    • Core 3/5: clang/Parse Token • Parser, Action, .... • Parser: Preprocessor Parser Action • push-style • C/C++/Obj-C (!) 14
    • Core 4/5: clang/Sema Parser Action • ParseAST(Preprocessor &PP, AST ASTConsumer *Consumer, Consumer TranslationUnit *TU, Sema bool PrintStats); Translation • Sema : public Action Unit • callback+Token→AST 15
    • Core 5/5: Translation AST Unit Context clang/AST Type Decl Expr • Decl : • VarDecl, FunctionDecl, CXXRecordDecl, ... • Type : • QualType, BuiltinType, ComplexType, ... • Expr : • DeclRefExpr, IntegerLiteral, UnaryOperator, ... 16
    • Decl Type NamedDecl QualType DeclContext ValueDecl ParmVar Decl FunctionDecl Stmt Expr CXX MethodDecl CXX RecordDecl 17
    • App libraries • Analysis: • • Rewrite: • (Rope, DeltaTree) • Obj-C → C • HTML • AST 18
    • • Clang ? • ? 19
    • • ( ) • ( ) 20
    • • OK: Driver/clang.cpp • • ASTConsumer • DiagnosticClient • 21
    • : main() : - #include-s - 22
    • #include-s: #include <vector> #include <string> #include <iosfwd> #include <llvm/Support/raw_ostream.h> #include <clang/Frontend/CompileOptions.h> #include <clang/Frontend/PathDiagnosticClients.h> #include <clang/Frontend/InitHeaderSearch.h> #include <clang/Frontend/TextDiagnosticBuffer.h> #include <clang/Frontend/TextDiagnosticPrinter.h> #include <clang/Analysis/PathDiagnostic.h> #include <clang/AST/Decl.h> #include <clang/AST/DeclCXX.h> #include <clang/AST/TranslationUnit.h> #include <clang/CodeGen/ModuleBuilder.h> #include <clang/Sema/ParseAST.h> #include <clang/Sema/SemaDiagnostic.h> #include <clang/AST/ASTConsumer.h> #include <clang/Parse/Parser.h> #include <clang/Lex/HeaderSearch.h> #include <clang/Lex/LexDiagnostic.h> #include <clang/Basic/FileManager.h> • #include <clang/Basic/SourceManager.h> #include <clang/Basic/TargetInfo.h> #include <clang/Basic/Diagnostic.h> #include <llvm/ADT/OwningPtr.h> #include <llvm/ADT/SmallPtrSet.h> #include <llvm/ADT/StringExtras.h> #include <llvm/Config/config.h> #include <llvm/Support/CommandLine.h> #include <llvm/Support/ManagedStatic.h> #include <llvm/Support/MemoryBuffer.h> #include <llvm/Support/PluginLoader.h> #include <llvm/Support/PrettyStackTrace.h> #include <llvm/Support/Timer.h> #include <llvm/System/Host.h> #include <llvm/System/Path.h> #include <llvm/System/Signals.h> #include <iostream> 23
    • : ASTConsumer • Driver/ASTConsumers.cpp • ASTDumper: • DeclContextPrinter: ( ) • : ↑ 24
    • class DeclContextPrinter : public ASTConsumer { llvm::raw_ostream& Out; public: DeclContextPrinter() : Out(llvm::errs()) {} void HandleTranslationUnit(TranslationUnit& TU) { TranslationUnitDecl* TUD = TU.getContext().getTranslationUnitDecl(); PrintDeclContext(TUD, 4); } void PrintDeclContext(const DeclContext* DC, unsigned Indentation) }; 25
    • void DeclContextPrinter::PrintDeclContext(const DeclContext* DC, unsigned Indentation) { // Print DeclContext name. switch (DC->getDeclKind()) { case Decl::TranslationUnit: Out << quot;[translation unit] quot; << DC; break; case Decl::Namespace: { Out << quot;[namespace] quot;; const NamespaceDecl* ND = cast<NamespaceDecl>(DC); Out << ND->getNameAsString(); break; } ... case Decl::CXXRecord: { const CXXRecordDecl* RD = cast<CXXRecordDecl>(DC); if (RD->isDefinition()) Out << quot;[class] quot;; else Out << quot;<class> quot;; Out << RD->getNameAsString() << quot; quot; << DC; break; } ... 26
    • AST • / (better doxygen, GLOBAL, LXR, ...) • (better/worse RPC, Serializer, SWIG, ...) • , AST • AOP ( , , ....) • http://people.imendio.com/richard/gtk-rewriter/ 27
    • • ( FS) • ( ) • (Lexer ) • C++ • ... 28
    • 5 C/Objc-C/C++ • • + • ? • (ry 29
    • Clang • C++ C++ !!! • !!! • Apple!!! • !!! 30
    • For more: • http://clang.llvm.org/get_started.html • http://llvm.org/devmtg/2008-08/Naroff_Clang.pdf • trunk/Driver/ clang • http://www.flickr.com/photos/darrenhunter/2918246464/ 31