C_and_CPP 板


LINE

編譯器真的很難。 https://descent-incoming.blogspot.com/2017/01/blog-post.html 這篇描述我的學習方式, 讓你參考看看。 也列出我有購買的編譯器書籍, 看看你有沒有興趣的。 https://descent-incoming.blogspot.com/2018/01/44.html 這幾篇描述我一步步走來的紀錄。 從建立 AST 到輸出組合語言。 最後我也寫了一個簡單的組譯器, 輸出的 elf object file 可以和 gnu ld, link, 最後我停留在這裡。 這幾篇文章最主要是展示我的學習方式, 也許你有不同的學習之路。 我是建議產生 AST, 有了 AST, 後續的動作會很好處理。 ※ 引述《wei115 (NEET)》之銘言: : 問題(Question): : : 我想試試看實作一個C編譯器 : 之前沒有學過編譯器,看了幾個星期的資料後,還是不太懂編譯器 : 不過土法煉鋼,還是煉出了一些東西 : 因為不知道寫一個編譯器的難度,所以簡化一下目標,只做編譯器的前端 : 使用C作為中間語言,希望可以去除語法糖,和格式盡量和組合語言相近,以便後端實做 : 使用遞迴下降方法,沒有多少檢查(int str = "aabbcc"; 是可以的) : 語法3成參考K&R,7成用猜的,程式碼寫的不夠合理,常常加一個功能就要動到整個專案 : 之後收集更多資料後會全部打掉重練 : 目前有做出int、char的宣告if、while : 之後想做陣列&指標的功能,但不知道指標的宣告和使用該如何簡化 : 想請各位大大提供一些方向 : 謝謝 : p.s : 以一個1+...+100的迴圈程式為例 : 輸入: : int main() : { : int a = 101; : int out = 0; : while(a = a - 1) : out = out + a; : } : 輸出: : int r0;int r1;int r2;int r3;int r4;int r5;int r6;int r7;int r8;int r9;int : r10;int r11;int r12;int r13;int r14;int r15;int r16;int r17;int r18;int r19; : int main() : { : r0 = 101; : int a = r0; : r0 = 0; : int out = r0; : L0: : r0 = a; : r1 = a; : r2 = 1; : r3 = r1 - r2; : r0 = r3; : a = r3; : if(!r0) goto L1; : r4 = out; : r5 = out; : r6 = a; : r7 = r5 + r6; : r4 = r7; : out = r7; : goto L0; : L1: : } : 希望輸入的程式碼可以轉成這種最簡形式 : -- : 「我不創造美少女,我只是從紙中看見了天使,並用手使她們自由。」 : ——矢吹 : -- :



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.109.77
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1557157798.A.E9F.html : → Lipraxde: 你知道 SSA form 是什麼東西嗎?你好像是想在產生中間 05/07 07:41 : → Lipraxde: 表示法的時後做暫存器分配?暫存器分配是後端該做的事 05/07 07:41 : 會有這樣的現象是因為我在亂寫....,原本是計算機的形式(輸入一個算式,輸出是三位址 : 碼),處理的時候是以一行作為單位,處理完之後,暫存器編號歸零,後來擴充功能後這樣 : 的形式也保留了下來 : ※ 編輯: wei115 (27.246.39.28), 05/07/2019 09:41:02 : → Lipraxde: 那你有 AST 嗎? 05/07 11:10 : → wei115: 沒有,詞彙分析後用遞迴下降,直接輸出中間碼 05/07 11:53 : → wei115: 中間基本上全部寫成一陀..... 05/07 11:54 : → Lipraxde: 先建立 AST,之後再從 AST 產生中間碼會比較容易寫 05/07 12:10 : → wei115: 目前對ast不夠了解,之後收集足夠的資料後打算全部重寫, 05/07 12:26 : → wei115: 但是現在對要產生怎樣形式的中間碼還沒有什麼頭緒 05/07 12:26 : → Lipraxde: 用你原本的方法就好了啊,不然 java bytecode、llvm IR 05/07 13:22 : → Lipraxde: 之類的,還是你是打算後端也自己寫? 05/07 13:22 : 普通的運算式我可以這樣寫,但像是指標和陣列我就不知道怎麼分解了...... : → Killercat: 可惜不是C++ 不然板上一堆CPPGM的心得 XD 05/07 13:47 : C++感覺更難...... : ※ 編輯: wei115 (27.246.39.28), 05/07/2019 14:03:13 -- 紙上得來終覺淺,絕知此事要躬行。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.196.174.254
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1557223480.A.ACB.html ※ 編輯: descent (113.196.174.254), 05/07/2019 18:13:31
1F:推 cutekid: 推(Y) 05/07 20:29
2F:推 kishow01: 推推 剛剛好也在學編譯器 05/07 21:12
3F:推 wei115: d大我有看你的文章!但我程度還是不夠,要消化需要一段時 05/08 03:04
4F:→ wei115: 間 05/08 03:04
5F:→ wei115: 之後我會試試看實作AST 05/08 03:05







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP