我一直在使用lex/yacc,現在我試圖切換到ANTLR。主要關心的是ANTLR是一個LL(*)解析器,而不像yacc是LALR。我習慣於自下而上思考,而且我不完全知道LL語法的優點。人們說,現在的LL語法更容易理解和流行。但似乎LR解析器更強大,例如LL解析器不能處理左遞歸,儘管似乎有一些解決方法。LALR vs LL解析器
所以問題是LL語法優於LALR的優點是什麼?如果有人能給我一些例子,我會很感激。鏈接到有用的文章也很棒。
感謝您的幫助提前!
(我認爲這是一個很好的資源:What advantages do LL parsers have over LR parsers?,但它會一直好一些例子)
如果有人給你分析器生成器,按照定義,它所做的是「易於實現」。在這種情況下,您可以選擇容易處理最大類語言的解析器生成器,以最大限度地減少您的工作量。從角度來看,恕我直言,LR輕鬆勝過LL。 GLR輕鬆勝過LR。 –
我同意,但儘管如此,LL仍然很容易實現。我指出LR通常需要使用工具。我覺得非常有趣的是,你可以手寫遞歸下降和代碼和語法齊頭並進。 –
是的,它的有趣和人們建設解析器應該知道它們。當你的語法變得很大時,把它變成LL形是不方便的,而且在一些(非常小的)點上,LR的方便勝過了你頭腦中的簡單概念。 LR非常容易理解,如果你不構建解析器生成器,並且它不像周圍沒有很多。 –