1.tokens

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "global_a"

<SPACES>                " "

"="                     "="

<SPACES>                " "

<INTEGER>               "5"

";"                     ";"

<SPACES>                "\r\n"

"long"                  "long"

<SPACES>                " "

<IDENTIFIER>            "global_b"

";"                     ";"

<SPACES>                "\r\n"

"char"                  "char"

<SPACES>                " "

"*"                     "*"

<SPACES>                " "

<IDENTIFIER>            "global_c"

<SPACES>                " "

"="                     "="

<SPACES>                " "

"\""                    "\"HelloWorld!\""

";"                     ";"

<SPACES>                "\r\n"

"int"                   "int"

"["                     "["

<INTEGER>               "5"

"]"                     "]"

<SPACES>                " "

<IDENTIFIER>            "global_array"

";"                     ";"

<SPACES>                "\r\n"

"struct"                "struct"

<SPACES>                " "

<IDENTIFIER>            "point"

<SPACES>                " "

<IDENTIFIER>            "global_struct"

";"                     ";"

<SPACES>                "\r\n"

"struct"                "struct"

<SPACES>                " "

<IDENTIFIER>            "point"

"{"                     "{"

<SPACES>                "\r\n   "

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "x"

";"                     ";"

<SPACES>                "\r\n   "

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "y"

";"                     ";"

<SPACES>                "\r\n"

"}"                     "}"

";"                     ";"

<SPACES>                "\r\n"

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "func"

"("                     "("

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "m"

","                     ","

<SPACES>                " "

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "n"

")"                     ")"

"{"                     "{"

<SPACES>                "\r\n   "

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "local_a"

<SPACES>                " "

"="                     "="

<SPACES>                " "

<INTEGER>               "4"

";"                     ";"

<SPACES>                "\r\n   "

<IDENTIFIER>            "local_a"

<SPACES>                " "

"="                     "="

<SPACES>                " "

<IDENTIFIER>            "m"

";"                     ";"

<SPACES>                "\r\n   "

<IDENTIFIER>            "local_a"

<SPACES>                " "

"="                     "="

<SPACES>                " "

<IDENTIFIER>            "n"

";"                     ";"

<SPACES>                "\r\n   "

"return"                "return"

<SPACES>                " "

<IDENTIFIER>            "local_a"

";"                     ";"

<SPACES>                "\r\n"

"}"                     "}"

<SPACES>                "\r\n"

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "main"

"("                     "("

"int"                   "int"

<SPACES>                " "

<IDENTIFIER>            "argc"

","                     ","

<SPACES>                " "

"char"                  "char"

"*"                     "*"

"*"                     "*"

<SPACES>                " "

<IDENTIFIER>            "argv"

")"                     ")"

"{"                     "{"

<SPACES>                "\r\n   "

<IDENTIFIER>            "func"

"("                     "("

<INTEGER>               "2"

","                     ","

<INTEGER>               "3"

")"                     ")"

";"                     ";"

<SPACES>                "\r\n   "

"return"                "return"

<SPACES>                " "

<INTEGER>               "0"

";"                     ";"

<SPACES>                "\r\n"

"}"                     "}"

<SPACES>                "\r\n"

<EOF>                   ""

2.抽象语法树

<<AST>> (helloworld.cb:1)

variables:

<<DefinedVariable>> (helloworld.cb:1)

name: "global_a"

isPrivate: false

typeNode: int

initializer:

<<IntegerLiteralNode>> (helloworld.cb:1)

typeNode: int

value: 5

<<DefinedVariable>> (helloworld.cb:2)

name: "global_b"

isPrivate: false

typeNode: long

initializer: null

<<DefinedVariable>> (helloworld.cb:3)

name: "global_c"

isPrivate: false

typeNode: char*

initializer:

<<StringLiteralNode>> (helloworld.cb:3)

value: "HelloWorld!"

<<DefinedVariable>> (helloworld.cb:4)

name: "global_array"

isPrivate: false

typeNode: int[5]

initializer: null

<<DefinedVariable>> (helloworld.cb:5)

name: "global_struct"

isPrivate: false

typeNode: struct point

initializer: null

functions:

<<DefinedFunction>> (helloworld.cb:10)

name: "func"

isPrivate: false

params:

parameters:

<<Parameter>> (helloworld.cb:10)

name: "m"

typeNode: int

<<Parameter>> (helloworld.cb:10)

name: "n"

typeNode: int

body:

<<BlockNode>> (helloworld.cb:10)

variables:

<<DefinedVariable>> (helloworld.cb:11)

name: "local_a"

isPrivate: false

typeNode: int

initializer:

<<IntegerLiteralNode>> (helloworld.cb:11)

typeNode: int

value: 4

stmts:

<<ExprStmtNode>> (helloworld.cb:12)

expr:

<<AssignNode>> (helloworld.cb:12)

lhs:

<<VariableNode>> (helloworld.cb:12)

name: "local_a"

rhs:

<<VariableNode>> (helloworld.cb:12)

name: "m"

<<ExprStmtNode>> (helloworld.cb:13)

expr:

<<AssignNode>> (helloworld.cb:13)

lhs:

<<VariableNode>> (helloworld.cb:13)

name: "local_a"

rhs:

<<VariableNode>> (helloworld.cb:13)

name: "n"

<<ReturnNode>> (helloworld.cb:14)

expr:

<<VariableNode>> (helloworld.cb:14)

name: "local_a"

<<DefinedFunction>> (helloworld.cb:16)

name: "main"

isPrivate: false

params:

parameters:

<<Parameter>> (helloworld.cb:16)

name: "argc"

typeNode: int

<<Parameter>> (helloworld.cb:16)

name: "argv"

typeNode: char**

body:

<<BlockNode>> (helloworld.cb:16)

variables:

stmts:

<<ExprStmtNode>> (helloworld.cb:17)

expr:

<<FuncallNode>> (helloworld.cb:17)

expr:

<<VariableNode>> (helloworld.cb:17)

name: "func"

args:

<<IntegerLiteralNode>> (helloworld.cb:17)

typeNode: int

value: 2

<<IntegerLiteralNode>> (helloworld.cb:17)

typeNode: int

value: 3

<<ReturnNode>> (helloworld.cb:18)

expr:

<<IntegerLiteralNode>> (helloworld.cb:18)

typeNode: int

value: 0

3.中间代码

<<IR>> (helloworld.cb:1)

variables:

<<DefinedVariable>> (helloworld.cb:1)

name: global_a

isPrivate: false

type: int

initializer:

<<Int>>

type: INT32

value: 5

<<DefinedVariable>> (helloworld.cb:2)

name: global_b

isPrivate: false

type: long

initializer: null

<<DefinedVariable>> (helloworld.cb:3)

name: global_c

isPrivate: false

type: char*

initializer:

<<Str>>

type: INT32

entry: net.loveruby.cflat.entity.ConstantEntry@13fd745

<<DefinedVariable>> (helloworld.cb:4)

name: global_array

isPrivate: false

type: int[5]

initializer: null

<<DefinedVariable>> (helloworld.cb:5)

name: global_struct

isPrivate: false

type: struct point

initializer: null

functions:

<<DefinedFunction>> (helloworld.cb:10)

name: func

isPrivate: false

type: int(int, int)

body:

<<Assign>> (helloworld.cb:11)

lhs:

<<Addr>>

type: INT32

entity: local_a

rhs:

<<Int>>

type: INT32

value: 4

<<Assign>> (helloworld.cb:12)

lhs:

<<Addr>>

type: INT32

entity: local_a

rhs:

<<Var>>

type: INT32

entity: m

<<Assign>> (helloworld.cb:13)

lhs:

<<Addr>>

type: INT32

entity: local_a

rhs:

<<Var>>

type: INT32

entity: n

<<Return>> (helloworld.cb:14)

expr:

<<Var>>

type: INT32

entity: local_a

<<DefinedFunction>> (helloworld.cb:16)

name: main

isPrivate: false

type: int(int, char**)

body:

<<ExprStmt>> (helloworld.cb:17)

expr:

<<Call>>

type: INT32

expr:

<<Addr>>

type: INT32

entity: func

args:

<<Int>>

type: INT32

value: 2

<<Int>>

type: INT32

value: 3

<<Return>> (helloworld.cb:18)

expr:

<<Int>>

type: INT32

value: 0

4.汇编代码

.file "helloworld.cb"

.data

.globl global_a

.align 4

.type global_a,@object

.size global_a,4

global_a:

.long 5

.globl global_c

.align 4

.type global_c,@object

.size global_c,4

global_c:

.long .LC0

.section .rodata

.LC0:

.string "HelloWorld!"

.text

.globl func

.type func,@function

func:

pushl %ebp

movl %esp, %ebp

subl $4, %esp

movl $4, %eax

movl %eax, -4(%ebp)

movl 8(%ebp), %eax

movl %eax, -4(%ebp)

movl 12(%ebp), %eax

movl %eax, -4(%ebp)

movl -4(%ebp), %eax

jmp .L0

.L0:

movl %ebp, %esp

popl %ebp

ret

.size func,.-func

.globl main

.type main,@function

main:

pushl %ebp

movl %esp, %ebp

movl $3, %eax

pushl %eax

movl $2, %eax

pushl %eax

call func

addl $8, %esp

movl $0, %eax

jmp .L1

.L1:

movl %ebp, %esp

popl %ebp

ret

.size main,.-main

.comm global_b,4,4

.comm global_array,20,4

.comm global_struct,8,8

《深入理解Android虚拟机内存管理》示例程序编译阶段生成的各种语法树完整版的更多相关文章

  1. 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩

    百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...

  2. 深入理解Java虚拟机—内存管理机制

    前面说过了类的加载机制,里面讲到了类的初始化中时用到了一部分内存管理的知识,这里让我们来看下Java虚拟机是如何管理内存的. 先让我们来看张图 有些文章中对线程隔离区还称之为线程独占区,其实是一个意思 ...

  3. 理解Android虚拟机体系结构

    1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  4. 理解Android虚拟机体系结构(转)

    1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  5. Android 之 内存管理-查看内存泄露(三)

    概述 在android的开发中,要时刻主要内存的分配和垃圾回收,因为系统为每一个dalvik虚拟机分配的内存是有限的,在google的G1中,分配的最大堆大小只有16M,后来的机器一般都为24M,实在 ...

  6. 深入理解C语言内存管理

    之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少. 问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及 ...

  7. Android Dalvikvm 内存管理理解

    网上非常多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,到底是怎样实现的. 这几天猛看了 Dalvikvm 的源码,说一下我的理解: 在大层面上讲跟理论一样,jvm 把内存分成了一些 ...

  8. 深入理解java虚拟机---java虚拟机内存管理(五)

    1.深入理解java虚拟机 总图: 1.线程共享区: 2.线程独占区: 1.程序计数器 理解为当前线程锁执行的字节码的行号指示器,程序计数器没有内存异常错误.

  9. davlik虚拟机内存管理之一——内存分配

    转载自http://www.miui.com/thread-74715-1-1.html dalvik虚拟机是Google在Android平台上的Java虚拟机的实现,内存管理是dalvik虚拟机中的 ...

随机推荐

  1. 6)STM32使用HAL库实现modbus的简单通讯

    1.判断地址.校验 2.读取本机数据并校验打包 3.发送数据包 4.本机数据长度比要读取的长度短怎么办 4.校验错误怎么办

  2. mysql的一些高级查询

     1,查出学生详情表性别为男,并同时年龄大于18的  2,根据上述的结果,查出学生表对应的姓名,年龄,性别,address  3,查出学生的(姓名,年龄,性别,所属学院) 还可以添加注释

  3. SecureCRT 的使用技巧

    SecureCRT 支持 SSH1,SSH2,Telnet,RLogin,Serial,和 TAPI 协议, 一般用来登录Linux服务器进行跨系统操作,也可代替 超级终端,进行串口 调试. 1.串口 ...

  4. Linux下diff与patch命令的配合使用

    在Linux下,diff与patch命令配合使用可以进行简单的代码维护工作. [A] diff diff命令用于比较文件的差异,可以用于制作patch文件.但此命令参数众多.格式多样,所以在此仅介绍较 ...

  5. MSXML2

    The following C/C++ example creates and appends a new text node to the root document element. #impor ...

  6. hibernate使用c3p0数据源

    在配置好hibernate连接数据库环境的前提下,我们进行例如以下操作就能够搭建好hibernate中使用c3p0数据源的环境了. 1). 导入 jar 包: hibernate-release-4. ...

  7. BPMN使用工具

    EA  非常多设计人员都在使用EA.他不仅支持UML,相同也全然支持BPMN2.0.<BPMN规范中的三种视图 >展示的BPMN中三种视图就是使用此工具所绘制. activitidesig ...

  8. C# textbox中输入时加限制条件 // C#Winform下限制TextBox只能输入数字 // 才疏学浅(TextBox 小数点不能在首位+只能输入数字)

    textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用 ...

  9. poj 3662 Telephone Lines(最短路+二分)

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6973   Accepted: 2554 D ...

  10. easyui+struts2:datagrid无法不能得到数据

    转自:https://bbs.csdn.net/topics/390980437 easyui+struts2:datagrid无法访问到指定action: userlist.jsp部分代码: XML ...