erl_scan 模块摘要 Erlang令牌扫描仪。 描述 该模块包含将字符标记(扫描)到Erlang令牌中的功能。 数据类型 category() = atom() error_description() = term() error_info() = {erl_anno:location(), module(),error_description()} option() = return | ...
我曾经介绍过开源项目smerl,其定位就是Simple Metaprogramming for Erlang, 我们可以从这份代码里面学到erl_scan erl_parse erl_eval更灵活的应用,项目地址:http://code.google.com/p/smerl/ 1 2 3 4 5 6 7 test_smerl() -> M1 = smerl:new(foo), {ok, M2} = smerl:add_func(M1,"bar() -> ...
上面的代码其实很简单,最核心的部分,在于parse_func_string/1函数,他利用erl_scan:string/1将一段字符串转换成了tokens, 接下来用erl_parse:parse_form/1将这段tokens解析成ASF (就是erlang的erlang 的Abstract Format,关于ASF,大家可以移步erlang的文档http://www.erlang.org/doc/apps/erts/absform.html,这里...
{value, Value,_} = erl_eval:exprs(Parsed,[]), 1. Value. 1. 在Shell里面练习一下,为了简单就直接在Shelll里面定义fun使用了: Eshell V5.9 (abort with ^G) 1. 1> F=fun(S) -> 1. {ok,Scanned,_} = erl_scan:string(S), 1. {ok,Parsed} = erl_parse:parse_exprs(Scanned), 1. {v...
erl_internal, erl_lint, erl_parse, erl_posix_msg, erl_pp, erl_scan, erl_tar, error_logger_file_h, error_logger_tty_h, escript, ets, file_sorter, filelib, filename, gb_trees, gb_sets, gen, gen_event, gen_fsm, gen_server, ...
合法:>erl_parse:parse_exprs(element(2,erl_scan:string("A + B."))).{ok,[{op,1,'+',{...
R13B新添加的leex相当于c的lex, 在做文法分析非常方便,但是效率如何呢? leex的example里面带了个erlang_scan和erlang标准的发布版的erl_scan兼容,所以我们来对比测试下效率。 注意用R13B03,因为R13B02的erlc漏掉了编译xrl格式。 以下是实验: root@nd-desktop:~# git clone git://github.com/rvirding/leex.git...
通常情况下我们在eshell 里面输入的东西都是动态eval的. erl还支持命令行动态解释. erl -eval e init.erl start_it({eval,Bin}) -> Str = binary_to_list(Bin), {ok,Ts,_} = erl_scan:string(Str), Ts1 = case reverse(Ts) of [{dot,_}|_] -> Ts; ...
> {ok, MTs, _} = erl_scan:string("-module(z)."). > {ok, ETs, _} = erl_scan:string("-export([f/0])."). > {ok, FTs, _} = erl_scan:string("f() -> hello_world."). % tokens to erl_parse trees > {ok,MF} = erl_parse:parse_form(MTs). ...
{ok, Tokens, Endline } = erl_scan:string("1 + X."). erlang:display(Tokens). {ok, Abstract} = erl_parse:parse_exprs(Tokens). Bindings = erl_eval:new_bindings(). NewBindings = erl_eval:add_binding('X', 2, Bindings). {value, Result, _} = erl_eval:exprs(Abstract, NewBindings...