/// <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; } } }
/// <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; } } }