The Java Tools matrix is a two-dimensional program cube that is used to synthesize most of the Jak tools in AHEAD. The vertical axis is the Java Feature Model (which has derivatives), and the horizontal axis is the tool feature model.
Rows of each matrix are language features {java, ast, gscope} 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).
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 | dsl/java/ast | dsl/java/ast | dsl/java/astError | |||||||||
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 | |||||
d(base)/d(ast) | dsl/java/j2jast | dsl/java/CommonErrorAst | dsl/java/CommonErrorAst | dsl/java/mmAst | dsl/java/unmixinbaseAst | ||||||||
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 | |||||||
d(local-id) /d(ast) |
dsl/java/LocalIdAst | dsl/java/LocalIdAst | |||||||||||
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 | |||||
d(compose-class)/d(ast) | dsl/java/CompClassAst | ||||||||||||
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 |
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:
where AST, BASE, and COMPOSE are local variables:
The default language is "all".
Seven tools are currently being built. Their equations are:
To see the fully expanded equations, look in fop/ahead/build/java/tools.equations.