解析基本脚本语言的字符串命令
问题描述:
我试图解释字符串命令来运行相关的脚本。这是我到目前为止:解析基本脚本语言的字符串命令
// A typical command that can come from a TextBox control
string command = "Create";
// Remove all white space
command = System.Text.RegularExpressions.Regex.Replace(command, @"\s", "");
// Make case insesitive by converting to lowercase
command = command.ToLower();
switch (command)
{
case "create": /* Run create script*/ break;
case "delete": /* Run delete script*/ break;
// etc.
}
这工作正常,直到我引入与特定命令相关的参数。
我认为这可以通过圆括号来表示这样更复杂的命令如下所示:
string command = "Create(paramA, paramB, etc.)"
假设我用这种方法正确的道路上,这将是用于检测的有效方法并解释参数?
规则的命令是:
“(”“)”打开和关闭该组参数 “”分隔每个参数
换句话说如何检测的开始和结束参数并正确地分离每一个?
另一个问题当然是将命令本身与参数分开。
我想过使用:
command.StartsWith("create"); // etc.
但这不是一个开关的情况下有条件结构中工作。
答
您必须创建一个解释器类,它将命令拆分为单独的部分,存储在Command
类中。例如,您可以打开Command.Name。
一些伪代码来表示我的意思:
public static class Interpreter
{
public static Command CreateCommand(string commandLine)
{
Command newCommand = new Command();
newCommand.Name = commandLine.Split(' ')[0];
newCommand.Parameters.Add(...)
return newCommand
}
}
你当然会必须明确的检查命令行的语法。命令类存储关于该命令的信息,如名称,参数列表,返回类型等。
一旦您有一个Command
对象,就可以对其任何属性执行switch语句(如果适用)。稍后,您可以编写执行命令的方法,并将所有信息整齐地存储起来,而无需再次解释。
答
在代码
只是改变
开关(命令)
与
开关(command.Substring(0,command.IndexOf( '(')) )
为参数使用由','拆分
你可以使用很多字符串魔法,这是可能的,但需要努力。或者你可以看看现有的解析框架,如Sprache:https://github.com/sprache/sprache – dognose
解析。那是我正在寻找的关键词。我将更新问题的标题。谢谢。 – user1423893