[問題] 自學寫compiler 求建議

看板Programming作者 (Epoch0404)時間6年前 (2017/10/29 23:10), 編輯推噓10(10048)
留言58則, 13人參與, 7年前最新討論串1/2 (看更多)
各位大大安安,第一次發文,如有缺失還請多多包涵 小弟目前是大二的學生,學過的語言包含 C/C++ Java Python 然後有自學 過一點組語,最近想給自己一個挑戰就是寫一個簡單的compiler,爬過文之 後也有去圖書館翻了幾本compiler實作的書(像是用Java實作compiler等) ,可是程度感覺差太多而且書又厚又長實在啃不下去,網路上也有翻過一些簡單 的用Javascript寫基礎compiler的小文章,可是看完之後實在沒甚麼感覺 所以來這邊發問希望各位大大可以給點建議看要從哪裡切入,看最基礎入門要從哪 裡開始會比較好,希望有大大可以分享一點心得或是指點個方向,感恩大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.121.228 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1509289818.A.3C9.html

10/30 00:12, 6年前 , 1F
先修compiler課程?113應該有開吧
10/30 00:12, 1F

10/30 00:13, 6年前 , 2F
語法分析吧?
10/30 00:13, 2F

10/30 08:53, 6年前 , 3F
10/30 08:53, 3F

10/30 08:53, 6年前 , 4F
這堂課還不錯會寫一個簡單的瀏覽器(ht
10/30 08:53, 4F

10/30 08:53, 6年前 , 5F
ml,js)
10/30 08:53, 5F

10/30 08:53, 6年前 , 6F
基本的語法分析,詞法分析也講的不會
10/30 08:53, 6F

10/30 08:53, 6年前 , 7F
太難
10/30 08:53, 7F

10/30 08:55, 6年前 , 8F
對了這堂課是用Python
10/30 08:55, 8F

10/30 12:29, 6年前 , 9F
nand2tetris的compiler部分可練習,不難也
10/30 12:29, 9F

10/30 15:19, 6年前 , 10F
我在天瓏買過簡體書,實作C subset的co
10/30 15:19, 10F

10/30 15:19, 6年前 , 11F
mpiler
10/30 15:19, 11F

10/30 16:16, 6年前 , 12F
回alan大 學校是有開不過是大三的課 然
10/30 16:16, 12F

10/30 16:16, 6年前 , 13F
然後卡我現在的必修
10/30 16:16, 13F

10/30 18:39, 6年前 , 14F
先寫四則運算直譯器看看,有感覺後
10/30 18:39, 14F

10/30 18:40, 6年前 , 15F
再慢慢加入其他功能,比較會有具體感覺
10/30 18:40, 15F

10/30 18:40, 6年前 , 16F
可以參考 bc(1) 的語法去寫
10/30 18:40, 16F

10/30 19:51, 6年前 , 17F
那我覺得可以先跟學長姐打聽一下貴
10/30 19:51, 17F

10/30 19:51, 6年前 , 18F
校的compiler教得好不好,如果教得
10/30 19:51, 18F

10/30 19:51, 6年前 , 19F
特好,那到大三再學就可以了,一個
10/30 19:51, 19F

10/30 19:52, 6年前 , 20F
教得好的老師其實不需要讓同學預習
10/30 19:52, 20F

10/30 19:52, 6年前 , 21F
的,到時候你會覺得花那麼多時間自
10/30 19:52, 21F

10/30 19:52, 6年前 , 22F
學CP值特低,因為老師一點就通;如
10/30 19:52, 22F

10/30 19:52, 6年前 , 23F
果教得很爛,那就趕快趁現在自修,
10/30 19:52, 23F

10/30 19:52, 6年前 , 24F
然後到時候修課去電其他人,因為反
10/30 19:52, 24F

10/30 19:52, 6年前 , 25F
正老師教了也是聽不懂。
10/30 19:52, 25F

10/30 19:53, 6年前 , 26F
不過我倒是要提醒compiler的內容對
10/30 19:53, 26F

10/30 19:53, 6年前 , 27F
於一個正常學生是前所未有的概念,
10/30 19:53, 27F

10/30 19:53, 6年前 , 28F
所以並不太適合自修,但可以試試。
10/30 19:53, 28F

10/30 19:53, 6年前 , 29F
如果想利用時間充實自己,也不一定
10/30 19:53, 29F

10/30 19:53, 6年前 , 30F
要寫compiler阿,練習當個駭客還是
10/30 19:53, 30F

10/30 19:53, 6年前 , 31F
驗證碼辨識什麼的都很好。
10/30 19:53, 31F

11/03 13:05, 6年前 , 32F
我用bison、flex寫過interpreter都覺得頭
11/03 13:05, 32F

11/03 13:06, 6年前 , 33F
疼了,compiler還要輸出機器碼,應該特級
11/03 13:06, 33F

11/03 13:06, 6年前 , 34F
困難吧
11/03 13:06, 34F

11/03 16:23, 6年前 , 35F
不考慮最佳化其實只是做苦工而已啦
11/03 16:23, 35F

11/03 16:26, 6年前 , 36F
先寫個scanner把文字轉token,最簡單
11/03 16:26, 36F

11/03 16:28, 6年前 , 37F
用遞迴的方式把所有token串成parse tree
11/03 16:28, 37F

11/03 16:33, 6年前 , 38F
最後遍歷tree,所有基本sub-tree轉組語而已
11/03 16:33, 38F

11/03 16:41, 6年前 , 39F
例如c=a+b就是var=exp,這exp又是var+var
11/03 16:41, 39F

11/03 16:44, 6年前 , 40F
var+var轉成mov r1,[a]; mov r2,[b]; add r1
11/03 16:44, 40F

11/03 16:50, 6年前 , 41F
,r2; mov [tmp_01], r1; 再來換做c=exp
11/03 16:50, 41F

11/03 16:52, 6年前 , 42F
mov r1, [tmp_01]; mov [c], r1;這樣就做完
11/03 16:52, 42F

11/03 16:55, 6年前 , 43F
機械碼和組語是一對一也很好做的
11/03 16:55, 43F

11/05 22:41, 6年前 , 44F
推nand2tetris ,手爆就能寫完
11/05 22:41, 44F

11/08 09:21, 6年前 , 45F
最近看到一個語言:Pyret,跑在 node.js
11/08 09:21, 45F

11/08 09:21, 6年前 , 46F
換句話說,是一個可以 compile 成 js 的
11/08 09:21, 46F

11/08 09:21, 6年前 , 47F
語言,你可以把他們的 source 抓回來研究
11/08 09:21, 47F

11/13 10:57, 6年前 , 48F
換個角度想,你要不要先學著寫直譯器?
11/13 10:57, 48F

11/13 10:57, 6年前 , 49F
interpreter,設計一個簡單點的語言來做
11/13 10:57, 49F

11/17 19:08, 6年前 , 50F
113楊武開的編譯器風評不錯
11/17 19:08, 50F

02/24 23:48, 7年前 , 51F
scheme 和 sicp (X
02/24 23:48, 51F

04/28 19:26, 7年前 , 52F
看一下程式語言理論還有程式語意,再從一
04/28 19:26, 52F

04/28 19:26, 7年前 , 53F
個 while 語言瞭解怎麼拆解問題比較容易
04/28 19:26, 53F

04/28 19:28, 7年前 , 54F
AST 的分析包括 tokenizer 用現代的函數式
04/28 19:28, 54F

04/28 19:28, 7年前 , 55F
編程,通常在一兩百行的程式碼就可以完結。
04/28 19:28, 55F

04/28 19:28, 7年前 , 56F
用 yacc& lex 實作浪費生命...
04/28 19:28, 56F

04/28 19:35, 7年前 , 57F

04/28 19:35, 7年前 , 58F
e_imperative_language
04/28 19:35, 58F
文章代碼(AID): #1PzUzQF9 (Programming)
文章代碼(AID): #1PzUzQF9 (Programming)