|Static analysis tools of Pascal: summary Arndt.Jonasson@c3consult.comm.se (1992-03-11)|
|From:||Arndt.Jonasson@c3consult.comm.se (Arndt Jonasson)|
|Keywords:||Pascal, tools, summary|
|Organization:||Communicator C3Consult AB|
|Date:||Wed, 11 Mar 1992 07:49:36 GMT|
In a previous article, I wrote
>I'm looking for information on static analysis tools for Pascal. The
>system of interest is VAX/VMS, but our software doesn't use most of
>the extra features of VAX Pascal.
>The tool needs to at least be able to trace variables forward and
>backward, i.e. where is X used, which other variables influence it,
>is it used at all, in this procedure/module/whole program.
and promised a summary. Here it is. Thanks to all who answered.
The VMS environment doesn't seem to have as much public domain software
available as the Unix environment. Possibly it could be that the tools
that DEC supplies are good enough. I haven't used any of these tools
myself, so I don't know.
1) The static analysis tool that is sold by DEC is packaged within a case
platform called DECset, but can also be purchased separately. It seems to
be what most people use. I have put the information I received about it at
the end of this article.
2) If you have the Unix tools yacc and lex (parser generator and lexical
tokenizer), you can write your own Pascal parser/compiler/whatever, using
a public domain syntax description of ISO Pascal level 0, which is
available in archives of mod.sources: Volume 4, Issue 61, and archives of
comp.sources.misc: volume 23.
3) There are a couple of public domain Pascal to C translators, which one
might modify. One of them is written is Pascal itself (though I don't
remember which), so you are not dependent on C.
ptoc: comp.sources.unix, volume10
p2c: comp.sources.unix, volume21
4) email@example.com writes:
"I believe that the Berkeley Pascal Compiler that used to be bundled with
BSD Unix does some analysis. It issued warnings about variables that were
used without being set, and set without being used. The sources are
available from archives that have Unix sources on, like uunet or the
server here (src.doc.ic.ac.uk)."
5) firstname.lastname@example.org (Willem Jan Withagen) writes:
"Most of these research tings are on Unix boxes. I'm currently using the
AWB (Architects WorkBench) from the cs.stanford lab, which has a pascal
compiler and a highlevel-reference tool. I does things like find
basic-blocks, static variables, dynamic-calculated references, and has
oodles of simulators with them. Now I'm not very shure about the who
status of the project. (there working on a release 2.0) The mail address
of the tools should be AWB@umunhum.Stanford.EDU"
6) "Prabal Roy" <email@example.com> writes:
"We at the Software Engg Research Center at the Univ. of Florida are
working on Static Analysis of C and Pascal programs for the last 2 years.
Our system however runs on Sun-4. For furher info you may request Ms
Tammera Reedy (firstname.lastname@example.org) for the paper Towards an Integrated
Software Maintenance Environment by Livadas, Croll and Roy which appeared
in the Proc of 1st. Symp. on Software Engg. Research Forum, Tampa,
Florida, Nov 1991. We have dealt with most of the Pascal constructs
(except pointers and gotos) including interprocedural dependences. We have
based our work on Weiser "Program slicing", IEEE-TSE July 1984 and
Horwitz, Reps, Binkley "Interprocedural slicing using dependence graphs"
ACM-TOPLAS, Jan 1990. This is part of my master's thesis which will be
completed soon. Hope this helps."
7) There is a British tool called MALPAS, which is what we are current|y
using, and which I was asked to find a replacement for. The problems with
it are apparently the license cost and not-so-good ease-of-use, rather
than functionality, since it does a lot of useful analysis. It handles
Pascal, Fortran, Ada and a few more languages.
Here's the information I received about DEC's LSE/SCA tools:
"I recommend that you investigate the LSE (language sensitive editor) and
SCA (source code analyzer) products from Digital Equipment Corporation.
Both of them are packaged together with other programming productivity
tools into a product called DECset, so you may want to look at that as
well (it might save you some money to purchase DECset rather than the
With SCA, I can find all occurances of a symbol (identifier, routine,
constant) in any lexical scope that I want: program, module, routine,
block, etc; it can recursively build a call tree as many levels deep as
you want. SCA can even combine the results of a query with another query
to form a third.
This is just a brief example of the kinds of queries that can be formed
with SCA. I've appended some HELP text below to give you a better idea of
how it works. SCA also has a callable interface, so you can write programs
to query SCA's database and customize the information to suit your needs.
SCA is integrated with Digital's compilers today: you simply add the /ANA
qualifier to your PASCAL command line to generate a .ANA file which you
then load into an SCA database.
SCA is also integrated with LSE, Digital's Language Sensitive Editor. You
can query the SCA database within LSE and then use a single keypress
(CTRL/G) to go to the actual spot in the source code where the symbol
occurs! If the query results in multiple occurances, CTRL/F (forward) and
CRTL/B (backward) navigate through the list.
$ help sca
The VAX Source Code Analyzer is an interactive, multilanguage,
source code cross-reference and static analysis tool that is
designed to aid developers in understanding the complexities of
large-scale software systems.
The DCL command line has the form:
$ SCA [command [/qualifier,...]]
For basic information on using SCA, type "New_Users"; for a listing
of commands, type "Commands"; for tutorial information, type
Additional information available:
CHECK CREATE DELETE EXIT EXTRACT HELP LOAD
REORGANIZE Sca_Example SET SHOW VERIFY VIEW
FIND Commands New_Users Release_Notes Topics
SCA Subtopic? topics query
1. You can selectively display information about modules in the
current SCA library with the SHOW MODULE command. The
command has the form:
SHOW MODULE [/qualifier...] [module-name-expr[,...]]
$ SCA SHOW MODULE
Module Ident Compiled
SCA$$DBGETFILE X0.6 3-APR-1985 14:04
SCA$$DBGETFILEOCC X0.6-1 3-APR-1985 14:04
SCA$$DBGETFILESPEC X0.4 3-APR-1985 14:04
Complete (/FULL) or partial (/BRIEF) information about all
(/ALL) modules, or selected (/VISIBLE or /HIDDEN) modules,
can be displayed. The terms "visible" and "hidden" refer to
the results of the module selection process that occur when
multiple libraries are accessed.
2. You can obtain cross-reference information about program
symbols and source files by using the FIND command. The
command has the form:
FIND [/qualifier...] name-expression[,...]
$ SCA SET LIBRARY SCA$EXAMPLE
%SCA-S-LIB, your SCA Library is
$ SCA FIND max*
Symbol Class Module
MAX_CODE constant BUILD_TABLE
MAX_CODE constant TYPES
MAX_RECORD_LEN constant COPY_FILE
MAX_RECORD_LEN constant TYPES
%SCA-S-OCCURS, 11 occurrences found (4 symbols, 2 names)
Notice that the SCA commands are entered at the DCL level and
all occurrences of symbols that begin with MAX are displayed.
3. You can selectively display call information related to
specified routines in the current SCA library with the VIEW
CALL_TREE command. The command has the form:
VIEW CALL_TREE [/qualifier...] routine-name-expr[,...]
SCA> VIEW CALL_TREE BUILD_TABLE
%SCA-S-ROUTINES, 3 routines found (no recursive, depth
In this example, the library used in the last session is
queried for calls related to the BUILD_TABLE routine.
Arndt Jonasson Communicator C3Consult AB
Return to the
Search the comp.compilers archives again.