- 自己動手構建編程語言:如何設計編譯器、解釋器和DSL
- (美)克林頓·L.杰弗瑞
- 882字
- 2024-05-11 19:44:56
1.1.3 示例中使用的語言
本書使用并行翻譯模型同時提供兩種編程語言的代碼示例。第一種示例語言是Java,因為這種語言無處不在。希望讀者已了解Java或C++語言,并能夠以中等熟練程度閱讀示例。第二種示例語言是作者自己的編程語言Unicon。在閱讀本書時,讀者可以自己判斷哪種語言更適合構建自己的編程語言。本書將以這兩種語言提供盡可能多的示例,并且兩種語言的示例將盡可能類似地編寫,這樣做有時對較小的語言有利。
Java和Unicon之間的差異是顯而易見的,但我們要使用的編譯器構建工具在一定程度上降低了這種差異的重要性。我們將使用久負盛名的Lex和YACC的最新衍生工具來生成掃描器和解析器。通過堅持使用與原始Lex和YACC盡可能兼容的Java和Unicon工具,我們的編譯器的前端在兩種語言中幾乎相同。Lex和YACC是聲明性編程語言,它們在比Java或Unicon更高的級別上解決了一些難題。
當使用Java和Unicon作為實現語言時,我們還需要討論另外一種語言,即我們正在構建的示例語言。它是我們決定要構建的編程語言的一種替代。出于某種隨意性,我將為此引入一種稱為Jzero的語言。Niklaus Wirth發明了一種稱為PL/0的“玩具”語言(編程語言zero,該名稱是PL/1語言名稱的一個翻版),用于編譯器構造課程。Jzero是Java的一個很小的子集,用于類似的目的。我進行了非常仔細的查找(也就是說,我搜索了Jzero,然后搜索了Jzero編譯器),想看看是否有人已經發布了一個我們可以使用的Jzero定義,但我沒有找到一個同名的定義,所以我們會在工作過程中進行彌補。
本書中的Java示例將使用OpenJDK 14進行測試。也許其他版本的Java(如OpenJDK 12或Oracle Java JDK)也會同樣工作,也可能不會。可以從http://openjdk.java.net網站獲得OpenJDK。或者,如果在Linux操作系統上,則可能有一個可以安裝的OpenJDK包。Java示例所需的其他編程語言構造工具(JFlex和BYACC/J)將在后續章節中介紹。我們支持的Java實現可能更受運行這些語言構造工具的版本的限制。
本書中的Unicon示例使用Unicon版本13.2,可從http://unicon.org中獲得。要在Windows上安裝Unicon,必須下載.msi文件并運行安裝程序。要在Linux上安裝,通常要對源代碼做git克隆,然后輸入make,還要把unicon/bin目錄添加到PATH中,如下所示:

在了解了本書如何組織和要使用的實現語言之后,也許我們應該再看看什么時候需要設計編程語言,什么時候可以通過開發庫來避免另外設計編程語言。
- 高手是如何做產品設計的(全2冊)
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- 機器學習系統:設計和實現
- JMeter 性能測試實戰(第2版)
- Machine Learning with R Cookbook(Second Edition)
- Unity Virtual Reality Projects
- VMware虛擬化技術
- Scala程序員面試算法寶典
- ServiceNow:Building Powerful Workflows
- LabVIEW虛擬儀器程序設計從入門到精通(第二版)
- .NET 4.5 Parallel Extensions Cookbook
- JavaScript+jQuery網頁特效設計任務驅動教程
- PyQt編程快速上手
- Google Adsense優化實戰
- Mobile Test Automation with Appium