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