compiling a module from a string

Mats Cronqvist <>
Mon Jul 10 12:54:28 CEST 2006


Ulf Wiger (AL/EAB) wrote:
> I want to effectively call
> 
> Str = "-module(m).\n-export([foo/0]).\nfoo() -> foo.\n".
> compile:string(Str, [binary]).

   this should work iff there are no #@#$&* macros. if there is, it's pretty 
easy to write a subset of epp and call it between scanning and parsing.

   mats

cl(Text) ->
     Forms = scan_and_parse(Text,1,[]),
     {ok,Mod,Bin} = compile:forms(Forms),
     code:load_binary(Mod,"generated",Bin).

scan_and_parse([],_Line,Forms) -> lists:reverse(Forms);
scan_and_parse(Text,Line,Forms) ->
     {done,{ok,Toks,NLine},Cont} = erl_scan:tokens([],Text,Line),
     {ok,Form} = erl_parse:parse_form(Toks),
     scan_and_parse(Cont,NLine,[Form|Forms]).




More information about the erlang-questions mailing list