打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【深入淺出教你寫編譯器(Compiler)】一、簡介 by Dukeland

【深入淺出教你寫編譯器(Compiler)】一、簡介

相信每個 programmer 都跟西杰一樣想過設計一種自己的編程語言,最近西杰就有機會要寫一個編譯器了。雖然在大學時已經讀過如何編寫一個編譯器,但要認真寫起上來還真的不容易,而且網上教寫編譯器的教材不多(尤其中文的),所以就把這次經驗記下來,疏理一下自己在開發過程中所學到的東西,也同時為互聯網增加一些有關編譯器這方面的中文資源吧。

西杰在開發過程中經常參考 Actionscript 編譯器的 source code(用Java 寫的),大家有興趣可以看看這裏(在 /trunk/modules/asc 裏), 是 open source 的

在這個教程中,西杰將會使用 Javascript 來開發,原因有二。第一,JS 是我最喜愛的編程語言之一,語法簡潔易明,亦較多人認識。第二,可以讓大家在瀏覽器直接運行 Demo,大家不用浪費時間下載本文所舉的例子再執行。

整個教程將會分為七個主要單元,除了這篇簡介外,還包括以下六個單元。

二、詞法分析(Lexical analysis):把字元合併成為詞語

三、語法分析(Syntactic analysis):把詞語組合成一句有意思的句子

四、語意分析(Semantic analysis):把句子組成有上文下理的段落,成為有意思的故事。西杰認為這個單元和第三個單元最難,大家要有心理準備

五、虛擬機(Virtual Machine):用來運行編譯好的程式

六、生成代碼(Code Generation):把你閱讀完的故事寫出來給虛擬機看

七、優化器(Optimizer):可以把故事說得簡單一點

 

好了,那麼我們開始吧,先來看看我們即將開發的語言﹣Wescript (音類似 Westkit,不過要翹舌

)的特徵

兩種變數類型(variable type):bool, int

兩種控制結構(Control structure):if/else, while

注釋(Comment)://單行,/*多行*/

運算符(Operator):+, -, *, /, %, (, ), &&, ||, !, ==, !=, =, +=, ++, -=, –

Static scoping, bool 不能與 int 比較,忽略空白符號

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
Wescript
*/
var a:int = 1;
var b:int = 2;
var c:bool = true;
if (c){
    print a;
}else{
    print b;
}
var i:int = 0;
while (i < 10){
    print i;
    i++;
}
//WoW

就是這樣了,下一章就會開始做 Scanner。

Share this:




本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python基础训练100题-19
血迹分析:血淋淋的真相
算法设计与分析 插入排序
字符串--python
现场品质改善---七大手法
T-SQL中的ISNULL和IS NULL
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服