[comp.lang.c] Yes me again

edw@IUS1.CS.CMU.EDU (Eddie Wyatt) (04/07/88)

  I recieved a letter by email in regards to the *a+=*b ambiguaty.
I thought would be nice to post a response to it on the net since it
sums up *my* sentiment on this issue.

> It is ambiguous because "*=" used to be written "=*" and
> lexation wants to take the longest matching string (in a
> left-to-right scan).

But isn't the larget token posible += as it scans left to right, not
=* ?

Actually I'm inclined to believe that += is tokenized as two token and
when =* is seen, it is tokenized as a single token.  So the lexer
reads the input stream as follows.  

	stream		token
  	*a+=*b
	a+=*b		*
	+=*b		a
	=*b		+
	b		=*
			b

To which I've made the statement that tokenizing =* as a single token
is a hack!  I invoke the policy of orthogonality to justify this
statement.  If *= consists of two tokens (implying *= and * = are
equivalent expressions) then =* should be parsed as two tokens.
However, if =* and = * became equivalent then both *a+=*b and 
*a+= *b would become equivalent statements.  Kind  of good
in the sense that the same behaviours will be observed in both
insistance.  Bad in the sense that *a = *b would be interpetted
as what 'a' points to gets what 'a' points to times b.  Probably not
what was intended.

So my overall conclusion is to kill the =(op) construct and quit trying
to support an archaic construct at the expense of "exceptions to the
rule".

-- 

Eddie Wyatt 				e-mail: edw@ius1.cs.cmu.edu