C# で非常に単純なスクリプト インタープリターを作成しています。If/Else
この言語には、ステートメントやユーザーがプログラム可能なサブルーチンはありません。唯一の制御フローはgoto
キーワードです。
ループを使用してスクリプトを 1 行ずつ解析している場合、ブロックforeach
内のパラメーターで指定された行番号にプログラムを「ジャンプ」させるにはどうすればよいですか?GoTo()
static void Main(string[] args)
{
string testLines = "SomeCommand(34,32)\n" +
"SomeCommand(1)\n" +
"GoTo(5)\n" +
"This(\"Will\",\"Be\",\"Skipped\")\n" +
"Destination(\"OfTheGoToKeyWord\")";
Regex r = new Regex("^(?<cmd>\\w+)[(](?<params>\\S+)[)]", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
string[] lines = testLines.Split('\n');
foreach (string line in lines)
{
try
{
string[] matches = r.Split(line);
if (matches[1].Equals("GoTo"))
{
GoToLineSpecifiedByMatchesElement2();
}
}
catch (Exception)
{
}
}
}