C#:在 foreach 中跳过一行?

标签 c# .net regex

我正在用 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/

相关文章:

c# - 系统.UnauthorizedAccessException : Access to the path "..." is denied

c# - XAML 解析异常 - xmlns :x ="http://schemas.microsoft.com/winfx/2006/xaml"

.net - 移动光标位置?

javascript - 使用正则表达式提取单词,除非它是给定的单词

正则表达式中 Lookaheads 和 Lookbehinds 的 JavaScript 支持

javascript - 所有浏览器都可以使用正则表达式处理多行搜索吗?

c# - 使用 ASP.Net 5 进行 JwtBearer 身份验证

c# - 在 TableCell 中插入 DropDownList

.net - .NET中非常简单的JSON序列化

c# - 0x80000000 == 2147483648 在 C# 但不是在 VB.NET