Stratego Misc

Stratego -- Strategies for Program Transformation

Introduction

stratego-misc is a small, but versatile package of Stratego modules, implementing strategies and tools that are not (yet) in the SSL.

It might be handy for others as well, so here it is, online.

Contained modules

Currently, stratego-misc consists of the following modules:
  • term-color: Produce color output in your terminal, directly from Stratego! Very cool indeed, handy as well. Distinguish the various parts in the usually huge Term-dumps, while debugging, by colorizing them.
  • output-control: Improved control over (debug-) output. More intuitive verbosity levels and nested, tree-like debug-output.
  • dynamic-rules-tools: A first approach towards generalizing the various strategies that operate on dynamic rules and the tables behind them. Also a (debugging-) pretty printer for dynamic rules.

Module term-color

Produce color output in your terminal, directly from Stratego! Very cool indeed, handy as well. Distinguish the various parts in the usually huge Term-dumps, while debugging, by colorizing them.

Sample output (in a regular terminal):
Screenshot of term-color output

Module output-control

Improved control over (debug-) output. More intuitive verbosity levels and nested, tree-like debug-output.

Sample output when using so-called output-nests (in a regular terminal):
Screenshot of output-control output

Usage

Use output-nest(s|text) for entering a new output-level.
  HandleFunTpSpec =
  output-nest(
    ?FunTpSpec(f, tpF)
  ; rules(Id2Type: f -> tpF)
  | "HandleFunTpSpec")

Use on-debug(|color, text) instead of debug:

  <on-debug(|tc-green, "argtypes: ")> tpV'*

The equivalent of say is also available: on-say(|color, text).

Verbosity

output-control checks whether the --verbose flag was set, and defaults to 0 otherwise. The possible levels are:
  lvlError     = 0    // not used
  lvlInfo      = 1    // not used
  lvlTalkative = 2    // print entering and exiting of output-nests
  lvlChatty    = 3    // id. and print input and output terms of each output-nest
  lvlDebug     = 4    // id. and show any on-debug/on-say output
  lvlVomit     = 5    // not used

Practical usage

Make sure your toplevel strategy supports the --verbosity flag (using io-wrap, output-wrap, or otherwise).

When piping your program output into less, make sure stderr is redirected into stdout and less is called with color-support:

[adam@madras:lib> parse-tfof -i test1.tfof | ./TFOF-InferTypes --verbose 4 2>&1 | less -R

Module dynamic-rules-tools

This has been superseded by dynamic-rules-refactored in the SSL, since the introduction of the new dynamic rules in Stratego 0.10.

Documentation

Generated documentation by xdoc can be found at http://catamaran.labs.cs.uu.nl/docs/stratego-misc/api/

Download and Installation

Interested in using stratego-misc yourself? You can download the latest working distribution (tar.bz2) here: stratego-misc-head.tar.gz

Unpack the tarball and configure the package with the usual --with-strategoxt, --with-sdf and --with-aterm. See the INSTALL file for detailed instructions.

-- ArthurVanDam - 02 Feb 2004