[erlang-questions] Parse Transform with Macros
Evan Miller
emmiller@REDACTED
Sun Mar 6 19:41:56 CET 2011
IIRC erl_parse needs a full module as input, i.e. -module() at the top
and all Erlang expressions inside of named functions.
On Sun, Mar 6, 2011 at 11:46 AM, Tristan Sloughter
<tristan.sloughter@REDACTED> wrote:
> OK, so maybe it helps if I wrote the fun correctly :). I fixed it to fun()
> -> ?MACHINE end. and I get:
> {error,{1,erl_parse,["syntax error before: ","'fun'"]}}
>
> On Sun, Mar 6, 2011 at 11:42 AM, Tristan Sloughter
> <tristan.sloughter@REDACTED> wrote:
>>
>> Hey, this is great! But the result it gives me fails when sent to
>> erl_parse:
>> > {done,{ok,Tokens2,LineEnd2},StringRest2} = erl_scan:tokens([], "fun() ->
>> > ?MACHINE. ", 1).
>> {done,{ok,[{'fun',1},
>> {'(',1},
>> {')',1},
>> {'->',1},
>> {'?',1},
>> {var,1,'MACHINE'},
>> {dot,1}],
>> 1},
>> []}
>> > {ok, NewTokens2} = aleppo:process_tokens(Tokens2).
>> >
>> {ok,[{'fun',1},
>> {'(',1},
>> {')',1},
>> {'->',1},
>> {atom,1,'BEAM'},
>> {dot,1},
>> {eof,0}]}
>> > erl_parse:parse_form(NewTokens2).
>> {error,{1,erl_parse,["syntax error before: ","'fun'"]}}
>> Any ideas?
>> Thanks.
>> On Sun, Mar 6, 2011 at 11:27 AM, Evan Miller <emmiller@REDACTED> wrote:
>>>
>>> Hi Tristan,
>>>
>>> Aleppo will apply preprocessor macros on tokens returned by erl_scan:
>>>
>>> https://github.com/evanmiller/aleppo
>>>
>>> I think it will fit your needs. Aleppo also lets you use -ifdef and
>>> the like inside of functions since it uses a proper grammar for the
>>> macro syntax.
>>>
>>> On Sun, Mar 6, 2011 at 9:41 AM, Tristan Sloughter
>>> <tristan.sloughter@REDACTED> wrote:
>>> > I'd like to construct a parse transform that has a macro in the
>>> > inserted
>>> > code. I've had no problem using erl_scan:tokens and
>>> > erl_parse:parse_form to
>>> > construct the AST as long as no macros exist.
>>> >
>>> > Since macros are expanded before getting to this point it fails if in
>>> > the
>>> > string scanned has something like ?MODULE. I looked at epp_dodger and
>>> > elsewhere but I can't seem to find something I could use to send in a
>>> > string
>>> > like:
>>> >
>>> > "init() -> ?MODULE."
>>> >
>>> > And have tokens I could use to then generate the AST.
>>> >
>>> > Is this possible?
>>> >
>>> > Thanks,
>>> > Tristan
>>> >
>>>
>>>
>>>
>>> --
>>> Evan Miller
>>> http://www.evanmiller.org/
>>
>
>
--
Evan Miller
http://www.evanmiller.org/
More information about the erlang-questions
mailing list