看板 Programming 關於我們 聯絡資訊
各位大大安安,第一次發文,如有缺失還請多多包涵 小弟目前是大二的學生,學過的語言包含 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
alan23273850: 先修compiler課程?113應該有開吧 1.168.89.86 10/30 00:12
chuegou: 語法分析吧? 1.160.123.161 10/30 00:13
eddie55020: https://goo.gl/3RvQDq140.117.181.107 10/30 08:53
eddie55020: 這堂課還不錯會寫一個簡單的瀏覽器(ht140.117.181.107 10/30 08:53
eddie55020: ml,js)140.117.181.107 10/30 08:53
eddie55020: 基本的語法分析,詞法分析也講的不會140.117.181.107 10/30 08:53
eddie55020: 太難140.117.181.107 10/30 08:53
eddie55020: 對了這堂課是用Python140.117.181.107 10/30 08:55
bcew: nand2tetris的compiler部分可練習,不難也 223.139.157.73 10/30 12:29
james732: 我在天瓏買過簡體書,實作C subset的co 223.136.27.207 10/30 15:19
james732: mpiler 223.136.27.207 10/30 15:19
Epoch0404: 回alan大 學校是有開不過是大三的課 然140.113.121.228 10/30 16:16
Epoch0404: 然後卡我現在的必修140.113.121.228 10/30 16:16
Neisseria: 先寫四則運算直譯器看看,有感覺後 118.161.40.212 10/30 18:39
Neisseria: 再慢慢加入其他功能,比較會有具體感覺 118.161.40.212 10/30 18:40
Neisseria: 可以參考 bc(1) 的語法去寫 118.161.40.212 10/30 18:40
alan23273850: 那我覺得可以先跟學長姐打聽一下貴 123.193.38.80 10/30 19:51
alan23273850: 校的compiler教得好不好,如果教得 123.193.38.80 10/30 19:51
alan23273850: 特好,那到大三再學就可以了,一個 123.193.38.80 10/30 19:51
alan23273850: 教得好的老師其實不需要讓同學預習 123.193.38.80 10/30 19:52
alan23273850: 的,到時候你會覺得花那麼多時間自 123.193.38.80 10/30 19:52
alan23273850: 學CP值特低,因為老師一點就通;如 123.193.38.80 10/30 19:52
alan23273850: 果教得很爛,那就趕快趁現在自修, 123.193.38.80 10/30 19:52
alan23273850: 然後到時候修課去電其他人,因為反 123.193.38.80 10/30 19:52
alan23273850: 正老師教了也是聽不懂。 123.193.38.80 10/30 19:52
alan23273850: 不過我倒是要提醒compiler的內容對 123.193.38.80 10/30 19:53
alan23273850: 於一個正常學生是前所未有的概念, 123.193.38.80 10/30 19:53
alan23273850: 所以並不太適合自修,但可以試試。 123.193.38.80 10/30 19:53
alan23273850: 如果想利用時間充實自己,也不一定 123.193.38.80 10/30 19:53
alan23273850: 要寫compiler阿,練習當個駭客還是 123.193.38.80 10/30 19:53
alan23273850: 驗證碼辨識什麼的都很好。 123.193.38.80 10/30 19:53
jimfan: 我用bison、flex寫過interpreter都覺得頭 14.199.97.157 11/03 13:05
jimfan: 疼了,compiler還要輸出機器碼,應該特級 14.199.97.157 11/03 13:06
jimfan: 困難吧 14.199.97.157 11/03 13:06
bcew: 不考慮最佳化其實只是做苦工而已啦 223.140.195.48 11/03 16:23
bcew: 先寫個scanner把文字轉token,最簡單 223.140.195.48 11/03 16:26
bcew: 用遞迴的方式把所有token串成parse tree 223.140.195.48 11/03 16:28
bcew: 最後遍歷tree,所有基本sub-tree轉組語而已 223.140.195.48 11/03 16:33
bcew: 例如c=a+b就是var=exp,這exp又是var+var 223.140.195.48 11/03 16:41
bcew: var+var轉成mov r1,[a]; mov r2,[b]; add r1 223.140.195.48 11/03 16:44
bcew: ,r2; mov [tmp_01], r1; 再來換做c=exp 223.140.195.48 11/03 16:50
bcew: mov r1, [tmp_01]; mov [c], r1;這樣就做完 223.140.195.48 11/03 16:52
bcew: 機械碼和組語是一對一也很好做的 223.140.195.48 11/03 16:55
lc85301: 推nand2tetris ,手爆就能寫完 182.158.95.66 11/05 22:41
fayhong: 最近看到一個語言:Pyret,跑在 node.js111.241.215.194 11/08 09:21
fayhong: 換句話說,是一個可以 compile 成 js 的111.241.215.194 11/08 09:21
fayhong: 語言,你可以把他們的 source 抓回來研究111.241.215.194 11/08 09:21
fayhong: 換個角度想,你要不要先學著寫直譯器?111.241.215.165 11/13 10:57
fayhong: interpreter,設計一個簡單點的語言來做111.241.215.165 11/13 10:57
NoyVaughty: 113楊武開的編譯器風評不錯 140.113.69.32 11/17 19:08
hijkxyzuw: scheme 和 sicp (X140.116.102.187 02/24 23:48
xcycl: 看一下程式語言理論還有程式語意,再從一 92.40.249.78 04/28 19:26
xcycl: 個 while 語言瞭解怎麼拆解問題比較容易 92.40.249.78 04/28 19:26
xcycl: AST 的分析包括 tokenizer 用現代的函數式 92.40.249.78 04/28 19:28
xcycl: 編程,通常在一兩百行的程式碼就可以完結。 92.40.249.78 04/28 19:28
xcycl: 用 yacc& lex 實作浪費生命... 92.40.249.78 04/28 19:28
xcycl: https://wiki.haskell.org/Parsing_a_simpl 92.40.249.78 04/28 19:35
xcycl: e_imperative_language 92.40.249.78 04/28 19:35