[erlang-questions] Bug, feature or limitation of erl_parse?

Musumeci, Antonio S Antonio.Musumeci@REDACTED
Wed Aug 25 14:17:27 CEST 2010


Understood. Is there no way to turn "test" ++ '_' into [$t,$e,$s,$t|'_'] from a string for use in a matchspec?

-----Original Message-----
From: Robert Virding [mailto:rvirding@REDACTED] 
Sent: Tuesday, August 24, 2010 5:01 PM
To: Musumeci, Antonio S (Enterprise Infrastructure)
Cc: erlang-questions@REDACTED
Subject: Re: [erlang-questions] Bug, feature or limitation of erl_parse?

Erl_parse does recognise '"test" ++ Else', but it is not a term it is an expression. It is later inside the compiler that the expression is converted into it's shortcut form. The parser just parses the expression. When you did it by hand, so to speak, you got a term which erl_parse could parse as a term. So:

17> f(S), {ok,S,_} = erl_scan:string("\"test\" ++ Else. ").
{ok,[{string,1,"test"},{'++',1},{var,1,'Else'},{dot,1}],1}
18> erl_parse:parse_exprs(S).
{ok,[{op,1,'++',{string,1,"test"},{var,1,'Else'}}]}

N.B. it it not the string "term" which causes it to be an expression but the operator '++'.

Robert

On 24 August 2010 22:08, Musumeci, Antonio S <Antonio.Musumeci@REDACTED> wrote:
> It doesn't appear to understand the "test" ++ Else shortcut for [$t,$e,$s,$t|Else]. Reason I noticed was I'm reading in terms as strings and passing them to mnesia:select. erl_parse works fine with [$t|'_'] but not "t" ++ '_'.
>
>> S = "[$t,$e,$s,$t|'_']".
> "[$t,$e,$s,$t|'_']"
>> T = "\"test\" ++ '_'".
> "\"test\" ++ '_'"
>> [$t,$e,$s,$t|'_'] = "test" ++ '_'.
> [116,101,115,116|'_']
>> {ok,S2,_} = erl_scan:string(S).
> {ok,[{'[',1},
>     {char,1,116},
>     {',',1},
>     {char,1,101},
>     {',',1},
>     {char,1,115},
>     {',',1},
>     {char,1,116},
>     {'|',1},
>     {atom,1,'_'},
>     {']',1}],
>    1}
>> {ok,T2,_} = erl_scan:string(T).
> {ok,[{string,1,"test"},{'++',1},{atom,1,'_'}],1}
>> erl_parse:parse_term(S2++[{dot,1}]).
> {ok,[116,101,115,116|'_']}
>> erl_parse:parse_term(T2++[{dot,1}]).
> {error,{1,erl_parse,"bad term"}}



More information about the erlang-questions mailing list