posts - 12,comments - 1,trackbacks - 0
          代碼生成一般采用tree rewriting的方式,先將源代碼轉換成語法樹的形式,通過模式匹配將子樹替換成葉結點,同時生成代碼指令,當樹全部替換完后代碼即生成了。采用這種方式主要關心匹配規(guī)則,甚至可以使用lex/yacc之類的工具生成code generator generator,也便于實現可移植的編譯器。

          dynamic programing
          前面的算法如果只是從左往右依次匹配的話生成的代碼質量不高,DP就是要考慮指令的代價,生成質量較優(yōu)的代碼。

          自底向上為每個節(jié)點計算一系列值存入數組C[],其中index代表使用的register數目,存儲的是相應的代價(要考慮可能增加的store/load指令代價),計算某個節(jié)點的C[]時,先找到可能的匹配模式,根據匹配模式選擇可能的寄存器數目組合,計算代價后選擇最小值。這樣遍歷整個樹后可以得到最小代價生成方式。



          posted on 2008-05-07 05:14 白色天堂 閱讀(264) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 拜城县| 睢宁县| 兴宁市| 镇巴县| 尉氏县| 大渡口区| 正蓝旗| 分宜县| 南部县| 东兴市| 华容县| 永嘉县| 昌图县| 高尔夫| 永和县| 梅河口市| 吴旗县| 通山县| 乾安县| 延川县| 深州市| 渭南市| 灯塔市| 渝中区| 多伦县| 南乐县| 武山县| 霍林郭勒市| 左权县| 于都县| 利川市| 信阳市| 凤庆县| 会宁县| 岑巩县| 察雅县| 清丰县| 双城市| 弥勒县| 三台县| 靖西县|