`
liumengfan
  • 浏览: 33551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用erlang实现动态替换字符串中的变量

阅读更多
通过erlang,我们可以使用
{ok, Ts, _} = erl_scan:string(String).
来获取Tokens,然后调用:
{ok, Expr} = erl_parse:parse_exprs(Ts).
转换成可以执行的表达式,之后通过
erl_eval:exprs(Expr, Binding).
来执行表达式。
实验步骤如下:
1> F =fun(Str,Binding) ->
1>      {ok,Ts,_} = erl_scan:string(Str),
1>      io:format("~p~n", [Ts]),
1>      Ts1 = case lists:reverse(Ts) of
1>               [{dot,_}|_] -> Ts;
1>               TsR -> lists:reverse([{dot,1} | TsR])
1>           end,
1>      io:format("~p~n", [Ts1]),
1>     {ok,Expr} = erl_parse:parse_exprs(Ts1),
1>     io:format("~p~n", [Expr]),
1>     erl_eval:exprs(Expr, Binding) end.
#Fun<erl_eval.12.113037538>
2> F("lists:concat(['haha',B,'ok!']).",[{'B',23}]).
[{atom,1,lists},
 {':',1},
 {atom,1,concat},
 {'(',1},
 {'[',1},
 {atom,1,haha},
 {',',1},
 {var,1,'B'},
 {',',1},
 {atom,1,'ok!'},
 {']',1},
 {')',1},
 {dot,1}]
[{atom,1,lists},
 {':',1},
 {atom,1,concat},
 {'(',1},
 {'[',1},
 {atom,1,haha},
 {',',1},
 {var,1,'B'},
 {',',1},
 {atom,1,'ok!'},
 {']',1},
 {')',1},
 {dot,1}]
[{call,1,
       {remote,1,{atom,1,lists},{atom,1,concat}},
       [{cons,1,
              {atom,1,haha},
              {cons,1,{var,1,'B'},{cons,1,{atom,1,'ok!'},{nil,1}}}}]}]
{value,"haha23ok!",[{'B',23}]}
3> 
分享到:
评论

相关推荐

    Match在JavaScript中实现类似于Erlang的模式匹配

    在JavaScript中,我们可以使用正则表达式来实现类似的功能,特别是在处理字符串时。正则表达式允许我们定义一套规则,用于查找、替换或验证文本模式。例如,我们可以通过构造一个正则表达式来匹配特定格式的数字或...

    Erlang Syntax For Notepad++

    这些文件可能包括`.xml`扩展名的文档,它们详细列出了Erlang的关键字、注释、字符串、常量等元素,并指定了它们在编辑器中的显示方式。 在提供的压缩包子文件的文件名称列表中: 1. "SourceForge_...

    Erlang语言介绍[E文]上

    ”字符串。 #### 运行Erlang Erlang虚拟机(BEAM)可以通过命令行启动,通常使用`erl`命令。在Windows环境中,应使用`werl`。交互式Shell允许用户输入并执行Erlang表达式,只需在每个表达式的末尾加上句号即可。 ...

    cpie-cn_r148.pdf

    - **内置函数(BIF)**:Erlang提供了大量的内置函数,这些函数可以用来执行各种操作,如列表处理、字符串操作等。 - **并发**:Erlang的设计初衷是为了支持大规模并发编程,这一节将介绍如何利用轻量级进程来实现并发...

    我的SlickEdit17设置文件

    例如,`java.als`可能是针对Java语言的配置,确保代码中的关键字、注释、字符串等元素以不同的颜色显示,帮助阅读和理解代码。 3. **代码折叠**:为了便于管理大型代码文件,`c.als`、`m.als`等文件可能包含代码...

    C++MFC教程

    CStringArray:用来表示可变长度的字符串数组。数组中每一个元素为CString对象的实例。下面介绍几个成员函数: Add 增加CString RemoveAt 删除指定位置CString对象 RemoveAll 删除数组中所有CString对象 GetAt ...

Global site tag (gtag.js) - Google Analytics