Erlang Abstract Form--生成和获取

本文介绍了Erlang的Abstract Form,用于理解Erlang内部解析树的生成和获取方法。主要内容包括从beam文件中获取Abstract Form,使用beam_lib:chunks函数以及编译选项debug_info。通过示例展示了在不同编译选项下如何获取模块的Abstract Form。
摘要由CSDN通过智能技术生成

 Erlang Abstract Form--生成和获取
Smerl通过修改Erlang的内部解析树,并重新编译这棵解析树实现meta programming。为了理解Smerl,我们首先需要理解Erlang内部解析树的生成、表达形式和获取、修改的方法。
Erlang把解析树称为Abstract Form,要获得某一个模块的AbstractForm有两种方法:
    * 从已经编译的beam文件中获取Abstract Form
    * 直接解析源代码生成Abstract Form

在一个实际运行的程序中,我们可能无法存取源代码,即使能够获得源代码,它也不一定完全和正在运行的beam文件同步。因此,让我们首先把精力放在第一种方法上,第二种方法将在后面需要的时候描述。实际上两种方法只是在获得AbstractForm的方法上有所不同,而对Abstract Form的理解和操纵是完全一样的。

beam_lib 提供了操作beam文件所需要的接口。Erlang的beam文件格式是 "EA IFF 1985"标准的一个变种,它把数据分为多个 chunks. Chunk数据可以是二进制或者复合的term。如果通过名字(erlang的atom)去引用chunk,那么将返回复合term,当然这是我们需要的。
获取chunk的函数是beam_lib:chunks,例如

beam_lib:chunks(Beam,[abstract_code])

将返回Beam变量所指定的beam文件中包含的abstract_code,也就是我们需要的Abstract Form。当然,除了abstract_code以外,chunks函数还可以用来获得以下的各种调试信息࿱

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值