⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smccsharpgenerator.java

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        {            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 + -