bry*_*sho 0 erlang evaluation term erlang-shell
我正在尝试动态评估Erlang术语
启动Erlang
basho-catah% erl
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
Run Code Online (Sandbox Code Playgroud)
创建一个术语
1> {a,[b,c,d]}.
{a,[b,c,d]}
Run Code Online (Sandbox Code Playgroud)
尝试在同一个词中扫描
2> {ok, Tokens, _ } = erl_scan:string("{a,[b,c,d]}").
{ok,[{'{',1},
{atom,1,a},
{',',1},
{'[',1},
{atom,1,b},
{',',1},
{atom,1,c},
{',',1},
{atom,1,d},
{']',1},
{'}',1}],
1}
3> Tokens.
[{'{',1},
{atom,1,a},
{',',1},
{'[',1},
{atom,1,b},
{',',1},
{atom,1,c},
{',',1},
{atom,1,d},
{']',1},
{'}',1}]
Run Code Online (Sandbox Code Playgroud)
但它无法解析该标记化字符串.
4> Foo = erl_parse:parse(Tokens).
{error,{1,erl_parse,["syntax error before: ","'{'"]}}
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
你使用的是错误的功能,还有一个你没有遇到过的警告.
首先,您应该使用的功能是erl_parse:parse_term/1.我实际上无法找到文档erl_parse:parse/1,因此我怀疑它已被弃用(并且很可能用于解析抽象语法树,而不是令牌).
其次,erl_parse:parse_term/1要使用,您必须在术语中包含终止点字符.erl_scan:string/1很乐意将你给它的任何东西转换为代币,但没有终结者erl_parse:parse_term/1希望得到更多.
所以,在shell中尝试以下内容:
{ok, Tokens, _} = erl_scan:string("{a,[b,c,d]}.").
erl_parse:parse_term(Tokens).
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |