[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gnubol: How do we parse this language, anyway?
In a message dated 12/9/99 3:43:52 AM EST, wmklein@ix.netcom.com writes:
<< don't think the surprise is nearly as noteworthy (concerning the 2-level
deep conditionals followed by a period). What is significant is that BOTH
the "old" and the "new" IBM compilers give errors for this situation - so I
still see no need to keep this open as a "possible COMPATIBILITY" extension.
Bill Klein
wmklein <at> ix.netcom.com
>>
Well on the arithmetic coditionals there are apparently compilers that are
allowing two and more levels of nested conditionals as an extension. Our
problem is apparently it is not just one of them. So we have a code base
issue. If we allow it as an extension; some users might be surprised but
their existing code, previously dredged of such conditionals, would still
work the same. If we error it out; some users would have code that stopped
working (probably not much but some).
I do not know what the overall pattern is in the various compilers for nested
conditionals where the various layers are different families (such as READ /
ADD). If the 'extended' compilers are not allowing the unterminated
condtionals to dangle there, then we have tools which are not
self-consistent, but maybe less of a code base issue.
The spin I see here is that we may need to deal with convergence more than a
vendor has
to. And even as an open source understaffed project we don't actually have a
path of least effort. You have to detect all of it and stay on your feet in
the parser, choose as you may to reject or accept. ((So AFAIK, keeping it
open does not actually create more work.))
The interesting thing about most programs, universally, is that they rarely
check counters to see if they are overflowing. As tragic as it is, I can
definitely find COBOL programmers who do not actually understand just exactly
what a SIZE ERROR is. This powerful device is all too rarely applied to
cardinal calculations, much less count blips like that envisioned in the
sketch
READ
NOT AT END
ADD 1 TO record-count
ON SIZE ERROR
DISPLAY "PHM really does not care"
* implied scope terminator follows.
.
*
So what you get to is the simple fact that these conditional statements
actually are
probably not nested much. In the modern compiler situation explicit scope
termination
solves any syntax complaints from the compiler. So the basic problem is that
the programmers will be presenting the compiler with the dangling conditional
only on occassion.
Except where their code has legacy examples, or their shop leans more towards
it than average because of what some 'extended' compiler allowed in that shop
before.
The really humorous thing about all this is that every time the compiler
stomps on a dangling
condtional at level two, the coder learns to think of the position as an
imperative position. So often when they get a compiler problem with the
above statement, they retract to
READ
NOT AT END
ADD 1 TO record-count
* implied scope terminator follows.
.
*
((They could use explicit scope delimiters, but since the culture does not
value the
error detection anyway; I am saying actually they may be more likely to
chop.))
So in the revised approach the inner conditional is gone, since niether the
manager wants it, nor will the stingy compiler allow it. But we just trained
the programmer to think that
ADD 1 to record-count
is an imperative. And having done that, and insisted that of course it is
true, and why would anyone get confused: the next day the unconfused
programmer, extends an old piece of code in another location, that was
MULTIPLY mega BY mega GIVING giga
ON SIZE ERROR
ADD 1 TO overflow-gizmo
* impl
.
*
and will now be
MULTIPLY mega BY mega GIVING giga
ON SIZE ERROR
ADD 1 TO overflow-gizmo
NOT ON SIZE ERROR
ADD 1 TO temp-cnt-good-loops-for-debuging
* impl
.
*
And they will curse the language that has explicit scope termination and
implicit scope termination. This is the same error but it will feel
different, because the intended semantic
is different. ((No compiler will accept that as indented; some will reject as
you are keen on, but apparently some will 'extend' and gen a rather senseless
semantic. The divergence in the code base is the issue to be assessed.))
I am getting to the point that I am afraid to post any more of these things.
And actually in addition to keeping an eye on the code base, I think keeping
this thing open may help us while we think through the parser rules. The code
is going to be there, rare or not. So initial work on the parsers may prefer
to bind in and accept with warning.
Anyway just so ill know what the 'compatibility' issue is, I think we have
more than one target. Atleast for the arith within arith. If there is
generalized extension in some of those products permitting dangling
conditionals on the edges of conditionals with positive code gen, then I see
your comments about the mainframe compilers and the evident confidence of
your expression to mean there is possibly a larger code base issue than we
want. That is, it may not be just the arith within arith that are extended on
the alternative platforms, and the mainframe may be very consistently
rejecting all classes of dangling conditionals even when it is mixed verb
families.
To be quite honest when you are mixing conditional families, there is
actually not much reason to like the standard. A stack of [NOT] AT END... on
top of [NOT] ON SIZE ERROR really does not involve any ambiguity. Atleast not
when you're just two layers deep. So if some vendors are extending they must
see some practical reason to think that programmers are lazy enough to leave
off explicit scope terminators occasionally as an expression of common sense,
however briefly enjoyed. But it doesn't matter. Only the code base matters.
I think the parser has to be that complex anyway, just top be robust. In all
the situations, _all_, where we say a compiler hates the code or loves the
code, in _all_ these situations the compiler is detecting the situation.
Bob Rayhawk
--
This message was sent through the gnu-cobol mailing list. To remove yourself
from this mailing list, send a message to majordomo@lusars.net with the
words "unsubscribe gnu-cobol" in the message body. For more information on
the GNU COBOL project, send mail to gnu-cobol-owner@lusars.net.