import java.util.Hashtable; import java.util.Vector; import Jakarta.util.FixDosOutputStream; import java.io.*; public class RootDecl { public void reduce2java( AstProperties props ) { // Step 1: reduce all sibling constructs as normal super.reduce2java( props ); // Step 2: now make sure that global start and end states // are declared ONLY if a parent is a state declaration // AND there is no ExtendsStateMachine declaration // ancestor 1 = optnode // ancestor 2 = SmClassDecl // ancester 3 = either UmodSmExt or UmodSmDecl AstNode n = up.up.up; boolean define = false; // default if ( n instanceof UmodSmDecl ) { AstNode a = n.arg[1].arg[0]; define = (a!=null && a instanceof SmClsExtends) || a == null; } defineStates( define ); // inherited } // this method could be overridden or extended void defineStates( boolean define ) { if ( define ) { StatesClause.defineState( "start", false, arg[0].tok[0] ); StatesClause.defineState( "stop", false, arg[0].tok[0] ); } } }