abstract_code 和erl文件的互相转换

erl <=> abstract_code
erl => abstract_code
erlc +debug_info test.erl
{ok, {_, [{abstract_code, {_, Abs}}]}} = beam_lib:chunks(test, [abstract_code]).
abstract_code => erl
S = erl_prettypr:format(erl_syntax:form_list(Abs)).
file:write_file("test_code", term_to_binary(S)).
ep:
erl => abstract_code
$ cat test.erl
-module(test).
-export([start/0]).
-ifdef(TEST).
hello() ->
   io:format("########1~n").
-else.
hello() ->
   io:format("########2").
-endif.
start() ->
   hello().
$   
$ erlc +debug_info test.erl
$ erl
1> {ok, {_, [{abstract_code, {_, Abs}}]}}=beam_lib:chunks(test, [abstract_code                                 ]).
{ok,{test,
        [{abstract_code,
             {raw_abstract_v1,
                 [{attribute,1,file,{"c:/Users/4399/Desktop/test.erl",1}},
                  {attribute,1,module,test},
                  {attribute,2,export,[{start,0}]},
                  {function,7,hello,0,
                      [{clause,7,[],[],[{call,8,{remote,...},[...]}]}]},
                  {function,11,start,0,
                      [{clause,11,[],[],[{call,12,{...},...}]}]},
                  {eof,15}]}}]}}
abstract_code => erl
2> S = erl_prettypr:format(erl_syntax:form_list(Abs)).
"-file(\"c:/Users/4399/Desktop/test.erl\", 1).\n\n-module(test).\n\n-export([sta                                 rt/0]).\n\nhello() -> io:format(\"########2\").\n\nstart() -> hello().\n\n"
3> file:write_file("test_code", term_to_binary(S)).
ok
$ cat test_code
僰▒-file("c:/Users/4399/Desktop/test.erl", 1).

-module(test).

-export([start/0]).

hello() -> io:format("########2").

start() -> hello().
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值