// this is the visitor that encapsulates actions per AstNode
// the action is to harvest the AST and enter its data into
// the "grammar spec" files of layer gspec
import java.util.*;
import Jakarta.util.*;
public class enterGspec implements Visitor {
public void action( AstNode n ) { }
public void action( AstOptNode n ) { }
public void action( AstList n ) { }
public void action( AstListNode n ) { }
public void action( AExpr n ) { }
public void action( Avar n ) { }
public void action( AvarList n ) { }
public void action( BExpr n ) { }
public void action( BAnd n ) { }
public void action( BChoose1 n ) { }
public void action( BIff n ) { }
public void action( BImplies n ) { }
public void action( BNot n ) { }
public void action( BOr n ) { }
public void action( Bvar n ) { }
public void action( Cons n ) { }
public void action( ConsStmt n ) { }
public void action( EExpr n ) { }
public void action( ESList n ) { }
public void action( EStmt n ) { }
public void action( Expr n ) { }
public void action( ExprList n ) { }
public void action( ExprStmt n ) { }
public void action( GPattern n ) {
String name = n.tok[1].getTokenName();
variable.define( name, variable.Patt, new pattern( name ), false );
}
public void action( GProd n ) {}
public void action( GProduction n ) {
String name = n.tok[0].getTokenName();
variable.define( name, variable.Prod, new production(name), false );
}
public void action( GTerm n ) { }
public void action( IExpr n ) { }
public void action( MainModel n ) {
variable.vtsize = 0; /*reset counter*/ }
public void action( Model n ) { }
public void action( NExpr n ) { }
public void action( OExpr n ) { }
public void action( Opt n ) { }
public void action( OptTerm n ) {
String name = n.tok[1].getTokenName();
if (!production.FPtable.containsKey(name)) {
variable.define( name, variable.Prim, new optprim(name), false);
}
else
variable.define( name, variable.Prod, new optprod( name ), true );
}
public String opt =""; // string that defines option
public boolean foundOpt = false; // is this a legal option?
public void action( Optid n ) {
opt = n.tok[0].getTokenName();
foundOpt = false;
processOptid();
if (!foundOpt)
Util.error("Unrecognizable option: " + opt );
}
public void processOptid() {
/* no labels in basic grammar */
}
public void action( Opts n ) { }
public void action( Paren n ) { }
public void action( Pat n ) { }
public void action( Pats n ) { }
public void action( PlusTerm n ) {
String name = n.tok[0].getTokenName();
if (!production.FPtable.containsKey(name)) {
Util.error( "cannot use primitive layer " + name +
" in a plus pattern");
return;
}
variable.define( name, variable.Prod, new plus( name ), true );
}
public void action( Prods n ) { }
public void action( SimplePattern n ) {
String name = n.tok[0].getTokenName();
if (production.FPtable.containsKey(name))
Util.error("Cannot have a production " + name + " as a simple pattern");
String patName = "_"+name;
variable.define( patName, variable.Patt, new pattern( patName), false );
variable.define( name, variable.Prim, new prim( name ), false );
}
public void action( StarTerm n ) {
String name = n.tok[0].getTokenName();
if (!production.FPtable.containsKey(name)) {
Util.error( "cannot use primitive layer " + name +
" in a star pattern");
return;
}
variable.define(name, variable.Prod, new star( name ), true);
}
public String optVal;
public void action( Strlit n ) {
opt = n.tok[0].getTokenName();
optVal = n.tok[2].getTokenName();
foundOpt = false;
processStrlit();
if (!foundOpt)
Util.error("Unrecognizable option: " + opt );
}
public void processStrlit() {
/* no options in base grammar */
}
public void action( TermList n ) { }
public void action( TermName n ) {
String name = n.tok[0].getTokenName();
if (!production.FPtable.containsKey(name))
variable.define(name, variable.Prim, new prim( name ), false);
else
variable.define(name, variable.Prod, new prod( name ), true);
}
public variable currentVar; // current variable whose option list
// we're processing
public void action( Var n ) {
String name = n.tok[0].getTokenName();
currentVar = (variable) variable.Vtable.get(name);
if (currentVar==null) {
Util.error("variable " + name + " never used");
currentVar = new variable(); // some dummy holder for now
}
}
public void action( Vars n ) { }
public void action( VarStmt n ) { }
}