我已經獲得了將一種語言翻譯成另一種語言的工作。使用正則表達式對於簡單的逐行方法來說,源代碼太靈活(複雜)。我可以在哪裏學習更多關於詞法分析和解析器的知識?解析,我在哪裏可以瞭解到它
回答
我最近一直在使用PLY這是一個在Python中執行lex和yacc。開始使用它很容易,文檔中有一些簡單的例子。
解析可以很快成爲一個非常技術性的話題,如果您使用像PLY這樣的解析器生成器,您可能不需要知道解析算法的所有細節。
如果你更喜歡基於Java的工具,Java編譯器編譯,JavaCC的,是一個很好的解析器/掃描器。它是由配置文件驅動的,並且會生成可以包含在程序中的Java代碼。雖然我還沒有使用它幾年,所以我不知道當前版本是如何。你可以在這裏找到更多:https://javacc.dev.java.net/
如果你想得到關於這個問題的「情緒化」,拿起一份「The Dragon Book」。它是通常是這個文本在編譯器設計過程中。它肯定會滿足你的需求「瞭解更多關於詞法分析和解析器」以及其他一些好玩東西!
IMH(umble)O,保存自己的胳膊和/或腿和購買舊版 - 它會填補你的信息需求。
flex和野牛是新的lex和yacc。 BNF的語法經常被嘲笑爲有點愚蠢。出於這個原因,有些人已經搬到了ANTLR和Ragel。
如果您沒有做太多的翻譯,您可以使用Perl或Ruby使用多線正則表達式來進行一次性的翻譯。爲現有語言編寫兼容的BNF語法不是一件輕鬆的任務。
另一方面,如果任何給定語言的.l和.y文件以開源形式提供,則完全可以利用它。然後,您可以從現有的分析樹中構建新的代碼。
樂星/解析+類型檢測+代碼生成是一個偉大的CS練習,我會推薦給任何人想要一個堅實的基礎,所以我所有的龍書
尼克勞斯·維爾特的書「編譯器構造」(可作爲免費的PDF) http://www.google.com/search?q=wirth+compiler+construction
要考慮的另一個教科書是Programming Language Pragmatics。我更喜歡龍書,但是YMMV。
如果您使用的是Perl,另一個需要考慮的工具是Parse::RecDescent。
如果你只需要做一次這個翻譯並且對編譯器技術一無所知,那麼我建議你儘可能使用一些相當簡單的翻譯,然後手動修復它。是的,這是很多工作。但比學習複雜的主題和爲一份工作編寫正確的解決方案要少得多。也就是說,你還應該學習這個主題,但不要不知道它是完成當前項目的障礙。
我發現這個網站有幫助:
我第一次使用的lex/yacc的是一個相對簡單的項目。本教程是我真正需要的。當我後來接觸更復雜的項目時,我從本教程中學到的熟悉和一個簡單的項目讓我可以創造更有趣的作品。
經過(相當)一些編譯器類後,我使用了The Dragon Book和C&T。我認爲C編譯器的構建可以消化得更好。不要把任何東西從龍書中拿走,但我認爲C是一本更實用的書。另外,如果您喜歡用Java編寫,我建議您使用JFlex和BYACC/J來滿足您的興趣和分析需求。
很多人推薦書籍。對於許多這些在分配和到期日等等的結構化環境中更有用。即使不是這樣,以不同的方式呈現材料也可以大有幫助。 (a)你有沒有考慮去一所擁有體面的CS課程的學校? (b)有很多在線講座,如MIT's Open Courseware。他們的EE/CS section有很多涉及解析的課程,儘管我本身看不到任何解析。它通常被引入作爲語言分類和自動機是許多CS理論的核心的第一理論課程之一。
Parsing Techniques - A Practical Guide 作者:Dick Grune和Ceriel J.H. Jacobs
本書(以PDF形式免費提供)給出了不同解析技術/算法的廣泛概述。如果你真的想理解不同的解析算法,這個IMO比Dragon Book更好參考(因爲解析技術完全側重於解析,而Dragon Book解析只是作爲一個 - 雖然很重要)解析器構建過程的一部分) 。
您的鏈接似乎被破壞 – Shawn 2011-04-22 02:28:10
- 1. 我可以從哪裏瞭解MEF?
- 2. 什麼是JAX-MS,我可以在哪裏瞭解它?
- 3. 我在哪裏可以找到一個DOM解析器?
- 4. 我在哪裏可以找到LinQ解析器
- 5. 我在哪裏可以找到msi條件解析器
- 6. 解析SDK:我可以在哪裏找到版本標識符?
- 7. C#和WCF,在哪裏瞭解它?
- 8. 我在哪裏可以瞭解更多關於TransportSecurityWithMessageCredential在Silverlight 3
- 9. 我可以在哪裏瞭解C++實例關鍵字?
- 10. 我可以在哪裏瞭解不同類型的數據庫?
- 11. 我在哪裏可以詳細瞭解黃瓜?
- 12. 我在哪裏可以瞭解OpenStack和雲計算
- 13. 我可以在哪裏瞭解推薦系統?
- 14. 我可以在哪裏瞭解pdf文件的結構?
- 15. 我在哪裏可以瞭解複雜的WPF綁定?
- 16. 我可以在哪裏瞭解Windows內核?
- 17. 我在哪裏可以瞭解更多關於WebCoreSharedBufferData的信息?
- 18. Hrez.exe我在哪裏可以找到它?
- 19. libcurl.lib - 我在哪裏可以得到它
- 20. Scenebuilder - 我在哪裏可以找到它?
- 21. User.find_for_oauth - 我可以在哪裏找到它?
- 22. 哪裏可以找到在Eclipse中解析的Boost.Test輸出
- 23. 在哪裏瞭解「位」?
- 24. 我在哪裏可以在PHP中找到一個好的MediaWiki Markup解析器?
- 25. 我在哪裏可以瞭解更多關於在Java中解析文本的知識?
- 26. JPA我在哪裏可以找到一些基本的解釋
- 27. 我在哪裏可以找到MDX解釋器?
- 28. 哪裏可以找到我的c#解決方案我的GUID
- 29. 哪裏可以找到並瞭解COTS解決方案的編程問題?
- 30. 我在哪裏可以找到解決Bugzilla問題的解決方案(補丁)?
+1爲mit的ocw,我一直使用它的數學。出於某種原因,按照我的計劃上課要比在六點半起牀要好得多。 – Shawn 2011-04-21 03:24:25