Operator precedence of assignment

How do you think ruby parses this expression?
   a = 1 + b = 2 + c = 4 + d = 8

Originally I thought that operator precedence would result in
   a = (1 + b) = (2 + c) = (4 + d) = 8
and since an assignment requires a variable, that would result in a SyntaxError. But instead it seems that everything on the right side of the assignment operator is evaluated first:
   a = (1 + (b = (2 + (c = (4 + (d = 8))))))

That had me really puzzled at first but I guess the behavior makes a certain sense, and it's more useful than a syntax error. Ruby's tolerant parser wins again!

Daniel

Daniel DeLorme wrote:

How do you think ruby parses this expression?
   a = 1 + b = 2 + c = 4 + d = 8

Per...
http://phrogz.net/ProgrammingRuby/language.html#operatorexpressions
...the + operator has much higher precedence than the assignment
operator. That's interesting that it doesn't parse as you expected.
It's what I would have expected, too.

Hi,

···

In message "Re: operator precedence of assignment" on Tue, 2 Jan 2007 22:26:53 +0900, Daniel DeLorme <dan-ml@dan42.com> writes:

How do you think ruby parses this expression?
  a = 1 + b = 2 + c = 4 + d = 8

Originally I thought that operator precedence would result in
  a = (1 + b) = (2 + c) = (4 + d) = 8
and since an assignment requires a variable, that would result in a SyntaxError.
But instead it seems that everything on the right side of the assignment
operator is evaluated first:
  a = (1 + (b = (2 + (c = (4 + (d = 8))))))

That had me really puzzled at first but I guess the behavior makes a certain
sense, and it's more useful than a syntax error. Ruby's tolerant parser wins again!

Ah, for your information, that surprised me as well. Perhaps bison
generated parser is smarter and eagerer than I expected. I have no
idea what to do.

              matz.

I think Daniel did not want you to do anything - in fact he seems rather positively amazed. :slight_smile:

(The only thing that comes to mind is thank him for the praise. :-))

Kind regards

  robert

···

On 02.01.2007 17:56, Yukihiro Matsumoto wrote:

Hi,

In message "Re: operator precedence of assignment" > on Tue, 2 Jan 2007 22:26:53 +0900, Daniel DeLorme <dan-ml@dan42.com> writes:
>
>How do you think ruby parses this expression?
> a = 1 + b = 2 + c = 4 + d = 8
>
>Originally I thought that operator precedence would result in
> a = (1 + b) = (2 + c) = (4 + d) = 8
>and since an assignment requires a variable, that would result in a SyntaxError. >But instead it seems that everything on the right side of the assignment >operator is evaluated first:
> a = (1 + (b = (2 + (c = (4 + (d = 8))))))
>
>That had me really puzzled at first but I guess the behavior makes a certain >sense, and it's more useful than a syntax error. Ruby's tolerant parser wins again!

Ah, for your information, that surprised me as well. Perhaps bison
generated parser is smarter and eagerer than I expected. I have no
idea what to do.

Hi,

I think Daniel did not want you to do anything - in fact he seems rather
positively amazed. :slight_smile:

_That_ made me wonder what I should do.

(The only thing that comes to mind is thank him for the praise. :-))

The praise should go to yacc, not me. :wink:

              matz.

···

In message "Re: operator precedence of assignment" on Wed, 3 Jan 2007 02:05:06 +0900, Robert Klemme <shortcutter@googlemail.com> writes:

But *you* chose it, didn't you? So... :slight_smile:

  robert

···

On 02.01.2007 18:09, Yukihiro Matsumoto wrote:

Hi,

In message "Re: operator precedence of assignment" > on Wed, 3 Jan 2007 02:05:06 +0900, Robert Klemme <shortcutter@googlemail.com> writes:

>I think Daniel did not want you to do anything - in fact he seems rather >positively amazed. :slight_smile:

_That_ made me wonder what I should do.

>(The only thing that comes to mind is thank him for the praise. :-))

The praise should go to yacc, not me. :wink: