線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1080
推到 Plurk!
推到 Facebook!

自訂的檔案編譯器~

尚未結案
airs
一般會員


發表:7
回覆:4
積分:2
註冊:2002-08-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-23 15:40:04 IP:61.13.xxx.xxx 未訂閱
例如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去做搜尋處理 但是覺得有點混亂 是用樹狀結構比較好嗎? 編譯器的架構該怎麼訂比較好哩? 謝謝~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-23 22:12:03 IP:61.221.xxx.xxx 未訂閱
引言: 例如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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-24 00:44:33 IP:61.229.xxx.xxx 未訂閱
不好意思 表達能力不大型 我說清楚一點 其實 就像是寫一個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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-24 11:11:03 IP:210.0.xxx.xxx 未訂閱
引言: 例如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
系統時間:2024-04-25 13:51:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!