我需要一些資源開始(我是一個cs學生)編寫解析器和編譯器的最佳編程語言是什麼?
回答
Lisp/Scheme是我們負責使用回單一的任務。
他們很善於完成任務。
丹
雖然我曾經有過題爲「在現代的Java編譯器實現」一文的書,我認爲專業人士仍然使用C.除了證明他們的語言可以編譯本身。
是否想爲通用語言編寫解析器?在這種情況下,明確推薦使用目標語言編寫(和引導)。你應該吃自己的狗糧。
我會說,「在許多情況下推薦」,而不是「明確推薦」。 「通用語言」有點用詞不當,因爲沒有適合所有*任務的語言。我不會用C編寫Web應用程序,我不會用Python編寫操作系統。這並不是說你不能做這些事情。只是這樣做不合適。如果你接受這個邏輯,那麼你就有可能寫一個不適合解析的通用語言,因此不應該用它來解析它自己。 – Imagist 2009-08-22 09:46:23
下面是一個很好的例子:STEPS項目的* entire * JavaScript解釋器只有170行的OMeta源代碼,一個下午寫了一個人。在Narcissus JavaScript解釋器中,解析器*單獨*超過1000行JavaScript,另有1000行AST訪問者。所以,使用JavaScript來實現JavaScript比使用OMeta要冗長10倍。 – 2009-08-22 15:56:27
但是如果你真的使用了你的解析器/編譯器,你會拋出大量的錯誤。你真的通過在這種語言中實現它來使用它。 – Mnementh 2009-08-22 21:05:20
如果您從頭開始實施編譯器,大多數編程語言都可以完成該任務。 (我甚至知道使用Fortran IV和COBOL編寫的編譯器/解析器,儘管我不會推薦嘗試這樣做!)
但是,如果您嘗試實現的語言甚至有一個不平凡的語法,使用詞法分析器生成器和/或解析器生成器來實現前端更好。你會得到一個更快,更可靠的解析器。
因此,在此基礎上,可以使用合適的編程語言,可以使用合適的編程語言。在Wikipedia上有一個頁面比較了大量的解析器生成器。我沒有意識到有這麼多!
如果你的目標是學習解析器(和標記器)背後的技術,也許最好從頭開始編寫一個。你可以在大多數編程語言中做到這一點,所以你可以選擇一個你感覺舒服的。
前段時間,我寫了一系列博客文章,展示了用C#編寫一個類似小型虛構類BASIC編程語言的解析器是多麼容易。我不想在此處發送垃圾郵件,所以我不會提供直接鏈接,但是如果您訪問博客(請參閱我的個人資料)並進入底部,可以在「我的帖子」中找到「編寫分析程序」鏈接「-部分。
你會想看看解析器生成器。如果你是CS學生,那麼你可能會想看看Dragon Book:http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools。
使用C#或Java構建解析器可能是最容易的,因爲您不必擔心內存管理等問題,並且可以專注於語法。
一個好的C#解析器生成器是GPPG:http://plas.fit.qut.edu.au/gppg/。
有人可以解釋爲什麼這是downvoted?龍書是一個很好的資源,並且c#/ java恰好遵循了這個問題的單詞。雖然我認爲這個問題本身很愚蠢。 – gimpf 2009-08-22 09:23:05
解析器和編譯器是兩個獨立的問題。例如,我可能會在C編寫一個編譯器,但我絕不會在C中編寫解析器(我會使用解析器生成器)。對於速度不是高優先級的非常簡單的解析器,我可能用Perl或Python手動編碼解析器,它們具有良好的文本操作功能。但對於非常基本的解析器之外的任何東西,我都會使用某種解析器生成工具。最常用的是ANTLR,Coco/R和Lex/Yacc以及GNU實現Flex/Bison。我的個人偏好是Coco/R,但ANTLR似乎現在更受歡迎。
如果您正在編寫通用編程語言,您可能需要考慮自己編寫它。這有很多好處,包括可移植性(人們只需要移植第一版本的語言)和功能演示(解析是一個難題,所以如果可以用您的語言來完成,那麼這是對您的語言的證明)。如果您的語言被解釋,這可能不適合性能方面的原因。
- 1. 編寫gcc gnatmake Ada編譯器的語言是什麼?
- 2. 我會用什麼編譯器來編寫機器語言?
- 3. 編程語言和編譯器
- 4. 編程Webcrawler的最佳服務器語言是什麼?
- 5. 什麼是學習機器學習的最佳編程語言?
- 6. 編寫本地語言編譯器
- 7. 編寫混合語言解析器
- 8. 編寫一個臨時編譯器以使用新語言編寫編譯器
- 9. 編程語言解析器的來源?
- 10. 什麼是一個好的C#編譯器 - 編譯器/解析器生成器?
- 11. 什麼語言是寫入腳本的初始編譯器?
- 12. 編程語言剖析器
- 13. 如何爲該語言的某種語言編寫編譯器?
- 14. 什麼是瞭解編譯器的最佳方式?
- 15. CLR語言優化。語言編譯器VS JIT編譯器
- 16. 什麼是編寫專家系統的最佳語言?
- 17. 編寫Windows文件管理器應用程序的最佳編程語言
- 18. 什麼真正的編程語言很容易編寫解釋器?
- 19. 使用哪種語言編寫Java編譯器和JVM?
- 20. 哪個編寫web機器人最好的編程語言?
- 21. 使用什麼語言編寫Go編程語言?
- 22. 什麼是大型SOA系統的最佳編程語言?
- 23. 什麼是硒的最佳編程語言?
- 24. 什麼是Google Map API的最佳編程語言?
- 25. 現代Unix工具是用什麼編程語言編寫的?
- 26. 是否可以使用AWK編寫語言解析器?
- 27. 什麼編程語言的隱寫?
- 28. 以編譯語言編寫的插件
- 29. 什麼是最好的Scheme解釋器或編譯器?
- 30. 在c中編寫解析器的最佳/最快的方式#
Dupe of http://stackoverflow.com/questions/1669/learning-to-write-a-compiler許多其他許多人 – 2009-08-22 09:16:37
如果這是對資源的開放式請求,他們尼爾是正確的。如果它要求比較和對比,那麼它就接近「主觀和議論性」 – dmckee 2009-08-22 17:05:35
請參見[編譯器在什麼程度上是最好的語言](http://stackoverflow.com/問題/ 809710 /什麼是最好的語言編寫的編譯器) – nawfal 2014-07-21 11:45:17