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. 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

    使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致. dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供 ...

  2. IDEA 工具使用报错总结

    读前语:此文章仅给非入门级观看 1.使用Debug  无法运行,而使用Run 则正常启动,报错代码如下 1 Error running 'jx_web': Unable to open debugge ...

  3. VI 快捷操作 【持续更新】

    2014-9-23 一.   大小写转换 vim中大小写转化的命令是 gu或者gU 形象一点的解释就是小u意味着转为小写:大U意味着转为大写. 剩下的就是对这两个命令的限定(限定操作的行,字母,单词) ...

  4. 一键解决ScrollView嵌套ListView仅仅显示一行的问题

    /** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnCh ...

  5. ASP.NET MVC 4源代码分析之怎样定位控制器

    利用少有的空余时间.具体的浏览了下ASP.NET MVC 4的源代码.照着之前的步伐继续前进(尽管博客园已经存在非常多大牛对MVC源代码分析的博客,可是从个人出发.还是希望自己可以摸索出这些). 首先 ...

  6. Linux 大规模请求server连接数相关设置

    一般一个大规模Linuxserver请求数可能是几十万上百万的情况.须要足够的连接数来使用,所以务必进行对应的设置. 默认的Linuxserver文件描写叙述符等打开最大是1024.用ulimit - ...

  7. [Cypress] Test XHR Failure Conditions with Cypress

    Testing your application’s behavior when an XHR call results in an error can be difficult. The use o ...

  8. IntelliJ IDEA 问题总结之二(待补充) —— 快捷键、主题样式、导出jar、sqlite

    随着对idea的使用,问题越来越多,開始第二篇问题总结. 1.快捷键. 用惯了eclipse再用idea后,快捷键就是一个大问题. 并且网上idea的快捷键有非常多版本号.不知道是不是老版本号和新版本 ...

  9. Hadoop Web项目--Mahout0.10 MR算法集锦

    1. 涉及技术及下载 项目开发使用到的软件有:Myeclipse2014,JDK1.8.Hadoop2.6,MySQL5.6.EasyUI1.3.6,jQuery2.0,Spring4.1.3,Hib ...

  10. Python 下的数据结构实现

    既然采用了 Python 编程语言实现数据结构,就要充分发挥 Python 语言的语法特性. 参考<Python 算法教程><数据结构与算法 -- Python 语言描述>: ...