gpt4 book ai didi

C#:在 foreach 中跳过一行?

转载 作者:行者123 更新时间:2023-11-30 19:10:50 28 4
gpt4 key购买 nike

我正在用 C# 编写一个非常简单的脚本解释器。这种语言中没有If/Else 语句或用户可编程的子程序;唯一的控制流是 goto 关键字。

如果我使用 foreach 循环来逐行解析脚本,我怎样才能让程序“跳转”到 中参数指定的行号GoTo() block ?

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)
{

}
}
}

最佳答案

您将无法为此使用 foreach。您需要一个 while 循环并按索引跳转。

看起来这可能只是您想要做的事情的冰山一角。如果是这样,您很快就会厌倦正则表达式。阅读编译器设计,特别是如何分离词法、句法和语义阶段,以及如何重用可以在每个步骤为您提供帮助的现有工具。

在我看来,在阅读了一些内容之后,您可能很快就会明白为什么您当前的方法可能不够用,而且一个成熟的编译器可能会矫枉过正。在这种情况下,.Net 有一些很好的内置功能来帮助定义所谓的“Domain Specific Languages”,这可能正是您所需要的。

关于C#:在 foreach 中跳过一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208350/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com