From: Markus Date: 2004-10-08T15:14:45+09:00 Subject: Re: quality of error messages On Thu, 2004-10-07 at 22:57, "Pe単a, Botp" wrote: > Markus [mailto:markus@reality.com] wrote: > > > > > 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) > > 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. But why the second "("? It could be any of them, with equal likelihood (indicating added ")" as "]" and its partner as "]", and looking, as you did, for only one of the two that are missing): ([(1/2)]/((3/4)/5) (([1]/2)/((3/4)/5) (((1/2)/[(3/4)]/5) (((1/2)/([3]/4)/5) ...and the first "(" might well be one of the ones missing a ")" if we account for the fact that there are two missing: [[(1/2)]/((3/4)/5)] [([1]/2)/((3/4)/5)] [((1/2)/[(3/4)]/5)] [((1/2)/([3]/4)/5)] ([[1/2])]/((3/4)/5) ([[1]/2)]/((3/4)/5) ([(1/2)]/[(3/4)]/5) ([(1/2)]/([3]/4)/5) ([[1]/2)]/((3/4)/5) (([1]/2)/[(3/4)]/5) (([1]/2)/([3]/4)/5) : : For a reasonable sized program, the possibilities are enormous. If all the hinter is going to do is point out some construct that takes an 'end' at random, how does that help you? > > > > 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. But if the compiler doesn't have some system (and this is exactly the point I believe matz was asking about) to narrow down the possibilities somewhat, it isn't helping the programmer--and may be doing harm, through misdirection. -- Markus