[erlang-questions] Why is this expression illegal?

Jáchym Holeček <>
Fri Jan 18 15:19:07 CET 2019


Hi Joeren,

My guess: allowing entirely arbitrary expression within binary
constructorsyntax could lead to ambiguities with respect to `/` and `-` and
`:` tokenswhich have special meaning in this context? Therefore only select
expressionforms are permitted, which are free of ambiguities, one of them
being `( E )`which in turn opens access to arbitrary expressions if one is a bit
more explicit.
So this will work:

    4> << (case foo of foo -> 1; bar -> 2 end bor case foo of foo -> 8;
       bar -> 16 end) >>.    <<"\t">>

The file `stdlib-3.4.4/src/erl_parse.yrl` has the mechanics of it
(search for `binary`,`bin_elements`, `bin_element`) though not the underlying reasoning.

HTH,
    -- Jachym

On Fri, Jan 18, 2019, at 15:04, Jeroen Koops wrote:
> Hi List!
> 
> If this expressions is legal:
> 
> case A of foo -> 1; bar -> 2 end bor case A of foo -> 8; bar -> 16
> end.> 


> ... and this expression is legal:


> 


> 


> << case A of foo -> 1; bar -> 2 end >>. 


> 


> ... then why is this expression illegal:


> 


> 


> << case A of foo -> 1; bar -> 2 end bor case A of foo -> 8; bar ->
> 16 end >>.> 


> (shell responds with "* 1: syntax error before: 'bor'")


> 


> Thanks,


> 
> -- 
> Jeroen Koops
> 
> M: 
> T: +31-6-55590300
> _________________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20190118/3b106ffe/attachment.html>


More information about the erlang-questions mailing list