📄 smcvbgenerator.java
字号:
// default state's transitions. if (defaultState != null) { definedDefaultTransitions = defaultState.getTransitions(); } else { definedDefaultTransitions = new ArrayList<SmcTransition>(); } // Declare the map class. Declare it as abstract to // prevent its instantiation. _source.println(); _source.print(_indent); _source.print("Public MustInherit Class "); _source.println(mapName); _source.println(); _source.print(_indent); _source.println( " '------------------------------------------------------------"); _source.print(_indent); _source.println(" ' Shared data"); _source.print(_indent); _source.println(" '"); _source.println(); // Declare each of the state class member data. for (SmcState state: states) { stateName = state.getClassName(); _source.print(_indent); _source.print(" Public Shared "); _source.print(state.getInstanceName()); _source.print(" As "); _source.print(mapName); _source.print('_'); _source.print(stateName); _source.println(" = _"); _source.print(_indent); _source.print(" New "); _source.print(mapName); _source.print('_'); _source.print(stateName); _source.print("(\""); _source.print(mapName); _source.print('.'); _source.print(stateName); _source.print("\", "); _source.print(map.getNextStateId()); _source.println(")"); } // Create a default state as well. _source.print(_indent); _source.print(" Private Shared Default_ As "); _source.print(mapName); _source.println("_Default = _"); _source.print(_indent); _source.print(" New "); _source.print(mapName); _source.print("_Default(\""); _source.print(mapName); _source.println(".Default\", -1)"); _source.println(); // End of the map class. _source.print(_indent); _source.println("End Class"); _source.println(); // Declare the map default state class. _source.print(_indent); _source.print("Public Class "); _source.print(mapName); _source.println("_Default"); _source.print(_indent); _source.print(" Inherits "); _source.print(context); _source.println("State"); _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(" Public Overrides ReadOnly "); _source.println( "Property Transitions() As IDictionary"); _source.print(_indent); _source.println(" Get"); _source.println(); _source.print(_indent); _source.println(" Return _transitions"); _source.print(_indent); _source.println(" End Get"); _source.print(_indent); _source.println(" End Property"); _source.println(); } _source.print(_indent); _source.println( " '------------------------------------------------------------"); _source.print(_indent); _source.println(" ' Member methods"); _source.print(_indent); _source.println(" '"); _source.println(); // Generate the constructor. _source.print(_indent); _source.print(" Public Sub New("); _source.println( "ByVal name As String, ByVal id As Integer)"); _source.println(); _source.print(_indent); _source.println(" MyBase.New(name, id)"); _source.print(_indent); _source.println(" End Sub"); _source.println(); // Declare the user-defined default transitions first. for (SmcTransition transition: definedDefaultTransitions) { transition.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(" ' Shared data"); _source.print(_indent); _source.println(" '"); _source.println(); _source.print(_indent); _source.print(" "); _source.println( "Private Shared _transitions As IDictionary"); _source.println(); _source.print(_indent); _source.println(" Shared Sub New()"); _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(_indent); _source.print(" "); _source.print("_transitions.Add(\""); _source.print(transName); _source.print("\", "); _source.print(transDefinition); _source.println(")"); } _source.println(); _source.print(_indent); _source.println(" End Sub"); } _source.print(_indent); _source.println("End Class"); // Have each state now generate its code. Each state // class is an inner class. for (SmcState state: states) { state.accept(this); } return; } // end of visit(SmcMap) public void visit(SmcState state) { SmcMap map = state.getMap(); String context = map.getFSM().getContext(); String mapName = map.getName(); List<SmcAction> actions; // Declare the state class. _source.println(); _source.print(_indent); _source.print("Public NotInheritable Class "); _source.print(mapName); _source.print('_'); _source.println(state.getClassName()); _source.print(_indent); _source.print(" Inherits "); _source.print(mapName); _source.println("_Default"); _source.println(); // Generate the Transitions property if reflection is on. 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(" Public Overrides ReadOnly "); _source.println( "Property Transitions() As IDictionary"); _source.print(_indent); _source.println(" Get"); _source.println(); _source.print(_indent); _source.println(" Return _transitions"); _source.print(_indent); _source.println(" End Get"); _source.print(_indent); _source.println(" End Property"); _source.println(); } _source.print(_indent); _source.println( " '------------------------------------------------------------"); _source.print(_indent); _source.println(" ' Member methods"); _source.print(_indent); _source.println(" '"); _source.println(); // Add the constructor. _source.print(_indent); _source.print(" Public Sub New("); _source.println( "ByVal name As String, ByVal id As Integer)"); _source.println(); _source.print(_indent); _source.println(" MyBase.New(name, id)"); _source.print(_indent); _source.println(" End Sub"); // 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(_indent); _source.print(" Public Overrides Sub Entry("); _source.print("ByRef context As "); _source.print(context); _source.println("Context)"); _source.println(); // Declare the "ctxt" local variable. _source.print(_indent); _source.print(" Dim ctxt As "); _source.print(context); _source.println(" = context.Owner"); _source.println(); // Generate the actions associated with this code. for (SmcAction action: actions) { action.accept(this); } _source.print(_indent); _source.println(" End Sub"); } actions = state.getExitActions(); if (actions != null && actions.size() > 0) { _source.println(); _source.print(_indent); _source.print(" Public Overrides Sub Exit("); _source.print("ByRef context As "); _source.print(context); _source.println("Context)"); _source.println(); // Declare the "ctxt" local variable. _source.print(_indent); _source.print(" Dim ctxt As "); _source.print(context); _source.println(" = context.Owner"); _source.println(); // Generate the actions associated with this code. for (SmcAction action: actions) { action.accept(this); } _source.print(_indent); _source.println(" End Sub"); } // Have each transition generate its code. for (SmcTransition transition: state.getTransitions()) { transition.accept(this); } // If reflection is on, then generate the transitions // list. if (Smc.isReflection() == true) { List<SmcTransition> allTransitions = map.getFSM().getTransitions(); List<SmcTransition> stateTransitions = state.getTransitions(); List<SmcTransition> defaultTransitions; SmcState defaultState = map.getDefaultState(); String transName; int transDefinition; // Initialize the default transition list to all the // default state's transitions. if (defaultState != null) { defaultTransitions = defaultState.getTransitions(); } else { defaultTransitions = new ArrayList<SmcTransition>(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -