The mmatrix Tool |
The mmatrix tool was created in response for tool support to classify .jak files in order to get a better overall view of an AHEAD design. As a general rule, it is not called from the command line, but rather invoked by other AHEAD tools.
Overview |
mmatrix classifies .jak files and their contents into the following groups:
"C" | a class | |
"I" | an interface | |
"S" | a state machine | |
"K" | a constructor | |
"M" | a method | |
"F" | a field | |
"S" | a state | |
"T" | a transition | |
"D" | defines C/I/S | |
"E" | defines and extends C/I/S | |
"R" | refines C/I/S |
mmatrix outputs other information as well. See the example below.
Example |
Consider the following .jak file:
public class VoidTyp extends PrimitiveType { final public static int ARG_LENGTH = 1 /* Kludge! */ ; final public static int TOK_LENGTH = 1 ; public boolean[] printorder () { return new boolean[] {true} ; } public VoidTyp setParms (AstToken tok0) { arg = new AstNode [ARG_LENGTH] ; tok = new AstTokenInterface [TOK_LENGTH] ; tok [0] = tok0 ; /* "void" */ InitChildren () ; return (VoidTyp) this ; } } |
The output of mmatrix after it translates this file into:
C E VoidTyp Line range (-1, -1) public endMods beginKeys Classes :( PrimitiveType ): super :( PrimitiveType ): endKeys beginNest F D ARG_LENGTH int Line range (10, 10) final public static endMods beginKeys finalValue :( = 1 ): endKeys F D TOK_LENGTH int Line range (11, 11) final public static endMods beginKeys finalValue :( = 1 ): endKeys M D printorder() boolean[] Line range (13, 16) public endMods M D setParms(AstToken) VoidTyp Line range (18, 27) public endMods endNest |
The above says:
VoidTyp is a class that extends another class.
Line range (-1,-1) means the entire file
it is public and has PrimitiveType as its superclass
Inside Voidtype is:
public static int field ARG_LENGTH whose definition is on line range (10,10) with final value =1
final public static int field TOK_LENGTH whose definition is on line range (11,11) with final value =1
public boolean[] method printorder whose definition is on line range (13,16)
public VoidTyp method setParms(AstToken) whose defintion is on line range (18,27)
Command-Line Invocation |
To call mmatrix from the command line, type:
> mmatrixmmatrix <arguments> -t (traverse directory ..) -c (remove unnecessary attributes) <file> (run mmatrix on input file)
So a typical invocation of mmatrix is:
> mmatrix
The -t and -c options have recently been added to extract a simple parsable output for mmatrix. The -t option means consider the current directory a model directory, and recursively traverse this directory and its layers for all .jak files. Invoke mmatrix on each .jak file found. The -c option doesn't print finalValue and Classes output (which can be seen in the above example). The bali grammar of the mmatrix output in -tc mode is given in this file.
To call mmatrix from within a program, use:
import mmatrix.*;...try { String out = mmatrix.Main.eval( "file.jak" ); // out = any of the above constants, which can be referenced by mmatrix.Constants.X, // where X is Class, ExtendsClass, Interface, ExtendsInterface, StateMachine, // ExtendsStateMachine, or Refines // do something with out... } catch (Exception e) { System.out.println("error in processing file.jak" ); System.out.println(e.getMessage()); System.exit(1); }
In general, mmatrix was designed for programmatic, rather than command-line use. It is the underlying tool used by ModelExplorer.
Caveats |
It is possible that mmatrix doesn't harvest information correctly on state machines. It has, however, been thoroughly tested with classes and interfaces.
Copyright © Software Systems Generator Research Group.
All rights reserved.
Revised: January 25, 2006.