自訂的檔案編譯器~ |
尚未結案
|
airs
一般會員 發表:7 回覆:4 積分:2 註冊:2002-08-30 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 例如input:1.txt的內容為 #define one ( two three ) #define two three 0x11 #define three 0x33 output:2.txt的內容為 #define one 0x77 #define two 0x44 #define three 0x33 如果檔案大的話 就很難處理了 我主要是用TStringList去做搜尋處理 但是覺得有點混亂 是用樹狀結構比較好嗎? 編譯器的架構該怎麼訂比較好哩? 謝謝~ >>< face="Verdana, Arial, Helvetica">airs 你好: (1)老實說~~小弟我不太了解你的問題?? 相信有很多其他的大大與我有相同的感 受,能夠麻煩你解釋得更清楚、更詳細嗎?? ( > > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
airs
一般會員 發表:7 回覆:4 積分:2 註冊:2002-08-30 發送簡訊給我 |
不好意思 表達能力不大型 我說清楚一點
其實 就像是寫一個compiler (parsing 或許更適合)
內容中 有很多token
每個token都有代表的位址 而有些位址不能直接獲得
要藉由一些位址運算(其他token相加減乘除)獲得 目的是求得 每個define token(one,two,three)的位址 #define one ( two three )
#define two three 0x11
#define three 0x33
.....
.... 輸出可獲得每個token的位址
one 0x77
two 0x44
three 0x33 因為不是one passes就可以得到了
而且token多的話 就很難處理了 原本我的做法是建一個database
passes一次就把直接可得位址的token紀錄下來
再passes多次慢慢解開
像是
passes 1 : 存入database three = 0x33 把three從database帶入 #define two three 0x11
->#define two 0x33 0x11
->#define two 0x44 passes 2 : 存入database two = 0x44 把two,three從database帶入 #define one ( two three )
-> #define one ( 0x44 0x33)
-> #define one 0x77 passes 3 : 存入database one = 0x77 不過覺得我的做法應該是最差的方法
所以請問各位大大有更好得方法嗎? 謝謝嚕
RaynorPao ~ 那關於ini的用法 我會先去看看 聽起來是很有幫助 謝謝你嚕~~
|
skcc
中階會員 發表:36 回覆:96 積分:88 註冊:2002-08-28 發送簡訊給我 |
引言: 例如input:1.txt的內容為 #define one ( two three ) #define two three 0x11 #define three 0x33 output:2.txt的內容為 #define one 0x77 #define two 0x44 #define three 0x33 如果檔案大的話 就很難處理了 我主要是用TStringList去做搜尋處理 但是覺得有點混亂 是用樹狀結構比較好嗎? 編譯器的架構該怎麼訂比較好哩? 謝謝~ >>< face="Verdana, Arial, Helvetica"> 以下為小弟對 Parser 方面的敷淺認識,如有不對請大家指點: 1. 把整個 1.txt 的內容載到 List 結構。 2. 建立 ReservedWord 表格。例如:char ReservedWordID[ MaxReservedWord 1 ][MAXIDLENGTH] = {"#define"... 3. 於 List 中分析 Token 種類,例如:PunctuationToken、IdentifierToken、TextStringToken、ConstantToken、OperatorToken…等等。 4. 特別留意在 IdentifierToken 中,是須要再細分為 ReservedWordToken、VariableToken、…等等。 5. 分類後,假設我們以 TokenKind 來表示目前 Token 為何種類別。 6. 據 TokenKind 來分析目前語句該是何種 Statement,例如: Assignment、ConditionalStatement、LoopStatement…等等。 7. 以 Assignment 為例,我們雖要找取下一個 Token 來鑒別是否為運算式。例如:當找到下一個 Token 時,其TokenKind 為 Constant 或者是 Variable 而資料型態又是數值的話,我們就可鑒定這是 Expression。 8. 以 Stack 為資料結構,運算出結果並存於 Variable 的數值表上。 9. 據 Variable 的數值表,輸出至目的檔案。 10. 重覆 步驟 3 - 9,直至整個 List 行畢。 Anthony Lee |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |