C.3 Language-Sensitive Editor and the Source Code Analyzer

The DEC Language-Sensitive Editor (LSE) and the DEC Source Code Analyzer (SCA) must be purchased separately from the OpenVMS operating system. LSE is a text editor intended specifically for software development. SCA is an interactive tool for program analysis.

These products are closely integrated; generally, SCA is invoked through LSE. LSE provides additional editing features that make SCA program analysis more efficient. In addition, LSE and SCA, in conjunction with the DEC C compiler, provide a set of new enhancements supporting source code design and review.

In addition to text editing features, LSE provides the following software development features:

SCA performs the following types of program analysis:

LSE and SCA together, in conjunction with DEC language compilers, provide the following software design features:

The following sections provide entry, exit, and language-specific information on the combined use of LSE and SCA. For more information on LSE and SCA, see the Guide to Language-Sensitive Editor for VMS Systems and the Guide to Source Code Analyzer for VMS Systems. For more information on CMS, see the Guide to Code Management System for VMS Systems.

C.3.1 Preparing an SCA Library

SCA stores data generated by the DEC C compiler in an SCA library. The data in an SCA library contains information about all symbols, modules, and files encountered during a specific compilation of the source. You must prepare this library before you enter LSE to invoke SCA. This preparation involves the following steps:

  1. Create an OpenVMS directory for your SCA library. For example:
    $ CREATE/DIRECTORY PROJ:[USER.LIB1]
    

  2. Initialize and set the library with the SCA CREATE LIBRARY command. For example:
    $ SCA CREATE LIBRARY [.LIB1] 
    

    If you have an existing SCA library that has been initialized, you make its contents visible to SCA by setting it with the SCA SET LIBRARY command. For example:

    $ SCA SET LIBRARY [.EXISTING_SCA_LIBARAY]
    

    A message appears in the message buffer, at the bottom of your screen, indicating whether your SCA library selection succeeded.

  3. Direct the DEC C compiler to generate data analysis files by appending the /ANALYSIS_DATA qualifier to the CC command. For example:
    $ CC/ANALYSIS_DATA PG1,PG2,PG3 
    

    This command line compiles the input files PG1.C, PG2.C, and PG3.C and generates corresponding output files for each input file, with the file types OBJ and ANA. DEC C puts these files in your current default directory.

  4. Load the information in the data analysis files into your SCA library with the SCA LOAD command. For example:
    $ SCA LOAD PG1,PG2,PG3 
    

    This command loads your library with the modules contained in the data analysis files PG1.ANA, PG2.ANA, and PG3.ANA.

  5. Once the SCA library has been prepared, enter LSE to begin an SCA session. Within this context, the integration of LSE and SCA provides commands that can be used only within LSE.

C.3.2 Starting and Terminating an LSE or an SCA Session

To invoke LSE, enter the following command at the DCL prompt:

$ LSEDIT USER.C

To end an LSE session, press Ctrl/Z to get the LSE> prompt. If you want to save modifications to your file, enter the EXIT command. If you do not want to save the file or any modification to the file, enter the QUIT command.

To invoke SCA from the LSE prompt, enter the SCA command that you want to execute using the following syntax:

LSE> command [parameter] [/qualifier...]

To invoke SCA from the DCL command line for the execution of a single command, use the following syntax:

$ SCA command [parameter] [/qualifier...]

If you have several SCA commands to invoke, you might want to first invoke the SCA subsystem and then enter SCA commands:

$ SCA
SCA> command [parameter] [/qualifier...]

Typing EXIT (or pressing Ctrl/Z) ends an SCA subsystem session and returns you to the DCL level.

C.3.3 Programming Language Placeholders and Tokens

The LSE language-sensitive features simplify the tasks of developing and maintaining software systems. These features include language- specific placeholders and tokens, aliases, comment and indentation control, and templates for subroutine libraries.

You can use LSE as a traditional text editor. In addition, you can use the power of LSE's tokens and placeholders to step through each program construct and supply text for those constructs that need it.

Placeholders are markers in the source code that indicate where you can provide program text. These placeholders help you to supply the appropriate syntax in a given context. You do not need to type placeholders; they are inserted for you by LSE. Placeholders are surrounded by brackets or braces and at (@) signs.

Placeholders are either optional or required. Required placeholders, indicated by braces ({}), represent places in the source code where you must provide program text. Optional placeholders, indicated by brackets ([]), represent places in the source code where you can either provide additional constructs or erase the placeholder.

You can move forward or backward from placeholder to placeholder. In addition, you can delete or expand placeholders as needed.

Tokens typically represent keywords in DEC C. When expanded, tokens provide additional language constructs. You can type tokens directly into the buffer. You use tokens in situations, such as modifying an existing program, where you want to add additional language constructs and there are no placeholders. For example, typing IF and entering the EXPAND command causes a template for an IF construct to appear on your screen. You can also use tokens to bypass long menus in situations where expanding a placeholder, such as {@statement@}, will result in a lengthy menu.

You can use tokens to insert text when editing an existing file by typing the name for a function or keyword and entering the EXPAND command.

LSE provides commands for manipulating tokens and placeholders. Table C-1 shows these commands and their default key bindings.

Table C-1 Commands to Manipulate Tokens and Placeholders

Command  Key Binding  Function 
EXPAND  Ctrl /E  Expands a placeholder. 
UNEXPAND  PF1-Ctrl/E  Reverses the effect of the most recent placeholder expansion. 
GOTO PLACEHOLDER/FORWARD  Ctrl /N  Moves the cursor forward to the next placeholder. 
GOTO PLACEHOLDER /REVERSE  Ctrl/P  Moves the cursor backward to the next placeholder. 
ERASE PLACEHOLDER/FORWARD  Ctrl/K  Erases a placeholder. 
UNERASE PLACEHOLDER  PF1-Ctrl/K  Restores the most recently erased placeholder. 
v   Down-arrow  Moves the indicator downward through a screen menu. 
^   Up-arrow  Moves the indicator upward through a screen menu. 
<Enter> <Return> 
{ ENTER             }
{ RETURN
Selects a menu { } option. 

To display a list of all the defined tokens provided by DEC C, enter the following LSE command:

LSE> SHOW TOKEN

To display a list of all the defined placeholders provided by DEC C, enter the following LSE command:

LSE> SHOW PLACEHOLDER

To put either list into a separate file, first enter the appropriate SHOW command to put the list into the $SHOW buffer. Then enter the following commands:

LSE> GOTO BUFFER $SHOW
LSE> WRITE filename

To obtain a hard copy of the list, use the PRINT command at DCL level to print the file you created.

To obtain information about a particular token or placeholder, specify a token name or placeholder name after the SHOW TOKEN or SHOW PLACEHOLDER command.

C.3.4 Compiling Source Code

To compile your source code and to review compilation errors without leaving the editing session, use the LSE commands COMPILE and REVIEW. The COMPILE command issues a DCL command in a subprocess to invoke the DEC C compiler. The compiler then generates a file of compile-time diagnostic information that LSE uses to review compilation errors. The diagnostic information is generated with the /DIAGNOSTICS qualifier that LSE appends to the compilation command.

For example, if you enter the COMPILE command while in the buffer USER.C, the following DCL command is executed:

$ CC USER.C/DIAGNOSTICS=USER.DIA

LSE supports all the DEC C compiler's command qualifiers as well as user-supplied command procedures.

The REVIEW command displays any diagnostic messages that result from a compilation. LSE displays the compilation errors in one window and the corresponding source code in a second window. This multiwindow capability allows you to review your errors while examining the associated source code.

To compile a DEC C program that contains placeholders and design comments, include the following qualifiers to the COMPILE command:

LSE> COMPILE $/ANALYSIS_DATA/DESIGN

The /ANALYSIS_DATA qualifier generates a data analysis file containing source code analysis information. This information is provided to the SCA library.

The /DESIGN qualifier instructs the compiler to recognize placeholders and design comments as valid program elements. If the /ANALYSIS_DATA qualifier is also specified, the compiler includes information on placeholders and design comments in the data analysis file.

C.3.5 LSE Examples

The following examples show the expansions of DEC C tokens and placeholders. The intent is to show the formats and guidelines that LSE provides, not to fully expand all tokens and placeholders. An arrow (- > ) indicates where in the example an action occurred.

To invoke LSE and the DEC C language, use the following syntax:

LSEDIT [/qualifier . . . ] filename.C

C.3.5.1 Compilation Unit

When you use the editor to create a new DEC C program, the initial string {@compilation unit@} appears at the top of the screen:

->      {@compilation unit@}
        [End of file]

Use Ctrl/E to expand this initial string. The following is displayed:

->      [@#module@]
        [@module level comments@]
        [@include files@]
        [@macro definitions@]

        [@preprocessor directive@]...

        [@data type or declaration@]...;

        [@function definition@]...;

C.3.5.2 Preprocessor Lines

Erase the [@#module@], [@module level comments@], [@include files@], and [@macro definitions@]. The cursor is then positioned on [@preprocessor directive@]. Expand [@preprocessor directive@] to duplicate it and display a menu. Then select the #include option:

  1. Use the up and down arrows on the keypad to position the displayed selection arrow next to #include.

  2. Press Return.

The following display results:

->      #include
        [@preprocessor directive@]...

        [@data type or declaration@]...;

        [@function definition@]...;

After selecting the #include option, another menu appears that lists the types of #include statements. Select the option #include {@module name@}. Your display now looks like this:

->      #include {@module name@}
        [@preprocessor directive@]...

        [@data type or declaration@]...;

        [@function definition@]...;

Type the value stdio over the placeholder {@module name@}.

Experiment with the LSE editor to expand other placeholders, such as [@data type or declaration@], [@function definition@], and so on.


Previous Page | Next Page | Table of Contents | Index