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. BZOJ 1606 USACO 2008 Dec. 购买干草

    [题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...

  2. BZOJ 4327 [JSOI2012]玄武密码 (AC自动机)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4327 题解: 做法挺显然,建出AC自动机之后在上面跑,标记所有走过的点,然后再进行递推 ...

  3. 【codeforces 514E】Darth Vader and Tree

    [题目链接]:http://codeforces.com/problemset/problem/514/E [题意] 无限节点的树; 每个节点都有n个儿子节点; 且每个节点与其第i个节点的距离都是ai ...

  4. Hadoop2.2.0 注意事项

    1.启动前必须把防火墙关了,要不然会导致nodemanager启动不了. 关闭防火墙:service iptables stop 永久关闭(重启后默认关闭):chkconfig iptables of ...

  5. N天学习一个linux命令之netstat

    用途 打印网络连接,路由表,网卡信息,假连接,组播成员信息 用法 1 显示网络连接信息 netstat [address_family_options] [--tcp|-t] [--udp|-u] [ ...

  6. [Cocos2d-x v3.x]Mac OX 创建新的Cocos2d-x 3.0 项目

    文章内容来自于: http://cocos2d-x.org/wiki/How_to_Start_A_New_Cocos2D-X_Game Mac OS X 10.9 Software Requirem ...

  7. elciple中怎样设置字体大小

    (1)假设想改变Java代码字体大小等 Window->perference->General->Appearance->Colors and Fonts->找到 须要更 ...

  8. 一个基于cocos2d-x 3.0和Box2d的demo小程序

    p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/details/6776096和http://www.cnblogs ...

  9. PHP中JSON的应用

    文章来源:PHP开发学习门户 地址:  http://www.phpthinking.com/archives/513 互联网的今天,AJAX已经不是什么陌生的词汇了.说起AJAX,可能会马上想起因R ...

  10. linux下apache+openssl配置记录

    软件环境 Apache Httpd 2.2.29 (http://httpd.apache.org ) OpenSSL 1.0.1h (http://www.openssl.org/source ) ...