簡體   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