我目前正在嘗試爲編程語言編寫一個(非常)小的解釋器/編譯器。我已經爲該語言設置了語法,現在我需要寫下該語言的語法。我打算使用LL(1)解析器,因爲經過一些研究後,它似乎是最容易使用的。寫入正確的LL(1)語法?
我是這個領域的新手,但是從我收集的內容來看,強烈推薦使用BNF或EBNF來形式化語法。但是,似乎並非所有語法都適合使用LL(1)解析器來實現。因此,我想知道以LL(1)形式編寫文法的正確(或推薦)方法是什麼。
謝謝你的幫助, 查理。
PS:我打算使用Haskell的Parsec庫編寫解析器。編輯:此外,根據SK邏輯,Parsec可以處理一個無限的前瞻(LL(k)?) - 但我想這個問題仍然代表了這種類型的語法。
秒差距能夠無限先行的。出於表現以外的原因,您不需要限制LL(1)。 – 2011-02-18 14:00:19
它不一定是LL(k),它可以是上下文相關的。所以,你唯一需要擔心的是避免左遞歸。 – 2011-02-18 14:09:35