home *** CD-ROM | disk | FTP | other *** search
- (*
-
- PROGRAM TITLE: PASCAL PRETTYPRINTING PROGRAM
-
- AUTHORS: JON F. HUERAS AND HENRY F. LEDGARD
- COMPUTER AND INFORMATION SCIENCE DEPARTMENT
- UNIVERSITY OF MASSACHUSETTS, AMHERST
- (EARLIER VERSIONS AND CONTRIBUTIONS BY RANDY CHOW
- AND JOHN GORMAN.)
-
- BUGS CORRECTED BY : CHARLES FISCHER
- DEPARTMENT OF COMPUTER SCIENCE
- UNIVERSITY OF WISCONSIN, MADISON
- 1977
-
- MODIFICATIONS : ( FOR GEORGIA TECH CYBER 70 (1979))
- PETER N. WAN
- INFORMATION AND COMPUTER SCIENCE
- GEORGIA INSTITUTE OF TECHNOLOGY
- ATLANTA, GEORGIA 30332
-
-
- ( FOR UCSD PASCAL V1.5 (1979) )
- FRANCIS J. MONACO
- 2679 LOWELL DRIVE
- MARIETTA, GEORGIA 30060
- 404-424-1460
-
-
- SPECIAL NOTE ON CURRENT VERSION: THE PROGRAM CURRENTLY RUNS UNDER UCSD
- PASCAL; THE MODIFICATIONS TO THE BELOW PROGRAM SUMMARY INCLUDE:
- 1) PROGRAM PROMPTS FOR DISK FILE IN LOGICAL UNIT #5; USER SHOULD
- RESPOND WITH FIRST PART OF FILE NAME ( TO BE PRETTYPRINTED )
- AS --> MYPROG----- NOT #5:MYPROG.TEXT !!!
- 2) PROGRAM PROMPTS FOR DISK FILE FOR PRETTYPRINTED PGM; AGAIN,
- USER SHOULD RESPOND WITH FIRST PART OF FILE NAME ONLY.
- 3) PROGRAM NOW ACCEPTS UPPER/LOWER CASE INPUT AND TRANSLITERATES
- ALL TO UPPER CASE ( TO EASE PORTABILITY CONSIDERATIONS ).
- NOTE: QUOTED STRINGS ARE NOT TRANSLITERATED; ALSO,
- PROGRAM CONVERTS '{' TO '(*' AND '}' TO '*)' FOR COMMENTS.
- 4) PROGRAM BUILDS PRETTYPRINTED DISK FILE WHILE SIMULTANEOUSLY
- ECHOING OUTPUT TO CRT ( IN REAL TIME ).
- 5) PROGRAM WILL LEAVE UCSD SPECIAL RESERVED WORDS LIKE "SEGMENT",
- "UNIT", ETC. ALONE.
- 6) PRETTYPRINTED OUTPUT IS 79 CHARACTERS PER LINE (SEE MAXLINESIZE)
-
-
-
- PROGRAM SUMMARY:
-
- THIS PROGRAM TAKES AS INPUT A PASCAL PROGRAM AND
- REFORMATS THE PROGRAM ACCORDING TO A STANDARD SET OF
- PRETTYPRINTING RULES. THE PRETTYPRINTED PROGRAM IS GIVEN
- AS OUTPUT. THE PRETTYPRINTING RULES ARE GIVEN BELOW.
-
-
- AN IMPORTANT FEATURE IS THE PROVISION FOR THE USE OF EXTRA
- SPACES AND EXTRA BLANK LINES. THEY MAY BE FREELY INSERTED BY
- THE USER IN ADDITION TO THE SPACES AND BLANK LINES INSERTED
- BY THE PRETTYPRINTER.
-
- NO ATTEMPT IS MADE TO DETECT OR CORRECT SYNTACTIC ERRORS IN
- THE USER'S PROGRAM. HOWEVER, SYNTACTIC ERRORS MAY RESULT IN
- ERRONEOUS PRETTYPRINTING.
-
-
- INPUT FILE: (PROMPTED) - A FILE OF CHARACTERS, PRESUMABLY A
- PASCAL PROGRAM OR PROGRAM FRAGMENT.
-
- OUTPUT FILES: (PROMPTED) - THE PRETTYPRINTED PROGRAM.
-
-
- PASCAL PRETTYPRINTING RULES.
-
-
- .[ GENERAL PRETTYPRINTING RULES ]
-
- 1. ANY SPACES OR BLANK LINES BEYOND THOSE GENERATED BY THE
- PRETTYPRINTER ARE LEFT ALONE. THE USER IS ENCOURAGED, FOR THE
- SAKE OF READABILITY, TO MAKE USE OF THIS FACILITY.
- IN ADDITION, COMMENTS ARE LEFT WHERE THEY ARE FOUND, UNLESS
- THEY ARE SHIFTED RIGHT BY PRECEEDING TEXT ON A LINE.
-
- 2. ALL STATEMENTS AND DECLARATIONS BEGIN ON SEPARATE LINES.
-
- 3. NO LINE MAY BE GREATER THAN 72 CHARACTERS LONG. ANY LINE
- LONGER THAN THIS IS CONTINUED ON A SEPARATE LINE.
-
-
- 4. THE KEYWORDS "BEGIN", "END", "REPEAT", AND "RECORD" ARE
- FORCED TO STAND ON LINES BY THEMSELVES (OR POSSIBLY FOLLWED BY
- SUPPORTING COMMENTS).
- IN ADDITION, THE "UNTIL" CLAUSE OF A "REPEAT-UNTIL" STATE-
- MENT IS FORCED TO START ON A NEW LINE.
-
- 5. A BLANK LINE IS FORCED BEFORE THE KEYWORDS "PROGRAM",
- "PROCEDURE", "FUNCTION", "LABEL", "CONST", "TYPE", AND "VAR".
-
- 6. A SPACE IS FORCED BEFORE AND AFTER THE SYMBOLS ":" AND
- "". ADDITIONALLY, A SPACE IS FORCED AFTER THE SYMBOL ":".
- NOTE THAT ONLY ""S IN DECLARATIONS ARE FORMATTED. ""S
- IN EXPRESSIONS ARE IGNORED.
-
-
-
- [ INDENTATION RULES ]
-
- 1. THE BODIES OF "LABEL", "CONST", "TYPE", AND "VAR" DECLARA-
- TIONS ARE INDENTED FROM THEIR CORRESPONDING DECLARATION HEADER
- KEYWORDS.
-
- 2. THE BODIES OF "BEGIN-END", "REPEAT-UNTIL", "FOR", "WHILE",
- "WITH", AND "CASE" STATEMENTS, AS WELL AS "RECORD-END" STRUC-
- TURES AND "CASE" VARIANTS (TO ONE LEVEL) ARE INDENTED FROM
- THEIR HEADER KEYWORDS.
-
- 3. AN "IF-THEN-ELSE" STATEMENT IS INDENTED AS FOLLOWS:
-
-
- IF <EXPRESSION>
- THEN
- <STATEMENT>
- ELSE
- <STATEMENT>
-
-
- GENERAL ALGORITHM
-
-
- THE STRATEGY OF THE PRETTYPRINTER IS TO SCAN SYMBOLS FROM
- THE INPUT PROGRAM AND MAP EACH SYMBOL INTO A PRETTYPRINTING
- ACTION, INDEPENDENTLY OF THE CONTEXT IN WHICH THE SYMBOL
- APPEARS. THIS IS ACCOMPLISHED BY A TABLE OF PRETTYPRINTING
- OPTIONS.
-
- FOR EACH DISTINGUISHED SYMBOL IN THE TABLE, THERE IS AN
- ASSOCIATED SET OF OPTIONS. IF THE OPTION HAS BEEN SELECTED FOR
- THE SYMBOL BEING SCANNED, THEN THE ACTION CORRESPONDING WITH
- EACH OPTION IS PERFORMED.
-
- THE BASIC ACTIONS INVOLVED IN PRETTYPRINTING ARE THE INDENT-
- ATION AND DE-INDENTATION OF THE MARGIN. EACH TIME THE MARGIN IS
- INDENTED, THE PREVIOUS VALUE OF THE MARGIN IS PUSHED ONTO A
- STACK, ALONG WITH THE NAME OF THE SYMBOL THAT CAUSED IT TO BE
- INDENTED. EACH TIME THE MARGIN IS DE-INDENTED, THE STACK IS
- POPPED OFF TO OBTAIN THE PREVIOUS VALUE OF THE MARGIN.
-
- THE PRETTYPRINTING OPTIONS ARE PROCESSED IN THE FOLLOWING
- ORDER, AND INVOKE THE FOLLOWING ACTIONS:
-
-
- CRSUPPRESS - IF A CARRIAGE RETURN HAS BEEN INSERTED
- FOLLOWING THE PREVIOUS SYMBOL, THEN IT IS
- INHIBITED UNTIL THE NEXT SYMBOL IS PRINTED.
-
- CRBEFORE - A CARRIAGE RETURN IS INSERTED BEFORE THE
- CURRENT SYMBOL (UNLESS ONE IS ALREADY THERE)
-
- BLANKLINEBEFORE - A BLANK LINE IS INSERTED BEFORE THE CURRENT
- SYMBOL (UNLESS ALREADY THERE).
-
- DINDENTONKEYS - IF ANY OF THE SPECIFIED KEYS ARE ON TOP OF
- OF THE STACK, THE STACK IS POPPED, DE-INDEN-
- TING THE MARGIN. THE PROCESS IS REPEATED
- UNTIL THE TOP OF THE STACK IS NOT ONE OF THE
- SPECIFIED KEYS.
-
- DINDENT - THE STACK IS UNCONDITIONALLY POPPED AND THE
- MARGIN IS DE-INDENTED.
-
- SPACEBEFORE - A SPACE IS INSERTED BEFORE THE SYMBOL BEING
- SCANNED (UNLESS ALREADY THERE).
-
- [ THE SYMBOL IS PRINTED AT THIS POINT ]
-
- SPACEAFTER - A SPACE IS INSERTED AFTER THE SYMBOL BEING
- SCANNED (UNLESS ALREADY THERE).
-
- GOBBLESYMBOLS - SYMBOLS ARE CONTINUOUSLY SCANNED AND PRINTED
- WITHOUT ANY PROCESSING UNTIL ONE OF THE
- SPECIFIED SYMBOLS IS SEEN (BUT NOT GOBBLED).
-
- INDENTBYTAB - THE MARGIN IS INDENTED BY A STANDARD AMOUNT
- FROM THE PREVIOUS MARGIN.
-
- INDENTTOCLP - THE MARGIN IS INDENTED TO THE CURRENT LINE
- POSITION.
-
- CRAFTER - A CARRIAGE RETURN IS INSERTED FOLLOWING THE
- SYMBOL SCANNED.
-
-
-
- *)
-
- (*Monaco's PASCAL PRETTYPRINTER for UCSD PASCAL
-
-
- 1) To learn how to use the Prettyprinter, see "PRETTY.DOC"
-
- 2) Make certain that program to be prettyprinted is in logical unit #5.
-
- 3) If you modify the source (PARTA, PARTB, PARTC), you must recompile
- PRETTY; note that the $I files are supposed to be on number 5.
-
- 4) Object file "PRETTY" should execute on your system as is: no terminal
- dependent software is used.
-
- 5) The author has found that the prettyprinter works best if the input
- to it is left-justified (no leading blanks on any line). I suggest that
- you write your PASCAL Program with indentations; then use "REM.BLANKS.CODE"
- to get rid of leading blanks and build a file to be input to the
- Prettyprinter.
- "REM.BLANKS.CODE" expects complete file specifications less ".text" such as
- #5:myprog.
-
- 6) Lastly, the purpose of prettyprinting is to standardize format for PASCAL
- programs to facilitate portability and to increase user familiarity with
- the suggested format of Jensen and Wirth. To this end, all programs that you
- expect to pass on should be prettyprinted! (NOTE: The prettyprinter is living
- proof of this itself). Note: To this end, the prettyprinter transliterates
- all lowercase characters not in quoted strings to uppercase and converts all
- brackets to (**). ( You can use a single ' inside of a comment )
- *)
-