0%

AST-抽象语法树示例

AST 抽象语法树示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
`-FunctionDecl 0x12d0ffa20 <hello.c:2:1, line:11:1> line:2:5 main 'int (int, char **)'
|-ParmVarDecl 0x12d0ff800 <col:10, col:14> col:14 argc 'int'
|-ParmVarDecl 0x12d0ff900 <col:20, col:31> col:26 argv 'char **':'char **'
`-CompoundStmt 0x12d0fff68 <col:33, line:11:1>
|-DeclStmt 0x12d0ffb70 <line:3:5, col:17>
| `-VarDecl 0x12d0ffae8 <col:5, col:15> col:9 used age 'int' cinit
| `-IntegerLiteral 0x12d0ffb50 <col:15> 'int' 45
|-IfStmt 0x12d0fff08 <line:4:5, line:9:5> has_else
| |-BinaryOperator 0x12d0ffc60 <line:4:9, col:21> 'int' '>='
| | |-ImplicitCastExpr 0x12d0ffc48 <col:9> 'int' <LValueToRValue>
| | | `-DeclRefExpr 0x12d0ffb88 <col:9> 'int' lvalue Var 0x12d0ffae8 'age' 'int'
| | `-BinaryOperator 0x12d0ffc28 <col:16, col:21> 'int' '+'
| | |-BinaryOperator 0x12d0ffbe8 <col:16, col:19> 'int' '+'
| | | |-IntegerLiteral 0x12d0ffba8 <col:16> 'int' 17
| | | `-IntegerLiteral 0x12d0ffbc8 <col:19> 'int' 8
| | `-IntegerLiteral 0x12d0ffc08 <col:21> 'int' 20
| |-CompoundStmt 0x12d0ffdc0 <col:25, line:6:5>
| | `-CallExpr 0x12d0ffd68 <line:5:9, col:35> 'int'
| | |-ImplicitCastExpr 0x12d0ffd50 <col:9> 'int (*)(const char *, ...)' <FunctionToPointerDecay>
| | | `-DeclRefExpr 0x12d0ffc80 <col:9> 'int (const char *, ...)' Function 0x12d0e5588 'printf' 'int (const char *, ...)'
| | `-ImplicitCastExpr 0x12d0ffda8 <col:16> 'const char *' <NoOp>
| | `-ImplicitCastExpr 0x12d0ffd90 <col:16> 'char *' <ArrayToPointerDecay>
| | `-StringLiteral 0x12d0ffcd8 <col:16> 'char[17]' lvalue "Hello old man!\\n"
| `-CompoundStmt 0x12d0ffef0 <line:7:9, line:9:5>
| `-CallExpr 0x12d0ffe98 <line:8:9, col:37> 'int'
| |-ImplicitCastExpr 0x12d0ffe80 <col:9> 'int (*)(const char *, ...)' <FunctionToPointerDecay>
| | `-DeclRefExpr 0x12d0ffdd8 <col:9> 'int (const char *, ...)' Function 0x12d0e5588 'printf' 'int (const char *, ...)'
| `-ImplicitCastExpr 0x12d0ffed8 <col:16> 'const char *' <NoOp>
| `-ImplicitCastExpr 0x12d0ffec0 <col:16> 'char *' <ArrayToPointerDecay>
| `-StringLiteral 0x12d0ffe38 <col:16> 'char[19]' lvalue "Hello young man!\\n"
`-ReturnStmt 0x12d0fff58 <line:10:5, col:12>
`-IntegerLiteral 0x12d0fff38 <col:12> 'int' 0
❯ clang -Xclang -ast-dump -fsyntax-only hello.c > hello.ast