解析基本脚本语言的字符串命令

时间:2013-04-12 13:02:39

标签: c# string parsing scripting

我正在尝试解释字符串命令来运行相关的脚本。这就是我到目前为止所做的:

        // 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.

但这在switch case条件结构中不起作用。

2 个答案:

答案 0 :(得分:2)

您必须创建一个解释器类,它将命令拆分为单独的部分,存储在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语句(如果适用)。稍后,您可以编写执行命令的方法,并将所有信息整齐地存储起来,而无需再次解释。

答案 1 :(得分:0)

在您的代码中只需更改

即可
  

开关(命令)

  

switch(command.Substring(0,command.IndexOf('(')))

参数使用','

拆分