문자열을 토큰으로 스캔 한 다음 토큰을 양식으로 구문 분석해야합니다. 불행히도 한 번에 하나의 양식 만 구문 분석 할 수 있으므로 양식 경계에서 문자열이나 토큰을 잘라야합니다.
% 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, _}
떨어져 토큰에 다음 결과 토큰리스트를 잘라 : 여기에 간단한 예입니다.
좋아, 고마워, 내가 그것을 다 흘려야한다는 것을 몰랐다. D –
오타가 수정되었습니다. 나는 당신이 전체 소스 코드를 하나의 문자열에 넣고 그것을 스캔 한 다음 각 {{dot, _}}에서 토큰리스트를자를 수 있다고 생각한다. – Zed
또한이 방법이 포함되지 않는다는 점에 유의하십시오 (참조 : http://stackoverflow.com/questions/2013119/compile-forms-with-included-header-files) – Zed