📄 smcjavagenerator.java
字号:
_source.print(" transient private static "); _source.print(context); _source.println("State[] _States ="); _source.println(" {"); for (mit = maps.iterator(), separator = ""; mit.hasNext() == true; ) { map = mit.next(); mapName = map.getName(); for (stateIt = map.getStates().iterator(); stateIt.hasNext() == true; separator = ",\n") { state = stateIt.next(); _source.print(separator); _source.print(" "); _source.print(mapName); _source.print("."); _source.print(state.getClassName()); } } _source.println(); _source.println(" };"); } // Declare the inner state class. _source.println(); _source.println( "//---------------------------------------------------------------"); _source.println("// Inner classes."); _source.println("//"); _source.println(); _source.print(" public static abstract class "); _source.print(context); _source.println("State"); _source.println(" extends statemap.State"); _source.println(" {"); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member methods."); _source.println(" //"); _source.println(); // Abstract method to obtain the a state's supported // transitions. if (Smc.isReflection() == true) { _source.print(" "); _source.println( "public abstract Map getTransitions();"); _source.println(); } // Constructor. _source.print(" protected "); _source.print(context); _source.println("State(String name, int id)"); _source.println(" {"); _source.println(" super (name, id);"); _source.println(" }"); _source.println(); _source.print(" protected void Entry("); _source.print(context); _source.println("Context context) {}"); _source.print(" protected void Exit("); _source.print(context); _source.println("Context context) {}"); _source.println(); // Generate the default transition definitions. for (SmcTransition trans: transitions) { transName = trans.getName(); // Don't generate the Default transition here. if (transName.equals("Default") == false) { _source.print(" protected void "); _source.print(transName); _source.print("("); _source.print(context); _source.print("Context context"); for (SmcParameter param: trans.getParameters()) { _source.print(", "); param.accept(this); } _source.println(")"); _source.println(" {"); // If this method is reached, that means that // this transition was passed to a state which // does not define the transition. Call the // state's default transition method. _source.println(" Default(context);"); _source.println(" }"); _source.println(); } } // Generate the overall Default transition for all maps. _source.print(" protected void Default("); _source.print(context); _source.println("Context context)"); _source.println(" {"); if (Smc.isDebug() == true) { _source.println( " if (context.getDebugFlag() == true)"); _source.println(" {"); _source.println( " PrintStream str = "); _source.println( " context.getDebugStream();"); _source.println(); _source.println( " str.println("); _source.println( " \"TRANSITION : Default\");"); _source.println(" }"); _source.println(); } _source.println(" throw ("); _source.println( " new statemap.TransitionUndefinedException("); _source.println( " \"State: \" +"); _source.println( " context.getState().getName() +"); _source.println( " \", Transition: \" +"); _source.println( " context.getTransition()));"); _source.println(" }"); // End of state class. _source.println(); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member data."); _source.println(" //"); _source.println(" }"); // Have each map print out its source code now. for (SmcMap map: maps) { map.accept(this); } // End of context class. _source.println("}"); return; } // end of visit(SmcFSM) public void visit(SmcMap map) { List<SmcTransition> definedDefaultTransitions; SmcState defaultState = map.getDefaultState(); String context = map.getFSM().getContext(); String mapName = map.getName(); List<SmcState> states = map.getStates(); // Initialize the default transition list to all the // default state's transitions. if (defaultState != null) { definedDefaultTransitions = defaultState.getTransitions(); } else { definedDefaultTransitions = new ArrayList<SmcTransition>(); } // Declare the map class. Declare it abstract to prevent // its instantiation. _source.println(); _source.print( " /* package */ static abstract class "); _source.println(mapName); _source.println(" {"); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member methods."); _source.println(" //"); _source.println(); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member data."); _source.println(" //"); _source.println(); _source.println( " //-------------------------------------------------------"); _source.println(" // Constants."); _source.println(" //"); // Declare each of the state class member data. for (SmcState state: states) { _source.print(" public static final "); _source.print(mapName); _source.print("_Default."); _source.print(mapName); _source.print('_'); _source.print(state.getClassName()); _source.print(' '); _source.print(state.getInstanceName()); _source.println(" ="); _source.print(" new "); _source.print(mapName); _source.print("_Default."); _source.print(mapName); _source.print('_'); _source.print(state.getClassName()); _source.print("(\""); _source.print(mapName); _source.print('.'); _source.print(state.getClassName()); _source.print("\", "); _source.print(map.getNextStateId()); _source.println(");"); } // Create a default state as well. _source.print(" private static final "); _source.print(mapName); _source.println("_Default Default ="); _source.print(" new "); _source.print(mapName); _source.print("_Default(\""); _source.print(mapName); _source.println(".Default\", -1);"); _source.println(); // End of the map class. _source.println(" }"); _source.println(); // Declare the map default state class. _source.print(" protected static class "); _source.print(mapName); _source.println("_Default"); _source.print(" extends "); _source.print(context); _source.println("State"); _source.println(" {"); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member methods."); _source.println(" //"); _source.println(); // If -reflect was specified, then output the // getTransitions() abstract method. if (Smc.isReflection() == true) { _source.print(" "); _source.println("public Map getTransitions()"); _source.println(" {"); _source.println( " return (_transitions);"); _source.println(" }"); _source.println(); } // Generate the constructor. _source.print(" protected "); _source.print(mapName); _source.println("_Default(String name, int id)"); _source.println(" {"); _source.println(" super (name, id);"); _source.println(" }"); // Declare the user-defined default transitions first. _indent = " "; for (SmcTransition trans: definedDefaultTransitions) { trans.accept(this); } _source.println(); _source.println( " //-----------------------------------------------------------"); _source.println(" // Inner classse."); _source.println(" //"); _source.println(); // Have each state now generate its code. Each state // class is an inner class. for (SmcState state: states) { state.accept(this); } _source.println(); _source.println( " //-----------------------------------------------------------"); _source.println(" // Member data."); _source.println(" //"); // If -reflect was specified, then generate the // _transitions map. if (Smc.isReflection() == true) { List<SmcTransition> allTransitions = map.getFSM().getTransitions(); String transName; int transDefinition; _source.println(); _source.println( " //---------------------------------------------------"); _source.println(" // Statics."); _source.println(" //"); _source.print(" "); _source.println("private static Map _transitions;"); _source.println(); // Now output the transition collection's // initialization. _source.println(" static"); _source.println(" {"); _source.print(" "); _source.println("_transitions = new HashMap();"); // Now place all transition names and states into the // map. for (SmcTransition transition: allTransitions) { transName = transition.getName(); // If the transition is defined in this map's // default state, then the value is 2. if (definedDefaultTransitions.contains( transition) == true) { transDefinition = 2; } // Otherwise the value is 0 - undefined. else { transDefinition = 0; } _source.print(" "); _source.print("_transitions.put(\""); _source.print(transName); _source.print("\", new Integer("); _source.print(transDefinition); _source.println("));"); } _source.println(" }"); } // The map class has been defined. _source.println(" }"); return; } // end of visit(SmcMap) public void visit(SmcState state) { SmcMap map = state.getMap(); String context = map.getFSM().getContext(); String mapName = map.getName(); String stateName = state.getClassName(); List<SmcAction> actions; String indent2; // Declare the inner state class. _source.println(); _source.print(" private static final class "); _source.print(mapName); _source.print('_'); _source.println(stateName); _source.print(" extends "); _source.print(mapName); _source.println("_Default"); _source.println(" {"); _source.println( " //-------------------------------------------------------"); _source.println(" // Member methods."); _source.println(" //"); _source.println(); // If -reflect was specified, then generate the // getTransitions() methods. if (Smc.isReflection() == true) { _source.print(" "); _source.println( "public Map getTransitions()"); _source.println(" {"); _source.print(" "); _source.println("return (_transitions);"); _source.println(" }"); _source.println(); } // Add the constructor. _source.print(" private "); _source.print(mapName); _source.print('_'); _source.print(stateName); _source.println("(String name, int id)"); _source.println(" {"); _source.println(" super (name, id);"); _source.println(" }"); // Add the Entry() and Exit() member functions if this // state defines them. actions = state.getEntryActions(); if (actions != null && actions.size() > 0) { _source.println(); _source.print(" protected void Entry("); _source.print(context); _source.println("Context context)"); _source.println(" {");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -