官术网_书友最值得收藏!

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中,如下所示:

在了解了本書如何組織和要使用的實現語言之后,也許我們應該再看看什么時候需要設計編程語言,什么時候可以通過開發庫來避免另外設計編程語言。

主站蜘蛛池模板: 咸宁市| 乐业县| 井陉县| 抚宁县| 丹巴县| 阜阳市| 防城港市| 柳江县| 清远市| 海南省| 沙坪坝区| 宝鸡市| 甘孜| 宁城县| 山东| 临夏县| 合江县| 衡东县| 高唐县| 屏山县| 泰宁县| 佳木斯市| 兴国县| 禄劝| 若羌县| 罗田县| 日喀则市| 安顺市| 泰州市| 丹棱县| 广宗县| 淄博市| 韩城市| 禹城市| 吉木萨尔县| 子洲县| 阳城县| 永新县| 揭西县| 会东县| 沙雅县|