把中間指令都搞定了之后,得開始做一門JIT的腳本引擎了。但是這門腳本引擎不是用來寫的,而是用來給更高級的語言編譯的。這是什么意思呢?雖然我現(xiàn)在寫了個語法分析器,提供了語法樹,
但是我的目的是讓我以后設(shè)計的更高級的語言可以編譯成這門相對底層的語言(從一棵語法樹轉(zhuǎn)換成另一棵語法樹),而不是直接編譯成中間指令。這樣很多事情都會好做很多。
這一門語言主要模仿C,提供指針、結(jié)構(gòu)、數(shù)組、基本類型和函數(shù)指針。還有extern函數(shù)做外部鏈接用。因為編譯成機(jī)器碼,所以可以直接把一個函數(shù)指針丟進(jìn)我的腳本引擎,就可以這么用了。而且我的腳本里面的函數(shù)也可以直接作為一個函數(shù)指針提供出來。復(fù)合類型組要勇于跟C++交互。在C++與腳本里面聲明同樣的struct,不需要做額外工作,就可以互相使用了。
語法如下:
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ù)字、浮點、字符、寬字符、true、false、null(指針,函數(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 對象聲明:
68
69 TYPE NAME
70 TYPE NAME=VALUE
71 const TYPE NAME=VALUE
72 數(shù)組:{VALUE,
}
73 結(jié)構(gòu):{NAME=VALUE,
},必須全員賦值
74 -----------------------------------------
75 語句:
76
77 對象聲明
78
79 表達(dá)式
80 左值=表達(dá)式
81
82 if (bool) 語句塊[else 語句]
83 if (bool) 語句;[else 語句]
84 while (bool) 語句
85 do 語句 while (bool)
86 {語句;
}
87
88 break
89 continue
90 return 表達(dá)式
91 return
92 空語句
93 -----------------------------------------
94 函數(shù):
95
96 TYPE NAME(TYPE NAME,
){語句;
}
97 void NAME(TYPE NAME,
){語句;
}
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 對象聲明;
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語言,主要修改是那個惡心的函數(shù)指針類型被重新設(shè)計了,還有添加了非參數(shù)用的const(這不是類型的一部分,跟C++不同),修改了struct初始化的賦值方法。
posted on 2009-04-18 00:17
陳梓瀚(vczh) 閱讀(3168)
評論(7) 編輯 收藏 引用 所屬分類:
JIT