[erlang-questions] Parse Transform with Macros

Tristan Sloughter tristan.sloughter@REDACTED
Sun Mar 6 18:46:14 CET 2011


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/
>>
>
>


More information about the erlang-questions mailing list