`
liumengfan
  • 浏览: 32912 次
  • 性别: 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> 
分享到:
评论

相关推荐

    使用erlang的动态执行编写DSL

    在Erlang中实现DSL,我们可以利用其动态类型和元编程特性。Erlang代码可以在运行时解析并执行,这使得动态构建和执行DSL成为可能。通过这种方式,开发者可以创建出符合业务逻辑的简洁表达方式,提高代码的可读性和可...

    erlang代码热替换与应用部署

    本文将深入探讨Erlang中的代码热替换(Code Replacement)技术及其在应用部署中的重要性。 代码热替换是Erlang的一大特色,它允许在不中断运行服务的情况下更新和替换正在运行的代码。这一特性使得Elang系统可以在...

    tsung+erlang包

    它使用 Erlang 语言编写,Erlang 是一种为并发和分布式系统设计的编程语言,以其容错性和高可靠性而闻名。 Erlang 是由瑞典电信设备制造商 Ericsson 开发的,它的并发模型使得在处理大规模并发连接时表现出色,因此...

    erl_fuzzy_match:Erlang 模糊字符串匹配器

    Erlang 模糊字符串匹配器 Erlang 的模糊字符串匹配器汇集了一些算法,使模糊字符串匹配可用作 Erlang 程序的库。 这段代码的灵感来自于的 Python 代码 概述 模糊匹配器作为节点本地运行,名为gen_server ,它保存...

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

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

    KMP(Erlang)代码实现

    由于部分内容中存在OCR扫描错误,但整体上代码逻辑清晰,我们能够理解其算法实现的要点,以及如何利用Erlang的特性来编写高效的字符串匹配算法。这种语言的函数式编程风格使得代码具有很好的可读性和易理解性。在...

    bstr:Erlang库将二进制文件用作字符串

    Erlang库将二进制文件用作字符串。 要求 在以下OTP版本中进行了测试: 17.1 17.0 R16B03-1 R16B03 R16B02 R16B01 安装 要初始化项目,请运行make bootstrap 。 要编译模块,您只需运行make 。 要运行单元...

    erlang lib of iconv

    Erlang是一种并发性极强、适合构建分布式系统的动态类型语言,而iconv库则提供了在Erlang环境中处理字符串编码问题的能力。 首先,我们来了解一下字符编码的基本概念。字符编码是将字符与数字对应起来的方式,常见...

    一种傻纸牌游戏的Erlang实现

    标题 "一种傻纸牌游戏的Erlang实现" 暗示了我们将探讨一个使用Erlang编程语言构建的简单纸牌游戏。Erlang是一种并发性极强、功能丰富的函数式编程语言,常用于构建分布式系统和高可用性的应用程序。 在描述中提到的...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

     Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适 合于构建分布式,实时软并行计算系统。 使用Erlang编写出的应用运行时...

    Erlang v21.2 Windows 64位 最新安装版(附安装教程+环境变量配置).rar

    通常需要将Erlang的bin目录添加到系统的PATH环境变量中,这样在任何目录下都可以通过命令行调用Erlang的工具和应用程序。例如,Erlang的`erl`命令行接口,用于启动Erlang shell,进行交互式编程或执行Erlang模块。 ...

    在erlang项目中使用protobuf例子

    由于无法直接访问这个链接,我将基于protobuf在Erlang中的常见用法来解释相关知识点。 1. **protobuf安装与编译**:首先,你需要在Erlang项目中安装protobuf的Erlang库,这通常通过rebar3或erlang.mk等构建工具完成...

    erlang压缩包.rar

    1. **轻量级进程**:Erlang中的进程非常高效,消耗资源少,可以创建数百万个进程进行并发处理。 2. **分布式**:Erlang节点可以在多台机器上运行,通过简单的节点连接实现分布式计算。 3. **错误恢复**:Erlang提供...

    使用Erlang和Yaws开发REST式的服务

    在本文中,我们将探讨如何使用Erlang编程语言和Yaws Web服务器开发RESTful服务。Erlang是一种面向并发和分布式系统的语言,以其高可靠性而著称,而Yaws是由Claes Wikström用Erlang编写的高性能Web服务器,能够处理...

    erlang中文基础教程

    在 Erlang 中,用户可以使用模块和函数来实现复杂的计算任务。例如,用户可以创建一个模块,定义一个函数来实现某个计算任务,然后在 Erlang Shell 中调用该函数来实现任务。 4. 编译和运行 在 Erlang 中,用户...

    erlang资源

    6. **并行算法**:书中可能包含实例,演示如何使用Erlang实现高效的并行算法,提升计算性能。 《Erlang入门手册》则可能包含以下基础内容: 1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二...

    erlang 20.3.zip

    5. **Unicode增强**:Erlang 20.3对Unicode字符串处理进行了加强,支持更多的Unicode特性。 6. **R19向R20迁移的兼容性**:确保了从旧版本到20.3的平滑迁移,减少了升级过程中的兼容性问题。 在使用这个压缩包安装...

    使用erlang连接ES的客户端

    在IT领域,Erlang是一种面向并发的、...总的来说,使用Erlang连接Elasticsearch客户端,可以帮助开发者高效地与ES服务器交互,利用Erlang的强大并发性和函数式编程特性,实现稳定、高性能的搜索和数据分析解决方案。

    Erlang基础知识集锦

    - 字符串:Erlang中没有专门的字符串类型,字符串实际上是一系列整数列表,使用双引号包围字符表示。 Erlang基本语法包括: - 模块:源文件扩展名为.erl,编译后的文件扩展名为.beam,编译命令为c(Modulename)。 - ...

    Erlang应用部署与热代码替换--理解2

    通常,开发者会在新版本的代码中实现`code_change/3`函数,这是一个关键组件,用于处理从旧版本到新版本的数据转换。该函数接收旧状态、旧版本号和新版本号作为参数,返回新状态。当进程因热代码替换而重启时,`code...

Global site tag (gtag.js) - Google Analytics