把中间指令都搞定了之后,得开始做一门JIT的脚本引擎了。但是这门脚本引擎不是用来写的,而是用来给更高级的语言编译的。这是什么意思呢?虽然我现在写了个语法分析器,提供了语法树,
但是我的目的是让我以后设计的更高级的语言可以编译成这门相对底层的语言(从一棵语法树转换成另一棵语法树),而不是直接编译成中间指令。这样很多事情都会好做很多。
这一门语言主要模仿C,提供指针、结构、数组、基本类型和函数指针。还有extern函数做外部链接用。因为编译成机器码,所以可以直接把一个函数指针丢进我的脚本引擎,就可以这么用了。而且我的脚本里面的函数也可以直接作为一个函数指针提供出来。复合类型组要勇于跟C++交互。在C++与脚本里面声明同样的struct,不需要做额外工作,就可以互相使用了。
语法如下:
1 Vczh JIT Native Language
2 -----------------------------------------
3 基本数据类型:
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 复合类型:
15
16 TYPE*
17 TYPE[LENGTH]
18 TYPE(TYPE,)
19 void(TYPE,)
20
21 结构类型:
22 struct
23 {
24 TYPE NAME;
25
26 }
27 -----------------------------------------
28 表达式:
29
30 数字、浮点、字符、宽字符、true、false、null(指针,函数指针)
31 操作符表达式
32 (表达式)
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,获取内容
64
65 X[Y] :数组、指针
66 -----------------------------------------
67 对象声明:
68
69 TYPE NAME
70 TYPE NAME=VALUE
71 const TYPE NAME=VALUE
72 数组:{VALUE,}
73 结构:{NAME=VALUE,},必须全员赋值
74 -----------------------------------------
75 语句:
76
77 对象声明
78
79 表达式
80 左值=表达式
81
82 if (bool) 语句块[else 语句]
83 if (bool) 语句;[else 语句]
84 while (bool) 语句
85 do 语句 while (bool)
86 {语句;}
87
88 break
89 continue
90 return 表达式
91 return
92 空语句
93 -----------------------------------------
94 函数:
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 函数
110 -----------------------------------------
111 关键字:
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语言,主要修改是那个恶心的函数指针类型被重新设计了,还有添加了非参数用的const(这不是类型的一部分,跟C++不同),修改了struct初始化的赋值方法。
posted on 2009-04-18 00:17
陈梓瀚(vczh) 阅读(3154)
评论(7) 编辑 收藏 引用 所属分类:
JIT