ASTのdumpから
libtoolingで、ASTのtree走査を調べたりしてましたが、 そもそもASTのdumpがちゃんと出来ていないと、ASTの構造がどうなってるかも調べられないし、 なにも始まってないことに気がついたので、いまさら調べ。
以下のコマンドで出力、test.ccをdump
clang -Xclang -ast-dump -fsyntax-only test.cc
clang -cc1 --helpで ヘルプ
https://gist.github.com/masuidrive/5231110-Xclang :Pass <arg> to the clang compiler -ast-dump :Build ASTs and then debug dump them -fsyntax-only :構文チェックのみ
以下のコードを試しにdumpした。
//test.cc
int func(int x) {
  int result = (x / 42)+2;
  return result;
}
clang -Xclang -ast-dump -fsyntax-only test.cc
TranslationUnitDecl 0x80083880 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x80083b70 <<invalid sloc>> <invalid sloc> implicit __builtin_va_list 'char *'
`-FunctionDecl 0x80083c20 <test.cc:1:1, line:4:1> line:1:5 func 'int (int)'
  |-ParmVarDecl 0x80083bb0 <col:10, col:14> col:14 used x 'int'
  `-CompoundStmt 0x80083db8 <col:17, line:4:1>
    |-DeclStmt 0x80083d70 <line:2:3, col:26>
    | `-VarDecl 0x80083ca0 <col:3, col:25> col:7 used result 'int' cinit
    |   `-BinaryOperator 0x80083d58 <col:16, col:25> 'int' '+'
    |     |-ParenExpr 0x80083d28 <col:16, col:23> 'int'
    |     | `-BinaryOperator 0x80083d10 <col:17, col:21> 'int' '/'
    |     |   |-ImplicitCastExpr 0x80083d00 <col:17> 'int' <LValueToRValue>
    |     |   | `-DeclRefExpr 0x80083cd0 <col:17> 'int' lvalue ParmVar 0x80083bb0 'x' 'int'
    |     |   `-IntegerLiteral 0x80083ce8 <col:21> 'int' 42
    |     `-IntegerLiteral 0x80083d40 <col:25> 'int' 2
    `-ReturnStmt 0x80083da8 <line:3:3, col:10>
      `-ImplicitCastExpr 0x80083d98 <col:10> 'int' <LValueToRValue>
        `-DeclRefExpr 0x80083d80 <col:10> 'int' lvalue Var 0x80083ca0 'result' 'int'
参考
その他
-ast-list   :Build ASTs and print the list of declaration node qualified names
func
x
result
-ast-print  :Build ASTs and then pretty-print them
int func(int x) {
    int result = (x / 42) + 2;
    return result;
}
-ast-view   :Build ASTs and view them with GraphViz  
GraphVizないので
 
0 件のコメント:
コメントを投稿