如何编译加载到字符串中的erlang代码?

2024-01-09

我有一个生成的字符串,其中包含 erlang 模块的代码。

有没有办法直接从字符串编译生成的模块?

或者有没有办法将字符串转换为所需的格式compile:forms/1?

或者我必须先将其保存到临时文件中,然后使用compile:file/1?

或者,我可以添加对编译模块的支持,但是编写 erlang 的好人没有添加它肯定是有原因的。


您需要将字符串扫描为标记,然后将标记解析为表单。 不幸的是,一次只能解析一种表单,因此您需要在表单边界处剪切字符串或标记。这是一个简短的例子:

% create tokens from strings containing forms
> {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,EF} = erl_parse:parse_form(ETs).
> {ok,FF} = erl_parse:parse_form(FTs).

% compile forms to binary
> {ok, z, Bin} = compile:forms([MF,EF,FF]).
{ok,z,<<70,79,82,49,0,0,1,164,66,69,65,77,65,116,111,109,0,0,0,...>>}

% load module from binary
> code:load_binary(z, "nofile", Bin).
{module,z}

% test
> z:f().
hello_world

或者,您可以扫描字符串,然后将生成的标记列表剪切到{dot, _}令牌分开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编译加载到字符串中的erlang代码? 的相关文章

  • 如何强制 Perl 按需重新编译使用“/o”编译的正则表达式?

    技术问题 给定一个正则表达式 my regEx qr whatever myVar oxi Notice o for compile once 强制重新编译的最有效方法是什么一经请求 例如 当我从程序逻辑中知道 myVar值改变 而不下降
  • CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe)

    我们最近从旧的 CodeDomProvider 升级到名为 Microsoft CodeDom Providers DotNetCompilerPlatform 的新 Roslyn CodeDomProvider 它工作正常 但它在错误的位
  • Vim 无法在 OS X 上使用 python 进行编译

    我一直在尝试编译vim 7 3 with 蟒蛇2 7支持苹果系统 X 10 6 Vim 本身编译得很好 但嵌入的 python 编译得不太好 我已采取的步骤 hg clone https vim googlecode com hg vim
  • zipalign 验证失败 resources.arsc BAD-1

    我尝试将我的应用程序上传到 gplay 但失败 因为我的 apk 未压缩对齐 我尝试 zipalign 但验证失败 真的不知道 请有人告诉我该怎么做 提前致谢 我找到了一种更简单的方法 只需从命令行对齐 两次 对齐两次后我就可以上传我的ap
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • Erlang:有“epmd”的 API 吗?

    有没有办法查询 epmd 守护进程管理的名称表 The nodes 函数在这方面不是很有帮助 注意 我正在寻找 APIaside解析通过 stdout 生成的输出 要查询 epmd 可见的节点 请调用 EpmdModule net kern
  • 调用函数时Erlang“未绑定变量”

    我正在尝试将整数参数 N 传递给cake并返回一个大小为 N 的 2 的平方列表 为了示例 例如面包店 蛋糕 3 gt 4 4 4 这是我到目前为止所做的尝试 module bakery export cake 1 Foo fun X gt
  • 学习在 Xcode 中编译 C++

    我已经开始在学校广泛使用 C 现在我的程序已经达到了拥有超过 1 个文件 即头文件 驱动程序 实现文件 的地步 我对软件开发了解不够 无法通过查看苹果的指南来理解或掌握如何设置构建过程 有人可以指导我如何在 xcode 中编译一个带有头文件
  • Scala - 如何解决“值不是 Nothing 的成员”错误

    此示例代码基于 Atmosphere 类 但如果有人可以让我了解该错误的一般含义 我想我可以找出任何特定于 Atmosphere 的解决方案 val bc BroadcasterFactory getDefault lookup broad
  • Node.js 10 的 TypeScript tsconfig 设置?

    有谁知道 Node js v10 x 需要哪些目标 库才能在没有生成器的情况下使用内置的 async await 我看到很多关于节点 8 的信息 但没有看到关于节点 10 的信息 从 Node js 开始10 0 0 100 支持ES201
  • 如何在Windows中编译nDPI库自带的ndpiReader.c?

    我想创建一个 exendpiReader c附带的演示程序nDPI library 我使用 github 页面上指定的命令成功地在 Ubuntu 上编译了它 如下所示 autogen sh configure make 我尝试在 Ubunt
  • 我应该将Python的pyc文件添加到.dockerignore吗?

    我见过几个例子 dockerignorePython 项目的文件 其中 pyc文件和 或 pycache 文件夹被忽略 pycache pyc 由于无论如何这些文件 文件夹都会在容器中重新创建 我想知道这样做是否是一个好习惯 是的 这是一个
  • 创建现有 ram 表的 mnesia disk_copies

    我有一个完整的 mnesia ram copies only 数据库 但在将 disk copy 表添加到节点时遇到问题 目前我这样做 创建我所有的 ram copy 表 节点 在disk copy to be节点上启动mnesia 使用以
  • 如何在 Ubuntu Karmic 上安装 LFE?

    Erlang 已经安装 dpkg l grep erlang ii erlang 1 13 b 3 dfsg 2ubuntu2 Concurrent real time distributed function ii erlang appm
  • 是什么让 Erlang 适合软实时应用程序? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 一些背景 我正在致力于构建一种用于数字媒体编程的编程语言 它应该支持使用非共享消息传递和软实时的并发性 即尽最大努力计算音频 视频而不会丢失样本
  • WhatsApp 如何实现每台服务器 200 万个连接?

    在 Ubuntu 上 可以打开的最大套接字数似乎受以下控制 cat proc sys net ipv4 tcp max orphans 262144 根据 Rick Reed 来自 WhatsApp 的一次演示 这些人使用 FreeBSD
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 如何在iPhone中编译Eigen

    我想编译 Eigen 并在具有 NEON 功能的 iPhone 中使用它 如何在iPhone中编译Eigen 是否需要针对特定 ARM芯片进行编译 我需要修改构建脚本吗 Cheers 由于最新版本的 Eigen 开箱即用地支持 ARM NE
  • 如何使用 erlang-examples

    我刚刚使用下载了 Erlangapt get onto 乌班图10 10 我如何运行Erlang附带的示例 您可以通过apt get install erlang examples 我尝试进入它们存储的目录并编译ball erl 但我得到了
  • 未定义的行为真的有助于现代编译器优化生成的代码吗?

    现代编译器不是足够聪明 能够生成快速且安全的代码吗 看下面的代码 std vector

随机推荐

  • 使用 LESS 递归获取当前索引

    我正在尝试做到这一点 我有一个像这样的数组 levels level one level two level three level four level five level six level seven level eight 每个级
  • iPhone超声波检测(超过22kHz)

    iphone 3GS及以上型号能检测到的最大频率是多少 我一直在探索iPhone音频 我需要在没有任何外部设备的情况下检测 22 kHz 的声音频率 是否可以 如果麦克风设计得好 它将有一个抗混叠滤波器 其滚降始于略低于奈奎斯特频率 以确保
  • ffmpeg水印处理速度很慢

    我正在开发一个视频处理项目并使用 ffmpeg 进行水印 我完全实现了我想要的 但问题是这个过程非常非常慢 我在 32 位操作系统 Microsoft Windows 8 64 位 CPU 上使用具有 4GB RAM 的英特尔智能第二代系列
  • iOS8中用户默认的plist文件存储在哪里?

    我找不到首选项 plist 文件 因为首选项文件夹为空 要获取库文件夹 我使用 println NSSearchPathForDirectoriesInDomains LibraryDirectory UserDomainMask true
  • 在 MongoDB 中的 Angular.js 中显示图像

    我最近打开了另一个关于如何使用 node js mongoose 在 mongodb 数据库中存储图像的线程 使用猫鼬保存图像 https stackoverflow com questions 27353346 saving image
  • Django:通过“field__isnull=True”或“field=None”过滤查询集?

    我必须通过动态值 可以是 无 过滤查询集 我可以简单地写 filtered queryset queryset filter field value 或者我应该检查 无 if value is None filtered queryset
  • 设置 Cygwin + Android NDK + cocos2Dx 以与 Eclipse 配合使用

    我正在关注该网站的教程 通过游戏应用货币化 作者 Todd Perkins http www lynda com Android tutorials Understanding downloading Cocos2d x 107169 12
  • BASH 数组索引减去最后一个数组

    这是一个困扰我的问题 我需要从用户输入中读取版本号 并且我想使用存储版本号的数组的长度创建一个 菜单 然而 BASH 的神秘语法在这里对我没有帮助 echo VERSIONS 2 0 10 1 2 0 7 1 2 0 7 1 2 0 7 1
  • 数据表:尝试以 csv 格式获取每个表行的选定单选按钮值

    我正在使用 jquery 数据表插件 我想做的是以 CSV 逗号分隔值 格式获取所有选定的单选按钮值 由于记录太多 所以使用分页 当我选择第一页上的单选按钮时 我可以获取 CSV 中所有选定的单选按钮值 运行良好 当我转到第二页并选择单选按
  • 使用 nginx 记录已解析的请求

    如何为 nginx 设置自定义日志格式 以便解析请求并单独记录其各部分 我们提供图片文件来统计邮件的打开次数 图片的 URL 有所不同 但遵循以下规则 http www server com counter XXXXX YYYYY dail
  • GitHub 操作:致命:无法读取“https://github.com”的用户名:设备未配置

    我试图让git clone在私人存储库上使用 Github Action 但我不确定应该如何配置它以使用 SSH 连接到 GitHub 顺便说一句 它是 macOS 运行程序 此时此刻 actions checkout工作正常 但是当我打电
  • 通过互联网传输数据的最简单方法,Python

    我有两台电脑 都连接到互联网 我想在它们之间传输一些基本数据 字符串 整数 浮点数 我是网络新手 所以我正在寻找最简单的方法来做到这一点 我需要哪些模块来做到这一点 两个系统都将运行 Windows 7 只要它不是异步的 同时发送和接收 您
  • VBscript 的递归问题

    我正在尝试在 vbscript 中实现一些递归 Function largest prime factor ByVal num For i 2 to num 2 If num mod i 0 Then this number is not
  • 如何获取特定用户的 Windows“特殊文件夹”路径?

    在服务内部 确定特定用户的特殊文件夹路径 例如 我的文档 的最佳方法是什么 SHGetFolderPath允许您传递令牌 因此我假设有某种方法可以模拟您感兴趣的文件夹的用户 有没有办法仅根据用户名来执行此操作 如果没有 用户帐户所需的最少信
  • 多行“ReplacementSpan”绘图问题

    只要文本不太长 我的自定义替换跨度就可以工作 但一旦文本长于一行 跨度绘图就会完全崩溃 我的理解是draw 在这种情况下被调用两次导致跨度绘制两次 无法区分第二个绘制调用和第一个绘制调用 从而使您可以控制绘制内容和绘制位置 start an
  • 如何使用 PlayFramework 压缩 html

    为了提高 Scala 表单的可读性 我经常使用缩进和换行 但是 当我在 play 应用程序启动并运行时验证 HTML 时 我看到很多空格和不必要的换行符 有什么理由压缩此 HTML 而不 使我的 scala 模板不可读 Thanks 正如另
  • 无法找到 Android SDK

    我已经有了安卓工作室 https en wikipedia org wiki Android Studio并安装了 Android SDK 后来我添加了 Flutter 和 Flutter SDK 这是我的问题 当我跑步时 flutter
  • 从最新的 rss 中排序日期

    我应该如何对日期进行排序 最新的在顶部 目前 日期尚未排序 下面是我的 JSFiddle http jsfiddle net qoLg6dnu http jsfiddle net qoLg6dnu document ready functi
  • android api与谷歌地图显示网格

    我正在创建一个使用谷歌地图 API v2 的 Android 应用程序 我相信我已经按照谷歌教程所述完成了所有操作 但我仍然只得到谷歌地图网格 没有地图 我使用 keystore debug 的 SHA1 创建了一个调试密钥 以下是我的设置
  • 如何编译加载到字符串中的erlang代码?

    我有一个生成的字符串 其中包含 erlang 模块的代码 有没有办法直接从字符串编译生成的模块 或者有没有办法将字符串转换为所需的格式compile forms 1 或者我必须先将其保存到临时文件中 然后使用compile file 1 或