Java Tools

The Java Tools matrix is a three-dimensional origami matrix that is used to synthesize most of the Jak tools in AHEAD. The way to understand it is by looking at the AHEAD logo, which is a vertical plane (matrix) with a horizontal plan (matrix) perpendicular to it.  The vertical plane is the Java Matrix, the horizontal plane is the AST-Language Matrix.  Where they join is at the ast row (in purple).

Note: in the ast row of the Java Matrix, you'll see names like ast-jak2java, ast-jampack, etc.  When the AST-Language matrix is folded by rows, an equation is defined for each of the columns.  The names of these columns are ast-jak2java, ast-jampack, etc.  These equations are substituted into the ast row of the Java matrix.

Rows of each matrix are language features {core, lang, java, ...} and columns are tools { parser, jak2java, jampack, ... }.  The exception is the grammar column.  This column contains only grammar files which are composed to produce a single composite grammar.  From this grammar, the build/java/syntax layer is generated, along with the parser for this grammar.  As the build/java/syntax layer and parser are shared across all tools, it's represented by a separate column parser.  (In effect, the grammar column derives the parser column).

Java Matrix

  grammar parser support sort jak2java jampack mixin mmatrix unmixin bcjak2java jrename antderive antcompose
java dsl/java/JavaGram dsl/kernel build/java/syntax
dsl/java/Java
dsl/java/Comments dsl/java/StringAST dsl/java/sortfd        dsl/java/linenum          
ast dsl/java/AstGram       ast-jak2java ast-jampack ast-mixin ast-mmatrix ast-unmixin ast-bcjak2java ast-jrename    
gscope dsl/java/GscopeGram dsl/java/gscope dsl/java/preprocessGscope dsl/java/mmGscope dsl/java/gscope dsl/java/gscopeError
base dsl/java/AheadGram        dsl/java/j2jBase dsl/java/CommonBase dsl/java/CommonError dsl/java/preprocess dsl/java/CommonBase dsl/java/CommonError
dsl/java/mixinbase
dsl/java/Basemm dsl/java/unmixinbase dsl/java/bcAhead dsl/java/jrenBase    
source dsl/java/SourceGram         dsl/java/SourceError   dsl/java/SourceMM     dsl/java/SourceError    
local-id dsl/java/LocalIdGram       dsl/java/LocalIdError dsl/java/LocalId dsl/java/LocalId     dsl/java/LocalIdError dsl/java/LocalIdError    
layer dsl/java/LayerGram       dsl/java/AspectTrans dsl/java/AspectDecl dsl/java/AspectDecl     dsl/java/bcLayer dsl/java/layerError    
sm dsl/java/SmGram        dsl/java/sm5         dsl/java/sm5 dsl/java/bcsm5 dsl/java/smError    
compose-class dsl/java/ClassXGram       dsl/java/j2jClassx dsl/java/CompClass dsl/java/mixinClass  dsl/java/Classmm dsl/java/unmixinclass dsl/java/bcClassx dsl/java/ClassxError    
compose-int dsl/java/IntXGram       dsl/java/j2jIntx dsl/java/CompInt dsl/java/mixinInt dsl/java/Intmm dsl/java/unmixinint  dsl/java/bcIntx dsl/java/IntxError
 
   
compose-sm dsl/java/SmXGram        dsl/java/j2jSmx dsl/java/CompSm dsl/java/mixinSm dsl/java/Sm2mm  dsl/java/unmixinsm dsl/java/bcSmx dsl/java/SmxError    
ant dsl/support/antDerive dsl/support/antCompose

AST-Language Interaction Matrix

  ast-grammar ast-parser ast-support ast-sort ast-jak2java ast-jampack ast-mixin ast-mmatrix ast-unmixin ast-bcjak2java ast-jrename ast-antderive ast- antcompose
java                          
ast         dsl/java/ast         dsl/java/ast dsl/java/astError    
gscope                          
base         dsl/java/j2jast dsl/java/CommonErrorAst dsl/java/CommonErrorAst dsl/java/mmAst dsl/java/unmixinbaseAst        
source                          
local-id           dsl/java/LocalIdAst dsl/java/LocalIdAst            
layer                          
sm                          
compose-class           dsl/java/CompClassAst              
compose-int                          
compose-sm                          
ant                          

Synthesizing Tools

A tool is synthesized by specifying 3 equations, one per dimension.  As it turns out, two of the dimensions of this matrix are identical.  That is, the dimensions of this matrix are language x tools x language.  So only 2 equations are needed to specify any particular tool.

Only 3 language equations are currently supported:

  1. all = java AST BASE sm COMPOSE compose-sm ant
  2. cat = java BASE sm COMPOSE compose-sm ant
  3. utcs = java AST BASE COMPOSE ant

where AST, BASE, and COMPOSE are local variables:

The default language is "all".

Seven tools are currently being built.  Their equations are:

  1. jak2javaTool = parser support sort jak2java antderive
  2. jampackTool  = parser support sort jampack antcompose
  3. mixinTool   = parser support mixin antcompose
  4. mmatrixTool  = parser mmatrix antderive
  5. unmixinTool  = parser support unmixin antderive
  6. bcjak2javaTool  = parser support sort bcjak2java antderive
  7. jrenameTool  = parser support  jrename antderive

To see the fully expanded equations, look in fop/ahead/build/java/tools.equations.