gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:39:42 24 4
gpt4 key购买 nike

我有一个生成的字符串,其中包含 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, _} 个标记分开。

关于erlang - 如何编译加载到字符串中的erlang代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com