抽象语法树的生成

int main(int argc, char **argv)
{
 int i, j = 5;
 if (i) {
    return (j * 1 - j);
 }
 else {
 exit(1);
 }
}
<<AST>> (D:\git\cbc\cbc-project\test\ast.cb:1)
variables:
functions:
    <<DefinedFunction>> (D:\git\cbc\cbc-project\test\ast.cb:1)
    name: "main"
    isPrivate: false
    params:
        parameters:
            <<Parameter>> (D:\git\cbc\cbc-project\test\ast.cb:1)
            name: "argc"
            typeNode: int
            <<Parameter>> (D:\git\cbc\cbc-project\test\ast.cb:1)
            name: "argv"
            typeNode: char**
    body:
        <<BlockNode>> (D:\git\cbc\cbc-project\test\ast.cb:2)
        variables:
            <<DefinedVariable>> (D:\git\cbc\cbc-project\test\ast.cb:3)
            name: "i"
            isPrivate: false
            typeNode: int
            initializer: null
            <<DefinedVariable>> (D:\git\cbc\cbc-project\test\ast.cb:3)
            name: "j"
            isPrivate: false
            typeNode: int
            initializer:
                <<IntegerLiteralNode>> (D:\git\cbc\cbc-project\test\ast.cb:3)
                typeNode: int
                value: 5
        stmts:
            <<IfNode>> (D:\git\cbc\cbc-project\test\ast.cb:4)
            cond:
                <<VariableNode>> (D:\git\cbc\cbc-project\test\ast.cb:4)
                name: "i"
            thenBody:
                <<BlockNode>> (D:\git\cbc\cbc-project\test\ast.cb:4)
                variables:
                stmts:
                    <<ReturnNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                    expr:
                        <<BinaryOpNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                        operator: "-"
                        left:
                            <<BinaryOpNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                            operator: "*"
                            left:
                                <<VariableNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                                name: "j"
                            right:
                                <<IntegerLiteralNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                                typeNode: int
                                value: 1
                        right:
                            <<VariableNode>> (D:\git\cbc\cbc-project\test\ast.cb:5)
                            name: "j"
            elseBody:
                <<BlockNode>> (D:\git\cbc\cbc-project\test\ast.cb:7)
                variables:
                stmts:
                    <<ExprStmtNode>> (D:\git\cbc\cbc-project\test\ast.cb:8)
                    expr:
                        <<FuncallNode>> (D:\git\cbc\cbc-project\test\ast.cb:8)
                        expr:
                            <<VariableNode>> (D:\git\cbc\cbc-project\test\ast.cb:8)
                            name: "exit"
                        args:
                            <<IntegerLiteralNode>> (D:\git\cbc\cbc-project\test\ast.cb:8)
                            typeNode: int
                            value: 1

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值