From: "Peña, Botp" Date: 2004-10-08T14:57:11+09:00 Subject: Re: quality of error messages Markus [mailto:markus@reality.com] wrote: > Sent: Friday, October 08, 2004 1:39 PM > To: ruby-talk@ruby-lang.org > Subject: Re: quality of error messages > > > On Thu, 2004-10-07 at 22:26, "Peña, Botp" wrote: > > 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 > > > > > > > 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. > > > > > > > > > > > > > ((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? > > Sorry, my example over simplified a little. To save > space, I was using an analogy between class/end and '('/')'; > and I chose a example that was too simple to really make the point. > > Consider that each token is on its own line (i.e., that > we really are wanting to identify which '(' is missing its > ')', not even worrying about where it goes). Also keep in > mind that nested things like '((3))' are valid (and meaningful)*: > > (((1/2)/((3/4)/5) ( ( (1/2) / ( (3/4) / 5 ) we catch only one (though there are two). And to simplify further, we point second "(" since it is _inner... But I do not know internal parser. if parser catches first "(", then it reports first "(". Does not matter w me. > > So, which '(' is missing its ')'? > again, we do _not choose or point where _exactly. we only say "missing foo-end on possible foo-begin at line#". Compiler suggest. The programmer will decide. > -- Markus kind regards -botp