コード例 #1
0
ファイル: ArgmentParser.cs プロジェクト: kinumellowlife/Milky
        /// <summary>
        ///
        /// </summary>
        /// <param name="rule"></param>
        private void ParseRule(string rule)
        {
            ParseState nowState = ParseState.Start;
            ArgRule    argRule  = null;
            string     stack    = "";

            foreach (char c in rule)
            {
                switch (nowState)
                {
                case ParseState.Start:
                    switch (c)
                    {
                    case '/':
                        nowState = ParseState.StringArg;
                        stack    = "";
                        break;

                    case '+':
                        if (argRule != null)
                        {
                            argRule.HasParam = true;
                        }
                        break;

                    default:
                        argRule = new ArgRule("" + c);
                        cmds.Add(argRule.Key, argRule);
                        break;
                    }
                    break;

                case ParseState.StringArg:
                    switch (c)
                    {
                    case '/':
                        if (argRule != null)
                        {
                            argRule = new ArgRule(stack);
                            cmds.Add(argRule.Key, argRule);
                        }
                        nowState = ParseState.Start;
                        break;

                    case '+':
                        argRule = new ArgRule(stack);
                        cmds.Add(argRule.Key, argRule);
                        break;

                    default:
                        stack += c;
                        break;
                    }
                    break;
                }
            }
        }
コード例 #2
0
ファイル: ArgmentParser.cs プロジェクト: kinumellowlife/Milky
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        private void ParseCommandLine(string[] args)
        {
            ParseState state = ParseState.Start;
            CmdParam   cp    = null;

            foreach (var a in args)
            {
                string cmd = a;
                while ((cmd.Length > 0) && (cmd[0] == '-'))
                {
                    cmd = cmd.Remove(0, 1);
                }

                switch (state)
                {
                case ParseState.Start:
                    if (cmds.ContainsKey(cmd))
                    {
                        ArgRule rule = cmds[cmd];
                        cp = new CmdParam(rule.Key);
                        cmdParams.Add(cp);
                        if (rule.HasParam)
                        {
                            state = ParseState.StringArg;
                        }
                    }
                    else
                    {
                        cp = new CmdParam("", a);
                        cmdParams.Add(cp);
                    }
                    break;

                case ParseState.StringArg:
                    cp.Value = a;
                    state    = ParseState.Start;
                    break;
                }
            }
        }