教你使用swift寫編譯器玩具(0)

前言

在上學期學完編譯原理以後總想搞個大事情,因而就萌生了寫編譯器的想法。在多方查找之下我發現了LLVM的官方教程。這個教程實現了一門玩具語言叫作Kaleidoscope。在官方教程中提供了即時編譯執行以及生成目標文件被C++調用的兩種執行方法,我在工程中也有一一對應實現。html

官方教程是用C++寫的,我就想能不能用swift來寫呢?結果還真給我找到了辦法,網上有一個現成的swift開源庫LLVMSwift,封裝了LLVM。固然我以爲不用這個庫直接使用LLVM也是ok的,其實這樣反而更貼近官方教程,使用那個開源庫還得理解它的邏輯。git

因而我把他們教程的前8章都寫完了,倉庫在這github

教程以下:swift

教你使用swift寫編譯器玩具(0)xcode

教你使用swift寫編譯器玩具(1)bash

教你使用swift寫編譯器玩具(2)post

教你使用swift寫編譯器玩具(3)ui

教你使用swift寫編譯器玩具(4)url

教你使用swift寫編譯器玩具(5)spa

教你使用swift寫編譯器玩具(6)

教你使用swift寫編譯器玩具(7)

教你使用swift寫編譯器玩具(8)

倉庫在這

開始

做爲第0章咱們首先要完成的是安裝LLVM。網上關於這方面的文檔很是少,這個本身摸索的過程真是十分痛苦,下面說一下如何取安裝LLVM並在xcode中使用。因爲本工程一開始把所有變量解析爲int64類型而不是Double類型,因此後續章節可能會出現與官方教程生成的中間代碼IR不相同的狀況,還請各位具體問題具體分析。

下載LLVM

首先咱們經過homebrew下載LLVM

brew install llvm
複製代碼

下載完LLVM咱們繼續下載pkg-config

brew install pkg-config
複製代碼

不使用LLVMSwift

你須要在xcode直接引入LLVM能夠經過添加環境到.bash_profile文件中實現

# 在.bash_profile下配置llvm命令行,具體狀況根據你所安裝的llvm版本不一樣
export PATH=/usr/local/Cellar/llvm/8.0.0_1/bin:$PATH;
複製代碼

而後在Xcode->Build Settings->Search Paths->Header Search Paths中添加

/usr/local/opt/llvm/include
/usr/local/opt/llvm/lib
複製代碼

使用LLVMSwift

下載來之LLVMSwift的腳本

在Package中添加

.package(url: "https://github.com/llvm-swift/LLVMSwift.git", from: "0.5.0")
複製代碼

並在target中依賴LLVM

dependencies: ["LLVM"]
複製代碼

配置環境

swift utils/make-pkgconfig.swift
複製代碼

編譯工程

swift build
複製代碼

build完成以後就能夠在工程中引入LLVM並使用LLVMSwift了。

相關文章
相關標籤/搜索