[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: PERFORM token (was RE: gnubol: Hacks needed to parse COBOL
Actually, I just got word from a developer I used to work with that this
does the same thing under MicroFocus on Unix.
Davyd Ondrejko wrote:
>
> Here's an interesting situation.
>
> > Bob> In compilers I have seen, the END-PERFORM is required on the
> > Bob> inline perform, but is actually wrong on out-of-line
> > Bob> performs. I defy anyone to detect that correctly. Since rules
> > Bob> have to be concurrently scoped, any out-of-line perform can
> > Bob> quite possibly be scoped internnaly to an inline perform. If
> > Bob> you attempt to trap the END-PERFORM on the end of the
> > Bob> out-of-line perform where it does not belong, then you swallow
> > Bob> the outer inline perform's explicit scope
> > Bob> terminator. Consequently spurious END-PERFORM tokens seem
> > Bob> destined to fly high into the upper rule hierarchy.
> >
> > OK, I get the idea, but I still can't share your sense of dread over
> > it. The END-PERFORM is no more a part of the syntax of an
> > out-of-line PERFORM than END-EVALUATE is. Sure, a containing in-line
> > PERFORM will be terminated. Then we'll continue to parse some more
> > statements that should have been in the loop or whatever.
> > Eventually, we'll get to an END-PERFORM that can't be accepted and
> > we'll diagnose it. In the unlikely case that the programmer has
> > applied an END-PERFORM to his out-of-line PERFORM, and omitted the
> > one for the containing in-line PERFORM, he has made a programming
> > error, but he has written a legitimate COBOL program.
>
> MOVE 0 TO Q.
> MOVE 13 TO VARIABLE.
> IF VARIABLE > 3
> PERFORM UNTIL Q > 10
> ADD 1 TO Q
> PERFORM THIS-PARAGRAPH THRU THIS-PARAGRAPH-EXIT
> END-PERFORM
> DISPLAY "Q IS NOW = ", Q
> END-IF.
>
> In one compiler I've come across (ICHOST under UNIX), depending on the
> settings, this will generate a warning or an error. (Not sure, don't
> have access to it at this point.) The END-PERFORM actually associates
> with the out-of-line PERFORM and leaves the in-line PERFORM without any
> termination. If it generates code, then the DISPLAY is executed 11
> times.
>
> --
> David R. Ondrejko - EDI/Referral - Safelite Glass Co.
> Mathematician by training - Programmer by trade - Philosopher by nature
> Genius by genetics - Atheist by conviction - Hedonist by desire!
--
David R. Ondrejko - EDI/Referral - Safelite Glass Co.
Mathematician by training - Programmer by trade - Philosopher by nature
Genius by genetics - Atheist by conviction - Hedonist by desire!
--
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.