[英]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.