catch not an rvalue

Luke Gorrie luke@REDACTED
Tue Feb 19 18:08:01 CET 2002

Hal Snyder <hal@REDACTED> writes:

> Hope this isn't another RTFM, but I can't resist asking.
> Am going through the puzzle box while home with the flu.
> During prototyping, it would be nice to replace
>   X = <risky expression>
> with
>   X = catch <risky expression>
> but the shell (and compiler) don't like that.
> Just wondering why the syntax error is happening.
> Didn't see the answer in, e.g., Chap 6 of

This keeps coming up all the time :-)

I had a squiz at the grammar in the spec and in
stdlib/src/erl_parse.yrl, and it seems to be caused by the
implementation of operator precedence. "Catch" binds the weakest
(`expr'), a match (`expr_100') needs at least another `expr_100' on
its right hand side. I don't know enough about parsing to know if
that's the way it has to be.

But, with ignorance established as my defense, I hacked erl_parse.yrl
so that any expression can appear on the right hand side of a match
(patch below). It seems to do what you'd expect - "X = catch 1 + 2."
binds X to 3 - and it at least managed to compile > 100K lines of code
without complaining.

So.. maybe someone can explain what it's all about?

NB, the new parser comes out about the same size at 4 lines longer
than the normal 4925 line erl_parse.erl.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: erl_parse.patch
Type: text/x-patch
Size: 453 bytes
Desc: not available
URL: <>

More information about the erlang-questions mailing list