2013-04-12 40 views
1

我試圖解釋字符串命令來運行相關的腳本。這是我到目前爲止:解析基本腳本語言的字符串命令

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

回答

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語句(如果適用)。稍後,您可以編寫執行命令的方法,並將所有信息整齊地存儲起來,而無需再次解釋。

0
在代碼

只是改變

開關(命令)

開關(command.Substring(0,command.IndexOf( '(')) )

爲參數使用由','拆分