Est. 1989 Beginner

GrASP

Graphical Representations of Algorithms, Structures, and Processes - a NASA-funded Auburn University notation and environment that folded a compact control-flow diagram directly into procedural source code, and the direct ancestor of jGRASP.

Created by James H. Cross II, principal investigator at Auburn University, working with Kai H. Chang, T. Dean Hendrix, Larry A. Barowski, Karl S. Mathias and a succession of graduate research assistants in the Department of Computer Science and Engineering

Paradigm Procedural. GrASP is a graphical notation - the Control Structure Diagram - together with the environment that generates it, layered over procedural and object-oriented host languages rather than executed on its own
Typing Not applicable. The CSD notation carries no type system; types, declarations and semantics are inherited entirely from the host language being diagrammed
First Appeared 1989, when the first phase of the NASA-sponsored project derived the Control Structure Diagram from Ada source and Ada PDL. Language catalogues frequently date GrASP to 1998 instead, the year of the journal evaluation of the CSD and of the SIGAda paper describing the mature multi-language environment
Latest Version The C/C++ implementations - GRASP for Linux and UNIX, and pcGRASP for Windows - were the last releases under the GRASP name in the late 1990s and early 2000s. Work continues in the Java rewrite, jGRASP, whose Auburn University download page reportedly lists version 2.1.0_01, dated 6 July 2026

GrASP - Graphical Representations of Algorithms, Structures, and Processes - is a graphical notation for procedural control flow, and the software environment that generates it automatically from source code. It was built at Auburn University from the late 1980s onward under contracts from NASA, ARPA and the Defense Information Systems Agency, and its central artifact, the Control Structure Diagram, is one of the few software visualization notations of that era still in daily use, though almost always under the name of its successor, jGRASP.

GrASP occupies an unusual place in a catalogue of programming languages. It is not a language you write programs in. It is a language you read programs in: a compact, formally defined set of graphical constructs that is superimposed on Ada, C, C++, Java or VHDL source without displacing it. The project began, however, with an explicitly linguistic ambition - the first NASA final report, in 1989, is titled A Graphically Oriented Specification Language for Automatic Code Generation, and the stated goal was a notation that could be reverse-engineered from Ada source and forward-engineered back into it.

A Note on Identification

Several unrelated things are called GRASP: a 1980s DOS animation package (Graphics Animation System for Professionals), a set of object-oriented design principles (General Responsibility Assignment Software Patterns), a family of combinatorial optimization heuristics (greedy randomized adaptive search procedure), a SAT solver, an atomic-structure physics code, and a contemporary graphical Scheme editor. This page covers only the Auburn University software visualization project, which is the GrASP that appears in language catalogues with an education classification and a procedural paradigm.

Catalogues commonly date GrASP to 1998. That year is defensible as the point at which the system reached maturity and public evaluation - the Empirical Software Engineering paper and the SIGAda 98 paper both appeared then - but the notation itself is a decade older. The front matter here dates first appearance to 1989 and notes the 1998 convention.

History and Origins

The work started as a three-phase NASA-sponsored effort at Auburn, with James H. Cross II as principal investigator. Phase 1, reported in September 1989 as NASA CR-183212, concentrated on deriving an algorithmic-level diagram from Ada source code and Ada PDL. The problem it was chosen to attack was specific and expensive: the Department of Defense had committed enormous programs to Ada, and the cost of that software was dominated not by writing it but by later engineers reading it.

The 1991 report, NASA CR-190231, describes how the idea was hardened. The first phase applied the diagram by hand to small programs. The second built a prototype, ported it to Unix workstations, and scaled it up to programs of several hundred to several thousand lines. The third prepared Version 3.0 for distribution. The generator was installed and demonstrated on a Sun workstation at Marshall Space Flight Center in September 1991, and put to use in Auburn software engineering courses.

Through the 1990s the tool broadened. Release 4.3 was integrated with GNAT, the GNU Ada 95 compiler. A January 1996 CrossTalk article by Cross, Kai H. Chang and T. Dean Hendrix presented the Ada 95 system and introduced a companion visualization, the Complexity Profile Graph, which showed statement-level complexity synchronised line-for-line with the diagram. By the 1998 SIGAda paper, GRASP was generating CSDs for Ada 95, C, C++, Java and VHDL, and had added syntax coloring and source code folding.

Design Philosophy

The governing principle is stated plainly in the SIGAda paper: the graphical constructs should supplement the source code without disrupting its familiar appearance. The CSD should look like a natural extension of the code, and the code should look like a natural extension of the diagram.

This is a sharper constraint than it sounds, and it is what separates the CSD from the diagram traditions it grew out of. Flowcharts replace the code with boxes and arrows on a separate page, so they drift out of date the moment the code changes and they consume enormous space. Nassi-Shneiderman charts keep structure and code together but force the program into nested rectangles, which breaks down badly on deep nesting and on languages with rich exception and concurrency constructs. The CSD instead claims only the left margin. Control constructs are drawn as a thin tree of stems and marks in the space that indentation would otherwise waste, so by design a diagrammed listing occupies essentially the same number of lines as the plain one, at the cost of a few columns of margin. The project made no quantitative space or speed claims that are reproducible from the published reports alone.

Three consequences follow from that choice, and they are the reasons the notation survived:

  • It can be generated, never drawn. Because the diagram is a deterministic function of the parse tree, it is regenerated on every keystroke and cannot go stale. There is no separate artifact to maintain.
  • It is lossless in both directions. The source is still there, verbatim. Reverse engineering an existing codebase costs nothing and risks nothing.
  • It scales to real programs. Visualizations that need their own page fail at thousands of lines. A notation that fits in the gutter does not.

The Control Structure Diagram

The CSD marks control flow directly in the listing. Sequence, selection, iteration and exit are each given a distinct graphical stem, so that a reader can see the shape of a routine - where the loops are, how deeply the conditionals nest, where control leaves early - before reading a single identifier. Because the constructs are drawn rather than inferred from whitespace, the diagram is immune to the misleading indentation that causes real defects in C-family code.

The project treated diagram design as an empirical question rather than an aesthetic one. The 1998 Empirical Software Engineering paper by Cross, Maghsoodloo and Hendrix was an overview and initial evaluation of the notation - an attempt to establish whether the comprehension benefit that visualization researchers had long asserted actually appeared under measurement. That instinct, that a visualization is a claim to be tested rather than a picture to be admired, is the intellectual contribution of the project that has aged best.

Beyond the Diagram

Later versions layered further representations over the same parse:

RepresentationWhat it shows
Control Structure DiagramControl flow, nesting and exits, drawn inline with the source
Complexity Profile GraphA fine-grained, statement-level complexity metric, synchronised line-for-line with the CSD
Source code foldingCollapse of a construct to a single line, driven by the diagram structure rather than by text heuristics

The synchronisation is the interesting part. Reading the CSD and the CPG together lets a maintainer locate not merely where a routine is complicated but which statements within it carry the complexity - a question that a single whole-function number such as cyclomatic complexity cannot answer.

Evolution and Dormancy

GRASP existed in two native implementations: GRASP for Linux and UNIX, and pcGRASP for Windows, both written in C and C++. Maintaining two native codebases against five host language grammars proved to be the limiting factor, and around 2002 the project was rewritten from scratch in Java as jGRASP, distributed as a Java desktop application and therefore far less tied to a particular operating system than the native builds had been. A jGRASP handbook draft dated 2 June 2002 circulated with introductory course materials of the period.

The rewrite also changed the sponsor and the audience. The original GRASP was defense and aerospace research funded by NASA, ARPA and DISA, aimed at Ada maintenance. jGRASP has been supported by the National Science Foundation and is aimed squarely at education, adding object viewers that draw linked lists, stacks and trees from live debugger state, plus interactive UML for Java.

The GRASP name is therefore dormant rather than dead. No new GRASP or pcGRASP releases have appeared, but the notation remains under active development: as of this writing the jGRASP site lists release 2.1.0_01, dated 6 July 2026, with supported host languages reportedly including Java, C, C++, Objective-C, Python, Ada and VHDL.

Why It Matters

GrASP is a useful counterexample to the assumption that program visualization means replacing text with pictures. Almost every graphical programming system of the 1980s and 1990s asked developers to give up their source code; nearly all of them are gone. GrASP asked for the left margin and nothing else, and the result is still shipping to students more than thirty-five years after the first NASA report.

It also anticipated a shape that modern editors now take for granted. Automatically generated, always-current, inline structural annotation - the folding markers, the bracket-pair guides, the indent rails, the inlay hints in a contemporary IDE - is the CSD idea, arrived at independently and usually in a weaker form. The insight that the compiler already knows the program structure and that the editor should therefore draw it, rather than asking the programmer to maintain a separate diagram, was worked out at Auburn under a NASA contract before most of those editors existed.

For a language catalogue, GrASP is a reminder that not everything called a language is something you type. Some notations exist to be read, and this one was built by people who took the reading seriously enough to measure it.

Timeline

1989
Phase 1 of a three-phase NASA-sponsored effort at Auburn University concludes. The final report, NASA CR-183212, is titled "A Graphically Oriented Specification Language for Automatic Code Generation" with James H. Cross II as principal investigator, and is submitted in September 1989. The phase concentrates on deriving an algorithmic diagram - the Control Structure Diagram, or CSD - from Ada source code or Ada PDL
1991
NASA CR-190231, dated 30 September 1991, reports the development of a program analysis environment for Ada. It describes three phases: manual application of the CSD to small programs, a prototype ported to Unix platforms and scaled to programs of several hundred to several thousand lines, and preparation of Version 3.0 for distribution. The CSD generator is reported as installed and demonstrated on a Sun workstation at Marshall Space Flight Center in Alabama in September of that year
1996
Cross, Kai H. Chang and T. Dean Hendrix publish "GRASP/Ada 95: Visualization with Control Structure Diagrams" in CrossTalk in January. It presents the Ada 95 prototype and introduces a second visualization, the Complexity Profile Graph, synchronised with the CSD so that control structure and statement-level complexity can be read side by side. Auburn reporting from the same year covers a GRASP Version 5.0 effort, and an earlier release, 4.3, had been integrated with GNAT, the GNU Ada 95 compiler
1998
James H. Cross II, Saeed Maghsoodloo and T. Dean Hendrix publish an overview and initial evaluation of the Control Structure Diagram in Empirical Software Engineering, volume 3, number 2, pages 131-158 - the first peer-reviewed empirical assessment of the notation
1998
At SIGAda 98, Hendrix, Cross, Larry A. Barowski and Karl S. Mathias present "Visual Support for Incremental Abstraction and Refinement in Ada 95". The paper describes GRASP as a software engineering tool combining the CSD with complexity visualization, syntax coloring and source code folding, and states that it generates CSDs automatically from Ada 95, C, C++, Java and VHDL source
2002
jGRASP, a ground-up rewrite in Java by Cross and Barowski, supersedes the two C/C++ implementations - GRASP for Linux and UNIX and pcGRASP for Windows. A jGRASP handbook draft dated 2 June 2002 circulates with introductory course materials. Where the earlier project had been funded by NASA, ARPA and the Defense Information Systems Agency, the successor is supported by National Science Foundation grants
2026
The GRASP name survives only in its successor: according to the jGRASP site, release 2.1.0_01 is dated 6 July 2026. jGRASP generates visualizations for host languages that reportedly include Java, C, C++, Objective-C, Python, Ada and VHDL. The original GRASP and pcGRASP binaries are no longer developed

Notable Uses & Legacy

NASA Marshall Space Flight Center

Sponsored the original GRASP/Ada work through a series of contracts, including NASA CR-183212 and NASA CR-190231. The CSD generator was installed and demonstrated on a Sun workstation at Marshall in September 1991, aimed at making large Ada flight and ground software easier to read during maintenance and reengineering

ARPA and the Defense Information Systems Agency

Funded later phases of the GRASP research project. The motivation was the Department of Defense Ada mandate era, in which very large Ada codebases had to be comprehended and maintained by engineers who had not written them

Auburn University software engineering courses

The CSD generator was reported as in use in several software engineering courses at Auburn from the early 1990s. Teaching program comprehension - reading someone else's control flow rather than writing your own - was a first-class goal of the project, not a side effect

Introductory programming courses via jGRASP

GrASP notation reached its widest audience through the Java successor, which has reportedly been distributed alongside introductory Java textbooks and used in CS1 and CS2 courses. Students encounter the CSD as the inline diagram drawn in the editor gutter, usually without ever hearing the name GRASP

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: