7JjX Macros for COBOL Syntax Diagrams



Similar documents
Sample Table. Columns. Column 1 Column 2 Column 3 Row 1 Cell 1 Cell 2 Cell 3 Row 2 Cell 4 Cell 5 Cell 6 Row 3 Cell 7 Cell 8 Cell 9.

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

The collect package. Jonathan Sauer 2004/09/10

VISUAL GUIDE to. RX Scripting. for Roulette Xtreme - System Designer 2.0

Section 1.5 Exponents, Square Roots, and the Order of Operations

Microsoft Word Revising Word Documents Using Markup Tools

Writing Control Structures

We will learn the Python programming language. Why? Because it is easy to learn and many people write programs in Python so we can share.

CS 241 Data Organization Coding Standards

2015 County Auditors Institute. May Excel Workshop Tips. Working Smarter, Not Harder. by David Scott,

A couple of things involving environments

KB_SQL SQL Reference Guide Version 4

Microsoft Word 2010 Basics

Microsoft Migrating to Word 2010 from Word 2003

Ask your teacher about any which you aren t sure of, especially any differences.

Beginning to Program Python

The CDS-ISIS Formatting Language Made Easy

Exercise 1: Python Language Basics

JavaScript: Introduction to Scripting Pearson Education, Inc. All rights reserved.

9.4. The Scalar Product. Introduction. Prerequisites. Learning Style. Learning Outcomes

MATLAB Programming. Problem 1: Sequential

Introduction to Python

3. Add and delete a cover page...7 Add a cover page... 7 Delete a cover page... 7

Q&As: Microsoft Excel 2013: Chapter 2

Web Development. Owen Sacco. ICS2205/ICS2230 Web Intelligence

Word 2007: Basics Learning Guide

Excel: Introduction to Formulas

Import Filter Editor User s Guide

Microsoft Word 2013 Basics

Hands-on Exercise 1: VBA Coding Basics

Intermediate PowerPoint

Create a New Database in Access 2010

Intellect Platform - The Workflow Engine Basic HelpDesk Troubleticket System - A102

Introduction. UML = Unified Modeling Language It is a standardized visual modeling language.

Create a report with formatting, headings, page numbers and table of contents

Lecture 2 Notes: Flow of Control

Notepad++ The COMPSCI 101 Text Editor for Windows. What is a text editor? Install Python 3

Databases in Microsoft Access David M. Marcovitz, Ph.D.

Office of Research and Graduate Studies

Commonly Used Excel Formulas

Retrieving Data Using the SQL SELECT Statement. Copyright 2006, Oracle. All rights reserved.

Prime Factorization 0.1. Overcoming Math Anxiety

Moving from CS 61A Scheme to CS 61B Java

Database Programming with PL/SQL: Learning Objectives

University of Hull Department of Computer Science. Wrestling with Python Week 01 Playing with Python

Anyone Can Learn PROC TABULATE

Creating tables of contents and figures in Word 2013

Lesson 20: Latex Picture environment

An Introduction to the WEB Style of Literate Programming

Regular Expressions. General Concepts About Regular Expressions

moresize: More font sizes with L A TEX

Content Author's Reference and Cookbook

Using the Thesis and Dissertation Templates

Creating Basic Excel Formulas

CHECKLIST FOR THE DEGREE PROJECT REPORT

Access Tutorial 2: Tables

Excel 2007 Basic knowledge

For OS/390, VM, VSE. Extended Reporting Facility Guide 6.2 SP3

Working with Tables: How to use tables in OpenOffice.org Writer

3.GETTING STARTED WITH ORACLE8i

2) Write in detail the issues in the design of code generator.

Exercise 4 Learning Python language fundamentals

The plain English guide to forms

Using This Reference Manual Chapter 1 to Issue ACL Commands

Microsoft Excel Understanding the Basics

Basic numerical skills: FRACTIONS, DECIMALS, PROPORTIONS, RATIOS AND PERCENTAGES

Microsoft Excel 2010 Part 3: Advanced Excel

Selection Statements

Dreamweaver CS4 Day 2 Creating a Website using Div Tags, CSS, and Templates

Help on Icons and Drop-down Options in Document Editor

Excel 2003 Tutorials - Video File Attributes

Lecture 2 Mathcad Basics

Word 2010: The Basics Table of Contents THE WORD 2010 WINDOW... 2 SET UP A DOCUMENT... 3 INTRODUCING BACKSTAGE... 3 CREATE A NEW DOCUMENT...

Using Casio Graphics Calculators

PL/SQL Overview. Basic Structure and Syntax of PL/SQL

1 Using CWEB with Microsoft Visual C++ CWEB INTRODUCTION 1

Creating trouble-free numbering in Microsoft Word

COWLEY COLLEGE & Area Vocational Technical School

ECDL. European Computer Driving Licence. Word Processing Software BCS ITQ Level 2. Syllabus Version 5.0

Data Tool Platform SQL Development Tools

Oracle Database: SQL and PL/SQL Fundamentals

But have you ever wondered how to create your own website?

Getting Started with Excel Table of Contents

Creating a table of contents quickly in Word

The 2010 British Informatics Olympiad

Migrating to Excel 2010 from Excel Excel - Microsoft Office 1 of 1

Regular Expressions. Abstract

Creating and Using Master Documents

RIT Installation Instructions

Regular Expression Searching

MICROSOFT WORD TUTORIAL

Solving Mass Balances using Matrix Algebra

paragraph(s). The bottom mark is for all following lines in that paragraph. The rectangle below the marks moves both marks at the same time.

1 Introduction. 2 An Interpreter. 2.1 Handling Source Code

Microsoft Migrating to PowerPoint 2010 from PowerPoint 2003

TEX for the Impatient

Transcription:

7JjX Macros for COBOL Syntax Diagrams Unisys Corporation 19 Morgan Avenue Irvine. CA 92718-209 ABSTRACT COBOL syntax diagrams have a unique format that has evolved into an industrywide standard. This format is particularly difficult to accommodate without treating the diagram as artwork. When a manual contains over a hundred syntax diagrams, as several of our manuals at Unisys do, the production process becomes quite unwieldy. However, TG's math mode can be exploited to allow inclusion of COBOL syntax diagrams within the document itself. This paper presents macros that typeset COBOL syntax diagrams. The paper is divided into two parts: the fist demonstrates how to use a set of macros to create the diagrams, and the second part lists and explains the actual macro definitions. 1. The Diagrams COBOL diagrams are composed of four basic kinds of elements: items that are required, items that are optional, items that offer a choice, and items that can be repeated. In addition, COBOL diagrams can contain reserved words, which are displayed in uppercase, and programmer-supplied information, which is displayed in lowercase. These elements can be combined to form diagrams that are quite complicated. But first, let's look at each element by itself. The composition of the macros used to create these elements is discussed later in this paper (see Section 2). 1.1 Required Elements Required elements are underlined. For example, the VALUE clause looks Like this: VALUE IS literal and can be coded using simply the \req macro:l \syntax(% \req(value) IS literal If several required items occur in a row, they must be identified individually. For example, produces MOVE CORRESPONDING identifier-1 identifier-2 COBOL syntax diagrams always begin with the \syntax macro.

1.2 Optional Elements Optional elements are enclosed in square brackets. For example, the IF statement looks like this: - IF condition [THEN ] statement-1 [ELSE statement4 ] and is coded using both the \req and \option macros, like this: \req IF condition \option!then!) statement-1 \option{!\req(else) statement-2! The function of the exclamation points (!)2 in this example is not intuitively obvious. They are necessary to delimit optional elements that are composed of more than one item. When a series of items appears in an \option macro, it is a good idea to stack them one atop another in the macro call to keep track of where one item ends and another begins. For example, the RECORD clause contains a stack of optional items, of which one or none can be chosen: RECORD CONTAINS [integer-1 ] integer-2 COMPUTATIONAL CHARACTERS The coding for the RECORD clause gets a little more complicated and looks lie this: \syntax % \reqcrecord) CONTAINS \option<! integer-1 \req{to)! ) integer-2 \option(!ascii!!computational!!computational-2!!display! \opt ion! CHARACTERS!!\req WORDS)! 1 1. Choice Elements Elements that offer a choice are very similiar to optional elements. However, instead of being enclosed in square brackets, they are enclosed in curly braces to indicate that one of the items within must be chosen. For example, one form of the OPEN statement looks like this: OPEN {- } filename REEL - NUMBER OUTPUT and is coded thusly: \syntax % \reqcopen) \choice{! \req INPUT)!!\reqCOUTPUT)! f ile-name \req FEEL-NUMBER) \choice(!literal!! dat a-name! 1 As in optional elements, each of the items in a choice element must be delimited by exclamation points. 1.4 Elements That Can Be Repeated When an element can occur more than once in the syntax of a command, it is followed by a series of dots called an ellipsis. For example, the ADD command can operate on any number of variables: }...TO identifier-n ADD {literal The exclamation point was chosen as the delimiter because exclamation points are not members of the ANSI-standard COBOL character set. 744

The ellipsis is produced with the \repeatable macro. The ADD command is coded as: \syntax(% \req(add \choice(! identifier!!literal! \repeatable \reqcto identifier-n 1.5 Formatting Commands Because COBOL syntax diagrams are quite complicated, their length often exceeds a single line. Left to its own devices, TJ$ will break the diagram at some point between two elements. For example, the MULTIPLY command is automatically broken between the seventh and eighth elements: identifier-1 MULTIPLY { ) BY {identifier-2 ) literal-1 literal-2 - GIVING identifier- [ROUNDED ] [, identifier-4 [ROUNDED ] 1... You can insert \par commands to override W 's line-breaking algorithm and instead force the line to break earlier in the diagram. For example, if you wanted to break the above diagram into two approximately equal parts, you would code: \req{giving) \par identifier- \opt ion(%! \reqcrounded)! \opt ion(%!, ident if ier-4 \opt ion(% producing: identifier-1 ) {identifier-2 ) MULTIPLY { - literal-1 BY GIVING literal-2 identifier- [ROUNDED ] [, identifier-4 [ROUNDED ] I... A \par command can be used only to produce a line break between two elements - it cannot be used in the middle of the \option or \choice macros. If you want a line break inside an \option or \choice macro, you should use the \midbreak macro. For example, the RECORD portion of an FD statement is quite lengthy: CONTAINS integer- CHARACTERS IS VARYING IN SIZE [[FROM integer-4 ] [TO integer-5 ] CHARACTERS ] [DEPENDING ON data-nam CONTAINS integer-6 integer-7 CHARACTERS A line break is needed in the second item of the choice element. If you insert a \midbreak command after the CHARACTERS item, you obtain a more satisfactory diagram:

CONTAINS integer- CHARACTERS IS VARYING IN SIZE [[FROM integer-4 ] [m integer-5 ] CHARACTERS ] [DEPENDING ON data-name-1 ] CONTAINS integer-6 TO integer-7 CHARACTERS 2. The Macros Before we can define the macros, we must declare a few variables, define the font, and make the exclamation point an active character so that it can be used as the delimiter in the \option and \choice macros: \newif\ifmchoice \newif \ifmoption \newif \ifmreq \newif \if mrepeat \newif \if started 2.1 The \syntax Macro All COBOL syntax diagrams must begin with the \syntax macro. \syntax sets up the environment and adds some white space before and after the diagram: \long\def\syntax#l(% \begingroup \cobf ont \textfontl=\cobfont \mathcode'-="012d \let! =\startorstop \baselineskip=l2pt \lineskip=2pt \parindent =Opt \pretolerance=l0000 \medskip #I \medskip \endgroup 1% The macro definition must be preceeded by \long so that \par commands can occur within the diagram to force line breaks. The macro loads the font defined as \cobf ont, defines \cobf ont to be the font accessed when TEX is in math mode, and changes the \mathcode of the hyphen. By default, a hyphen maps to a minus sign in the Computer Modern Math Italic font when it is encountered in math mode (Knuth 1984:15-154, 44, 51). By changing the \mathcode, we map the character to the hyphen in the normal text font. This is necessary at Unisys because some of our reserved words in COBOL contain hyphens and they look strange when the hyphen is displayed as a minus sign. Your site may encounter similar problems with other characters - if anything ends up something other than you expected, you should check the character's \mathcode and modify it to something more appropriate. All of this font wizardry is local to the group, so if TJ$ enters math mode outside of a syntax diagram, it uses the default cmti 10 point font and maps characters using the definitions of plain. tex. The \syntax macro also defines the active character! to be a call to the \startorstop macro, described below in Section 2.5. The settings of \baselineskip, \lineskip and \parindent control amounts of white space. \baselineskip determines white space between vertically stacked items in a choice of optional elements. \lineskip determines white space between lines of a diagram when the diagram is too long 746

to fit on a single line. And \parindent determines how far the diagram is indented from the left margin. The \pretolerance command is necessary to tell rn it is OK to break lines and create underfull \hboxes. When w ' s own line-breaking algorithm analyzes COBOL syntax diagrams, it finds breakpoints only when math mode is turned off. This conveniently occurs between each element of the diagram, but TFJ calculates the badness of each of these breakpoints to be so extreme that it ignores them all unless \pretolerance is set very high. Finally, the \syntax macro uses the \medskip macro of plain.tex to surround a COBOL syntax diagram with a certain amount of white space. 2.2 The \req Macro All the \req macro does is underline an item. All that is required is to enter math mode and use W's \underline command. However, sometimes TJ$~ encounters the \req macro when it is already in math mode, so some logic is required to determine if math mode should be turned on and off. 2. The \option Macro The main function of the \option macro is to enclose the parameter text in square brackets ([ I). The parameter text can be quite complicated and can contain calls to the \req macro or the \choice macro. The parameter text always contains at least two exclamation points (!) to delimit items in the optional element. \long\def\option#lc% \begingroup \startedf alse % \ifmmode\relax\else\moptiontrue$\fi % \lef t\lbrack \vcenterc% \vboxi% \cobf ont # 1 1% \right\rbrack \ifmoption$\moptionfalse\fi \endgroup % Local to the group. % As with \req, math mode % may or may not need to be % entered. % Left square bracket % Load the desired font. % Right square bracket. % End math mode if need be. The commands \left and \right allow TEX to determine how tall the square brackets need to be. These two commands are what make 7JjX so ideal for COBOL syntax diagrams (Knuth 1984:148). By using them, you make TJ$ stretch and shrink the brackets to correctly enclose the items, so you don't have to worry about the effect of adding or deleting items as the syntax of a COBOL command changes. The entire parameter text is enclosed in a \vbox so that the \vcenter command can be used to center the text within the square brackets.

2.4 The \choice Macro The \choice macro is exactly lie the \option macro except that it encloses the parameter text in curly braces ({ )) rather than square brackets. \def\choicet#l(% \begingroup \startedfalse \ifmmode\relax\else\mchoicetrue$\f i \lef t\lbrace \vcent erc% \vbox(% \cobf ont # 1 \right \rbrace \ifmchoice$\mchoicefalse\fi 2.5 Exclamation Points and the \startorstop Macro The format of COBOL syntax diagrams requires that if more than one item occurs in an optional or choice element, the items must be stacked one on top of the other. Since T@ is designed to stack a series of \hboxes one atop another, this requirement is easily met by enclosing each item in an \hbox. But typing \hbox{ and ) around each item gets a little tedious and takes up extra space on the line; you can make the exclamation point (or any character you choose) an active character and let do some of the work. If you make the exclamation point an active character and then assign it to be a control sequence that calls a macro, you can use that macro to determine if the exclamation point denotes the beginning or the end of the item. For example: \def\startorstopc% \if started \egroup \startedf alse \else \hbox\bgroup \startedtrue \f i % Order of commands is important here. Flag % should be turned on INSIDE the hbox and turned % off OUTSIDE the hbox. Thus when the construction!record IS! is encountered, it is transformed into \hbox{record IS). Using \begingroup and \endgroup in the \option and \choice macro makes the value of the \started flag always local to the group. This enables nesting of elements, for example: \opt ion(!label \choice(!record IS!!RECORDS ARE!) STANDARD!) If the value of \started is not local to the group, the exclamation point before LABEL is correctly identified as the starting point, and \started set to true. But when encounters the exclamation point before RECORD, the \if started command is evaluated as true and T@ attempts to end an \hbox when actually it is supposed to start a second \hbox! In fact, the whole concept of using a single character for a macro call can be carried to extremes. What if, instead of requiring the user to remember that he needs to use the \option macro to get 748

the square brackets in his diagram, we allow him to just type an opening square bracket where the optional element begins and a closing square bracket where the optional element ends? The following commands would allow this: This works great, but the analogous situation of allowing curly braces to be used for choice elements creates complications. Once the curly braces are made active, they can no longer be used as they were originally intended to define macros, delimit parameters in macro calls, and generally serve as beginning and end or group markers. So then some other characters, perhaps parentheses, must be redefined to take on the traditional function of the curly braces, and then what will you do when you want to use parentheses in their normal context? Pretty soon things become quite confusing to a person familiar with the traditional workings of QX. But if you can keep your character codes straight, all this re-defining of character functions might be helpful to a person sitting down to code COBOL syntax diagrams who is totally unfamiliar with w. Users might find it helpful to be able to type: -RECORD- CONTAINS [! integer- I -TO-! 1 [! ASCII!COMPUTATIONAL!!COMPUTATIONAL-2!! DISPLAY!I [! CHARACTERS!! -WORDS-! 1 instead of what was previously described in this paper to obtain a syntax diagram for the RECORD clause. 2.6 The \repeatable Macro Like the \req macro, the \repeatable macro is quite simple. It boils down to entering math mode, if need be, and calling the \ldots macro of plain.tex to create the ellipsis indicating repeatability: