рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд╖рд╛рдПрдВ, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЖрджрд┐ рд╣реИрдВред
рдПрд░реНрд▓рд╛рдВрдЧ рдореЗрдВ, рдЕрдиреБрд╡рд╛рджрдХ рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд▓рд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВред рдЗрд╕реЗ рд░рд╣рдиреЗ рджреЛ - рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝ред
So. рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкрд╛рда рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред
Src = [ "-module(testmodule).", "-export([add_two_numbers/2]).", "-compile(native)." , "add_two_numbers(X,Y) -> X+Y."].
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ,
Lexems = lists:map(fun(X) -> {ok,Scanned,_} = erl_scan:string(X), Scanned end, Src).
рдирддреАрдЬрддрди, рд╣рдо рд▓реЗрдХреНрд╕рд┐рдпрдо рдореЗрдВ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣
[[{'-',1}, {atom,1,module}, {'(',1}, {atom,1,testmodule}, {')',1}, {dot,1}], [{'-',1}, {atom,1,export}, {'(',1}, {'[',1}, {atom,1,add_two_numbers}, ... ..
рдкрджрдЪреНрдЫреЗрдж
Parsed = lists:map(fun(X) -> {ok,P} = erl_parse:parse_form(X), P end, Lexems).
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдкрд╛рд░реНрд╕рдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рдкрдардиреАрдп рд░реВрдк рдореЗрдВред
[{attribute,1,module,testmodule}, {attribute,1,export,[{add_two_numbers,2}]}, {attribute,1,compile,native}, {function,1,add_two_numbers,2, [{clause,1, [{var,1,'X'},{var,1,'Y'}], [], [{op,1,'+',{var,1,'X'},{var,1,'Y'}}]}]}]
рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдкрд╣рд▓реЗ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛ рдмрдирд╛ рд░рд╣рд╛ред рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЯреНрд░реА рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ,
{ok,_,B} = compile:forms(Parsed).
рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВред
code:load_binary(testmodule,"nofile",B).
рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ
19> testmodule:add_two_numbers(5,8). 13
рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рд╣рдордиреЗ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛, рдЗрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдпрд╣ рдЕрдиреНрдп рдЗрд░рд╛рдВрдЧ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдХрд╣реАрдВ рд╕реЗ рднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрджрд▓рд╛ рд╣реБрдЖ (рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЗ рд▓рд┐рдП рдПрд░реНрд▓реИрдВрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж), рдФрд░, рд╡реИрд╕реЗ, рд╣рдордиреЗ рдЗрд╕реЗ рдореВрд▓ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рд╣рд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрдб рдореЗрдВред