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

📄 smcjavagenerator.java

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