小型脚本解释器

时间:2021-09-14 17:07:01
脚本(暂时叫做IBasic1...)基本语法
注释: //...

脚本的值的类型:
Number: 数字类型. 如: 1, 3.14, 0.1.
String: 字符串类型. 使用一对双引号括住一串字符序列. 如: "a", "abc"
字符串转义字符:
转义字符    意思
\r            回车
\n            换行
\t            水平制表符
\d            "
\s            SPACE
\\            \
Function: 函数类型. 对一个函数的引用.
Reference: 引用类型. 对一个变量的引用.
List: 列表类型. 一系列数据的集合, 这些数据可以通过键或索引获取或修改.
Null: 空类型. 表示变量或表项没有被使用过.
自定义类型:
自定义类型通过列表实现. 通过设置列表的"Type"键(其值的类型必须为String或Null)指定类型.
L = newlist
L::"Type" = "O"
print type L    // => O

定义局部变量: local [变量名1] = [初始化表达式], [变量名2] = [初始化表达式][, ...N]

打印值: print [表达式]

输入值: input [变量名]

表达式计算:
let [表达式]
运算符:
优先级    运算符
1(低)    =
2        + - <-(列表结合) += -= ..(字符串连接)
3        * / \ % *= /= \= %=
4        == > < >= <= <>
5        not and or xor
6        #(函数调用) :(方法)
7        &(引用) $(解引用)
8        ::(表项) ->(数组)
9        ^ ^=
10        newlist(新建列表)
11(高)    type(获取值得类型)
#运算符:
print #F(1, 2)
func F(A, B)
    return A + B
endfunc
&和$运算符:
V = 100
Ref = &V    //引用
print $Ref    //解引用
::运算符:
L = newlist
L::"A" = 100
L::"B" = 200
print L::"A"    // => 100
print L::"B"    // => 200
->运算符:
L = newlist
L->-1 = 100
L->0 = 200
L->1 = 300
print L->-1    // => 100
print L->0    // => 200
print L->1    // => 300
:运算符:
L = newlist
L::"A" = 100
L::"F" = F
L:"F"()    // => 100
func F()
    print Self::"A"    // 通过Self引用自己
endfunc
<-运算符:
L1 = newlist
L2 = newlist
L1::"A" = 100
L2::"B" = 200
L1 <- L2
print L1::"A"    // => 100
print L2::"B"    // => 200

条件语句:
形式1:
if [条件表达式]
  [语句集合]
endif
形式2:
if [条件表达式]
  [语句集合1]
else
  [语句集合2]
endif
形式3:
if [条件表达式] then [语句]
形式4:
if [条件表达式] then [语句1] else [语句2]

分支选择语句:
select [表达式1]
    case [表达式2]
        [语句集合1]
        exitselect
    case [表达式3]
        [语句集合2]
        exitselect
    [...N]
    default    //非必选, 但是如果要达到效果必须置尾
        [语句集合3]
        exitselect
endselect

while循环(当型循环):
while [条件表达式]
    [语句集合]
endwhile

退出while循环:
exitwhile

进入下一次while循环:
nextwhile

do循环(直型循环):
do
    [语句集合]
repeat [条件表达式]

退出do循环:
exitdo

进入下一次do循环:
nextdo

for循环:
for [计数器变量] in [起始值表达式] to [结束值表达式] step [步长]
    [语句集合]
next [计数器变量]

退出for循环:
exitfor

进入下一次for循环:
nextfor [计数器变量]

返回语句:
return [返回值表达式]

运算符重载语句:
形式1:
opt [运算符] type1 [操作数类型字符串表达式] call [函数]
形式2:
opt [运算符] type1 [操作数1类型字符串表达式] type2 [操作数2类型字符串表达式] call [函数]
重载+运算符示例:
opt + type1 "Number" type2 "Number2" call F
func F(A, B)
    return A * B
endfunc
print 2 + 3    // => 6. 示例而已, 一般不会这样做

异常抛出语句:
throw [异常表达式]

捕获异常语句:
try
    [语句集合1]
endtry
catch [储存异常的变量]
    [语句集合2]
endcatch

运行脚本(假设脚本文件路径为: C:\1.ibs):

IBasic1 -f "C:\1.ibs"

解释器下载地址: http://www.vdisk.cn/down/index/10828948