繁体   English   中英

C#字符串比较问题

[英]C# string comparison issue

我正在从事一个使超级基础编程语言变得有趣的项目。 我正在使用print命令,它有2个不同的选项,直接打印或从堆栈打印。 该程序已在堆栈中,但是只要它运行从堆栈中打印的打印命令,它就会跳过它。 这是我的代码:

if (String.Equals(cmds[pos], "print"))
{
    if (cmds[pos + 1].StartsWith("\""))
    {
        Console.Write(cmds[pos + 1].Replace("\"", "").Replace(@"\q", "\"").Replace(@"\n", "\n"));
        outPos = pos + 2;
    }
    else if (string.Equals(cmds[pos + 1], "stack"))
    {
        Console.WriteLine(strStack.Pop());
        outPos = pos + 2;
    }
    else
    {
        //Console.WriteLine("HelloKreeKraw");
        outPos = pos + 1;
    }
}

这是命令:

push "Hi\n"
throw stack
push "Hello"
print stack
print "World!\n"
end

push命令将压入堆栈,而end命令将结束程序。 程序无缘无故跳过打印堆栈。 我测试了所有可能的东西,除非我错过了什么?

编辑:string.replace和cmds [pos + 1] .StartsWith(“ \\”“)工作得很好,但是当它检查第二个单词正在堆栈时,它会随机出现故障,我已经发现是这种情况。

如果您想学习,则需要阅读有关Lex和YACC / Bison的书。 基本上,这里没有使用标准的编译器理论。 您需要构建语法(命令->变量->新行),然后创建词法分析器来识别标记。 解析令牌以发出代码/选项是一种更好的方法。

顺便说一句,如果您使用的是C#,则可以通过在代码中先构建一个表达式树,然后最后执行它来获得真正的乐趣。 更接近于构建真正的编译器:)。

然后最简单的方法是在实现上使用递归下降(而不是嵌套的ifs ...)来执行您要尝试执行的操作。 我们可以与您合作来解决您的字符串处理问题,但这是一个已解决的问题,可以使用一些更好的工具来帮助您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM