【关键字表】
function	定义函数
param	函数参数
typeof	变量类型，返回字符串
is_null	变量为空，等价 typeof == "null"
operator操作符重载
return	函数返回值
new		定义
if
elseif
else
while
for
goto

【内置函数表】
print	打印字符串
param	函数参数
var		定义全局变量

【变量】
分类：
	变量分为局部变量和全局变量。
	全局变量以g_开头。示例如下：
	a = 0	// 局部变量 a
	g_a = 1	// 全局变量 g_a
类型：
	null		空
	int		整数
	float	浮点
	string	字符串
	class	类
	vector	数组
	table	表
	function 函数
	userdata	指针
	expr		表达式
	
【函数】
分类：
	函数分为内置函数、导入函数、脚本函数。
	内置函数，由引擎提供的函数，例如print、strlen等基础函数。
	导入函数，通过C++层导出的函数。
	脚本函数，由脚本定义的函数。

定义：
	脚本内只能定义脚本函数，以function关键字开始，参数通过关键字param获得。示例如下：
	
function add =
{
	print("参数0为：{}", param[0])
	print("参数1为：{}", param[1])
	print(param[0] + param[1])
}
add(1, 2)

调用：
	参数数量为1时可以不加括号，其余情况需要加括号
	
【表达式】
	包含操作符的语句
	+、-、*、/	基础运算，class可使用operator重载
	%			求模
	++、--		自增自减，class可使用operator重载
	>、<、>=、<=	大小判断
	#			长度计算（字符串为实际字符数，容器为长度）
	==			相等判断
	!			逻辑取反，非0为true
	&&、||		逻辑与或
	
算术运算：
	float和int可以进行算术运算
	
【作用域】
	以{}包含一个作用域，作用域内的局部变量，超出作用域会删除
	
【数组】
	以()生成一个数组，包含0到N个变量。
	通过[index]下标访问

【表】
	以table()生成一个表，包含0到N个变量。
	通过._key键访问
	
【类】
	通过class定义。通过.访问成员，构造函数与类名相同，示例如下：
	// 类
class Dot {
	x
	y
	function Dot = {
		x = param[0]
		y = param[1]
	}
	function Print = {
		print fmt("{},{}", x, y)
	}
	operator+ = {
		a = param[0]
		b = param[1]
		return new Dot(a.x + b.x, a.y + b.y)
	}
}
dot0 = new Dot(100, 200)
dot1 = new Dot
dot1.x = 100
dot1.y = 200
dot2 = dot0 + dot1
dot2.Print()

【控制语句】
	if，条件语句，示例如下：

if _a < 0 {
	print "值小于0"
}else if _a > 0 {
	print "值大于0"
}else{
	print "值等于0"
}
	
	for，循环语句，示例如下：
	
for (i, i < 10, ++i){
	print i
}	

	while，循环语句，示例如下：
	
while i < 10 {
	++i
	if i < 5 break
}

	break，continue跳出语句，功能与C++一致
	
【导入函数】
	
【实现细节】
	局部变量使用固定内存，避免堆分配
	函数参数基于固定vector，避免堆分配
代码块：
	源码文件，编译（预处理）为代码块。代码块包含变量空间、多个代码段。
	代码块是虚拟机执行单元。
代码段：
	代码段是执行的基本单元。
	代码段按顺序执行，或通过控制语句跳转。
	代码段包含表达式、控制语句……。
	代码段默认为单行，未匹配的(、{、[可以将单行拓展为多行
	代码段拥有独立的作用域。
虚拟机：
	动态变化的内容，维护内存数据。
表达式：
	基于后缀表达式。