• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                把中間指令都搞定了之后,得開(kāi)始做一門JIT的腳本引擎了。但是這門腳本引擎不是用來(lái)寫的,而是用來(lái)給更高級(jí)的語(yǔ)言編譯的。這是什么意思呢?雖然我現(xiàn)在寫了個(gè)語(yǔ)法分析器,提供了語(yǔ)法樹(shù),是我的目的是讓我以后設(shè)計(jì)的更高級(jí)的語(yǔ)言可以編譯成這門相對(duì)底層的語(yǔ)言(從一棵語(yǔ)法樹(shù)轉(zhuǎn)換成另一棵語(yǔ)法樹(shù)),而不是直接編譯成中間指令。這樣很多事情都會(huì)好做很多。

                這一門語(yǔ)言主要模仿C,提供指針、結(jié)構(gòu)、數(shù)組、基本類型和函數(shù)指針。還有extern函數(shù)做外部鏈接用。因?yàn)榫幾g成機(jī)器碼,所以可以直接把一個(gè)函數(shù)指針丟進(jìn)我的腳本引擎,就可以這么用了。而且我的腳本里面的函數(shù)也可以直接作為一個(gè)函數(shù)指針提供出來(lái)。復(fù)合類型組要勇于跟C++交互。在C++與腳本里面聲明同樣的struct,不需要做額外工作,就可以互相使用了。

                語(yǔ)法如下:
              1 Vczh JIT Native Language
              2 -----------------------------------------
              3 基本數(shù)據(jù)類型:
              4 
              5 [signed|unsigned]byte
              6 [signed|unsigned]short
              7 [signed|unsigned]int
              8 char
              9 wchar
             10 float
             11 double
             12 bool
             13 
             14 復(fù)合類型:
             15 
             16 TYPE*
             17 TYPE[LENGTH]
             18 TYPE(TYPE,)
             19 void(TYPE,)
             20 
             21 結(jié)構(gòu)類型:
             22 struct
             23 {
             24   TYPE NAME;
             25   
             26 }
             27 -----------------------------------------
             28 表達(dá)式:
             29 
             30 數(shù)字、浮點(diǎn)、字符、寬字符、truefalsenull(指針,函數(shù)指針)
             31 操作符表達(dá)式
             32 (表達(dá)式)
             33 VALUE(VALUE,)
             34 TYPE(VALUE)
             35 NAME
             36 -----------------------------------------
             37 操作符:
             38 
             39 + - * /        :int X int = int
             40                :float X int = float
             41         :int X float = float
             42         :float X float = float
             43         :ptr X int = ptr(+ -)
             44         :int X ptr = ptr(+ -)
             45 
             46 & | ^ %        :int X int = int
             47 
             48 && || ^^    :int X int = bool
             49 
             50 < > == <= >= !=    :int X int = bool
             51         :float X float = bool
             52         :ptr X ptr = bool
             53 
             54 -        :X int = int
             55         :X float = float
             56 
             57 ~        :X int = int
             58 
             59 !        :X int = float
             60 
             61 &        :X VALUE,獲取指針
             62 
             63 *        :X PTR,獲取內(nèi)容
             64 
             65 X[Y]        :數(shù)組、指針
             66 -----------------------------------------
             67 對(duì)象聲明:
             68 
             69 TYPE NAME
             70 TYPE NAME=VALUE
             71 const TYPE NAME=VALUE
             72   數(shù)組:{VALUE,}
             73   結(jié)構(gòu):{NAME=VALUE,},必須全員賦值
             74 -----------------------------------------
             75 語(yǔ)句:
             76 
             77 對(duì)象聲明
             78 
             79 表達(dá)式
             80 左值=表達(dá)式
             81 
             82 if (bool) 語(yǔ)句塊[else 語(yǔ)句]
             83 if (bool) 語(yǔ)句;[else 語(yǔ)句]
             84 while (bool) 語(yǔ)句
             85 do 語(yǔ)句 while (bool)
             86 {語(yǔ)句;}
             87 
             88 break
             89 continue
             90 return 表達(dá)式
             91 return
             92 空語(yǔ)句
             93 -----------------------------------------
             94 函數(shù):
             95 
             96 TYPE NAME(TYPE NAME,){語(yǔ)句;}
             97 void NAME(TYPE NAME,){語(yǔ)句;}
             98 extern TYPE NAME(TYPE,) alias "KEY";
             99 extern void NAME(TYPE,) alias "KEY";
            100 -----------------------------------------
            101 類型聲明:
            102 
            103 typedef TYPE NAME
            104 -----------------------------------------
            105 程序:
            106 
            107 類型聲明;
            108 對(duì)象聲明;
            109 函數(shù)
            110 -----------------------------------------
            111 關(guān)鍵字:
            112 
            113 signed unsigned byte short int double float char wchar bool struct
            114 null true false
            115 void extern typedef if else while do break continue return alias

                大部分照搬了C語(yǔ)言,主要修改是那個(gè)惡心的函數(shù)指針類型被重新設(shè)計(jì)了,還有添加了非參數(shù)用的const(這不是類型的一部分,跟C++不同),修改了struct初始化的賦值方法。
            posted on 2009-04-18 00:17 陳梓瀚(vczh) 閱讀(3184) 評(píng)論(7)  編輯 收藏 引用 所屬分類: JIT

            評(píng)論:
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-18 01:30 | lccc
            樓主強(qiáng)人....

            跟 LLVM Compiler 有些相像的地方,都是把其它的各種語(yǔ)言轉(zhuǎn)成自己的,再統(tǒng)一處理  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-18 01:44 | 清風(fēng)
            基本上,你就是在做c語(yǔ)言編譯器  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-18 02:23 | SOS
            native化  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-18 04:57 | 巫云
            應(yīng)該是基于虛擬機(jī)的C語(yǔ)言,很帥。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-18 05:56 | 陳梓瀚(vczh)
            @巫云
            是要編譯成機(jī)器碼讓CPU直接跑的。  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎 2009-04-19 22:11 | 席子
            "但是我的目的是讓我以后設(shè)計(jì)的更高級(jí)的語(yǔ)言可以編譯成這門相對(duì)底層的語(yǔ)言(從一棵語(yǔ)法樹(shù)轉(zhuǎn)換成另一棵語(yǔ)法樹(shù)),而不是直接編譯成中間指令。"

            "惡心的函數(shù)指針類型被重新設(shè)計(jì)了,還有添加了非參數(shù)用的const(這不是類型的一部分,跟C++不同),修改了struct初始化的賦值方法"


            呵呵, 深有同感  回復(fù)  更多評(píng)論
              
            # re: JIT腳本引擎:開(kāi)始做第一門編譯成機(jī)器碼的腳本引擎[未登錄](méi) 2009-04-22 01:14 | jans2002
            期待樓主的精彩表演  回復(fù)  更多評(píng)論
              
            无码精品久久一区二区三区| 伊人丁香狠狠色综合久久| 亚洲国产成人久久综合碰碰动漫3d | 国产99久久精品一区二区| 国产精品国色综合久久| 久久久亚洲精品蜜桃臀| 一本一本久久A久久综合精品| 国产高潮国产高潮久久久| 久久国产热这里只有精品| 亚洲精品乱码久久久久久自慰| 精品综合久久久久久97超人| 亚洲国产成人精品无码久久久久久综合 | 18禁黄久久久AAA片| 77777亚洲午夜久久多喷| 亚洲国产成人久久一区WWW| 久久精品国产精品青草| 午夜不卡久久精品无码免费| 久久精品国产影库免费看| 久久国产色av免费看| 亚洲乱码日产精品a级毛片久久| 精品久久人妻av中文字幕| 国产精品久久新婚兰兰| 天天综合久久久网| 亚洲国产精品久久66| 久久精品午夜一区二区福利| 国内高清久久久久久| 久久精品成人| 久久久精品人妻无码专区不卡 | 欧美午夜精品久久久久久浪潮| 久久精品成人免费网站| 国产成年无码久久久久毛片| 亚洲AV乱码久久精品蜜桃| 色综合久久久久无码专区| 国内高清久久久久久| 久久久噜噜噜久久中文福利| 久久精品女人天堂AV麻| 久久精品国产第一区二区| 武侠古典久久婷婷狼人伊人| 欧洲性大片xxxxx久久久| 99久久香蕉国产线看观香| 久久婷婷色香五月综合激情|