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. Spider-Python实战之通过Python爬虫爬取图片制作Win7跑车主题

    1. 前期准备 1.1 开发工具 Python 3.6 Pycharm Pro 2017.3.2 Text文本 1.2 Python库 requests re urllib 如果没有这些Python库 ...

  2. 腾讯云&搭建微信小程序服务

    准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可 ...

  3. PAT 1094. The Largest Generation (层级遍历)

    A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level bel ...

  4. 8 pandas模块,多层索引

      1 创建多层索引     1)隐式构造         最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组           · Series也可以创建多层索引    ...

  5. hdu2014 青年歌手大奖赛_评委会打分【C++】

    青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. GlobalSign 增强型(EV) SSL 证书

    GlobalSign 增强型(EV) SSL 证书,属于最高验证级别的EV SSL,验证域名所有权,进行严格的企业真实身份验证,证书标识企业组织机构名称,强化信任度,浏览器地址栏变绿色.提供40位/5 ...

  7. 【Codeforces 158C】Cd and pwd commands

    [链接] 我是链接,点我呀:) [题意] 让你实现Shell的cd和pwd操作 [题解] 用一个list表示当前的路径 如果路径以/开头则表示需要清空当前路径重新走路 否则在原来路径的基础上继续加就可 ...

  8. 【郑轻邀请赛 B】base64解密

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2128 [题意] [题解] 把密文; 在表中找到每个字符对应的数字; 然后转换成相应的 ...

  9. nyoj_60_谁获得了最高奖学金_201311281117

    谁获得了最高奖学金 时间限制:1000 ms  |           内存限制:65535 KB 难度:2   描述     某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取 ...

  10. EPEL reporsitory

    在centos 5上yum install git的时候报错说没有git这个package. 这是因为centos的软件策略非常保守,因为它基本就是redhat企业版的copy.所以想在centos5 ...