2013-12-12 42 views
4

我需要爲命題邏輯做一個解析器。我假裝像Java中的遞歸下降解析器那樣通過手工來實現。我的意思是定義一個有限狀態機來識別令牌等。 我看到了一些簡單的算術解析器的例子,它們處理所有的「單解析器」僅依賴於語法規則。它看起來並不像一個單獨的詞法分析器,它爲解析器提供了令牌。用手編寫命題邏輯解析器

因爲我想以最正確的方式做到這一點,所以我爲這份工作徵求意見。任何鏈接到相關的信息是受歡迎的。

回答

3

更多的信息會有用,例如你想要使用的語法和一個示例輸入String。我不知道你對喬姆斯基的語法水平了解多少,但這是關鍵。簡體中說,詞法分析器可以在單詞級別上解析(級別3:常規語法),解析器也可以分析語法(級別2:上下文無關文法)。 (更多信息請見:lexers vs parsers

可以使用無掃描器的解析器,但是我認爲如果你沒有試圖避免使用詞法分析器而編寫的話,你會在解析器中集成詞法分析器。換句話說,如果你編寫你的程序,你可以調用將原始輸入字符串標記爲詞法分析器的部分,以及將語法應用於解析器的部分,如果這就是你想調用它的部分。但是你不應該對這些條款給予太多的關注。如果你寫了一個解析器,並且不需要詞法分析器,機會很大,詞法分析器已經在你的代碼中,但是誰在乎;)希望有幫助,但是可以自由地詢問它是否還不清楚!

+1

尼斯鏈接。那麼,在理論上,詞法分析器將處理命題邏輯的正則語法,運算符NOT,OR,AND等。解析器將處理邏輯的正確形成的公式(上下文無關語法)。也許在這種情況下,詞法分析器沒有太多的工作要做,但對於練習和學習來說可能是有用的,因爲我對這個主題有了新的認識。我認爲如果我想在稍後解析不同的語言時,使用單獨的詞法分析器會更加方便和容易。我真的不想避免任何事情,這只是爲了學習。 – Wyvern666

+1

解析器從詞法分析器中逐個獲取標記,或者先分析器完成他的工作並一次爲解析器發送所有標記?我認爲這可能是雙向的,但哪個更好? – Wyvern666

+1

如果是爲了學習一個單獨的詞法分析器,理解這些機制肯定更好。恕我直言,它會更清楚地首先標記所有的標記,然後解析它們,尤其是如果它不是以儘可能快的速度進行解析,那麼您可以看到明文,標記和結果之間的切分。 –