Markus [mailto:markus / reality.com] wrote:

> On Thu, 2004-10-07 at 21:19, Yukihiro Matsumoto wrote:
> > Hi,
> > 
> > In message "Re: quality of error messages"
> >     on Fri, 8 Oct 2004 12:58:26 +0900, Jamis Buck 
> <jgb3 / email.byu.edu> 
> > writes:
> > 
> > |> We can.  But how we check for missing/broken def/end pairs, more 
> > |> than just syntax error?
> > 
> > |I believe what is being asked for is more than just a 
> "syntax error"
> > |message. If the error could be more specific, like 
> "missing 'end' on 
> > |line x", it would greatly increase the usefulness of the -c option.
> > 
> > I know what he wants.  I am not refusing his idea.  The 
> point is I'm 
> > not yet sure how to detect missing pairs.
> > 
> 
>      Having spent 12 of the last 48 hours or so hacking away 
> on ruby's parse.y, I think I've got a pretty clear idea what 
> the problem is. 
> Unless (as some have suggested) you add a second source of 
> information (such as indentation or an explicit statement of 
> intent such as 'enddef' or 'method_delimiter') it simply 
> isn't possible in general to tell which end is missing.  Consider:
> 
>     ((1+2)+3+4/5
> 
> There is clearly a ')' missing, but should it be:
> 
> 
>     ((1)+2)+3+4/5  which equals 6.8
> 
[snip informative text]


no, we do not have to determine where_ to put the missing ")". We can be
close to the target, but not closer, pls.

as for ((1+2)+3+4/5

the compiler just say that the first "(" has missing ")". That is all. (1+2)
pair is already valid, and therefore consumes the last ")" which leaves the
first "(" missing a partner. Of course, this may not be what the programmer
wants, but hey, the compiler was just helping. Was it helpful? Many a times,
yes..

A "missing partner foo-end on possible foo-begin in line#" message is a lot
better than just plain "syntax error".

Is that fine enough?

-botp