📄 smccsharpgenerator.java
字号:
{ transName = trans.getName(); if (transName.equals("Default") == false) { _source.print(_indent); _source.print( " protected internal virtual 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.print(_indent); _source.println(" {"); // If this method is reached, that means this // transition was passed to a state which does // not define the transition. Call the state's // default transition method. _source.print(_indent); _source.println(" Default(context);"); _source.print(_indent); _source.println(" }"); _source.println(); } } // Generate the overall Default transition for all maps. _source.print(_indent); _source.print( " protected internal virtual void Default("); _source.print(context); _source.println("Context context)"); _source.print(_indent); _source.println(" {"); // If generating debug code, then write this trace // message. if (Smc.isDebug() == true) { _source.println("#if TRACE"); _source.print(_indent); _source.println(" Trace.WriteLine("); _source.print(_indent); _source.print( " \"TRANSITION : Default\""); _source.println(");"); _source.println("#endif"); } // The default transition action is to throw a // TransitionUndefinedException. _source.print(_indent); _source.println(" throw ("); _source.print(_indent); _source.print(" "); _source.println( "new statemap.TransitionUndefinedException("); _source.print(_indent); _source.println( " \"State: \" +"); _source.print(_indent); _source.println( " context.State.Name +"); _source.print(_indent); _source.println( " \", Transition: \" +"); _source.print(_indent); _source.println( " context.GetTransition()));"); // Close the Default transition method. _source.print(_indent); _source.println(" }"); // Close the inner state class declaration. _source.print(_indent); _source.println(" }"); // Have each map print out its source code now. for (SmcMap map: maps) { map.accept(this); } // Close the context class. _source.print(_indent); _source.println("}"); _source.println(); // If a package has been specified, then generate // the closing brace now. if (packageName != null && packageName.length() > 0) { _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(); String indent2; 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 and make it abstract to prevent // its instantiation. _source.println(); _source.print(_indent); _source.print(" internal abstract class "); _source.println(mapName); _source.print(_indent); _source.println(" {"); _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Member methods."); _source.print(_indent); _source.println(" //"); _source.println(); _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Member data."); _source.print(_indent); _source.println(" //"); _source.println(); _source.print(_indent); _source.println( " //-------------------------------------------------------"); _source.print(_indent); _source.println(" // Statics."); _source.print(_indent); _source.println(" //"); // Declare each of the state class member data. for (SmcState state: states) { _source.print(_indent); _source.println(" [NonSerialized]"); _source.print(_indent); _source.print( " internal static readonly "); _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(_indent); _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 the default state as well. _source.print(_indent); _source.println(" [NonSerialized]"); _source.print(_indent); _source.print(" private static readonly "); _source.print(mapName); _source.println("_Default Default ="); _source.print(_indent); _source.print(" new "); _source.print(mapName); _source.print("_Default(\""); _source.print(mapName); _source.println(".Default\", -1);"); _source.println(); // End of map class. _source.print(_indent); _source.println(" }"); _source.println(); // Declare the map default state class. _source.print(_indent); _source.print(" internal class "); _source.print(mapName); _source.println("_Default :"); _source.print(_indent); _source.print(" "); _source.print(context); _source.println("State"); _source.print(_indent); _source.println(" {"); // If reflection is on, generate the Transition property. if (Smc.isReflection() == true) { _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Properties."); _source.print(_indent); _source.println(" //"); _source.println(); _source.print(_indent); _source.print(" "); _source.println( "public override IDictionary Transitions"); _source.print(_indent); _source.println(" {"); _source.print(_indent); _source.println(" get"); _source.print(_indent); _source.println(" {"); _source.print(_indent); _source.println( " return (_transitions);"); _source.print(_indent); _source.println(" }"); _source.print(_indent); _source.println(" }"); _source.println(); } // Generate the constructor. _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Member methods."); _source.print(_indent); _source.println(" //"); _source.println(); _source.print(_indent); _source.print(" internal "); _source.print(mapName); _source.println( "_Default(string name, int id) :"); _source.print(_indent); _source.println(" base (name, id)"); _source.print(_indent); _source.println(" {}"); // Declare the user-defined transitions first. indent2 = _indent; _indent = _indent + " "; for (SmcTransition trans: definedDefaultTransitions) { trans.accept(this); } _indent = indent2; // Have each state now generate its code. Each state // class is an inner class. _source.println(); _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Inner classes."); _source.print(_indent); _source.println(" //"); for (SmcState state: states) { state.accept(this); } // If reflection is on, then define the transitions list. if (Smc.isReflection() == true) { List<SmcTransition> allTransitions = map.getFSM().getTransitions(); String transName; int transDefinition; _source.println(); _source.print(_indent); _source.println( " //-----------------------------------------------------------"); _source.print(_indent); _source.println(" // Member data."); _source.print(_indent); _source.println(" //"); _source.println(); _source.print(_indent); _source.println( " //-------------------------------------------------------"); _source.print(_indent); _source.println(" // Statics."); _source.print(_indent); _source.println(" //"); _source.print(_indent); _source.print(" "); _source.println( "private static IDictionary _transitions;"); _source.println(); _source.print(_indent); _source.print(" static "); _source.print(mapName); _source.println("_Default()"); _source.print(_indent); _source.println(" {"); _source.print(_indent); _source.print(" "); _source.println("_transitions = new Hashtable();"); // Now place the transition names into the list. 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.Add(\""); _source.print(transName); _source.print("\", "); _source.print(transDefinition); _source.println(");"); } _source.print(_indent); _source.println(" }"); } // End of the map default state class. _source.print(_indent); _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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -