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