Rigi RSF

Program-Transformation.Org: The Program Transformation Wiki
Specification: RigiRSFSpecification

Errata: In a source-location the elements are separated with comma, not semicolon.

Errata for "Appendix: Tool Support": rigiedit can also read Stuctured RSF.

The specification discusses the following RSF formats:

  • (3-tuple) Unstructured RSF
  • Partly structured RSF
  • Stuctured RSF
  • 4-tuple unstructured RSF

You have to be careful about the format transformation that the tools perform. If you run htmlrsf and sortrsf without command line args, they change 4-tuple unstructured RSF to (3-tuple) unstructured RSF!

See also RigiUserManual, Section 4.7.1.

See also http://calla.ics.uci.edu/reveng/toolbase/moin.cgi/RSF.

Typically an RSF file adheres to a certain schema. For example, an RSF file generated with cparse will adhere to the cparse schema.

The schema is documented in 3 files:

  • Riginode: The node types
  • Rigiarc: The arc types
  • Rigiattr: The node and arc attributes

rigiedit expects a directory with the name of the domain containing these files at $RIGI/Rigi/domain.

See RigiUserManual, Section 4.4.

(There is a bit more information in Scott Tilleys Ph.D. Thesis "Domain-Retargetable Reverse Engineering", Section A.2.3, page 126f.)

Sample RSF Files

Unstructured RSF:

Structured RSF:

  • List demo: $RIGI/Rigi/db/list-d/rsf (c domain)
  • Ray demo: $RIGI/Rigi/db/ray-d/rsf (c domain)
  • SQL/DS demo: $RIGI/Rigi/db/arixi-d/rsf (plas domain)

RSF Generators

RSF Querying and Manipulation

The structure of RSF enables easy manipulation with standard UNIX text processing tools.

For more formal manipulation of RSF you can use Dirk Beyer's CrocoPat tool: http://www.cs.sfu.ca/~dbeyer/CrocoPat/