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

问题描述:

我试图解释字符串命令来运行相关的脚本。这是我到目前为止:解析基本脚本语言的字符串命令

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

但这不是一个开关的情况下有条件结构中工作。

+0

你可以使用很多字符串魔法,这是可能的,但需要努力。或者你可以看看现有的解析框架,如Sprache:https://github.com/sprache/sprache – dognose

+0

解析。那是我正在寻找的关键词。我将更新问题的标题。谢谢。 – user1423893

您必须创建一个解释器类,它将命令拆分为单独的部分,存储在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( '(')) )

为参数使用由','拆分