执行语法树运行脚本,想做脚本引擎的可以参考

易语言 2020-02-24 20:18:15

执行语法树运行脚本,想做脚本引擎的可以参考

简单实现了 int string println ,报错功能,注意:本人能力有限,变量必须声明且立即赋值,不能只声明不赋值

到此就完结了,如果觉得代码很渣,大神请嘴下留情 ~没看过第一第二期的朋友们,先去看看第一第二期,这个附件只是第三期的源码。

.计次循环首 (取数组成员数 (Token2数组), index)
.如果真 (Token2数组 [index].类型 = 0)
.如果真 (文本变量列表.查找键 (Token2数组 [index].名字) 或 整数变量列表.查找键 (Token2数组 [index].名字))
调试输出 (“第” + 到文本 (Token2数组 [index].所在行) + “存在错误,原因:变量名重复”)
返回 () ' 可以不返回,但是继续向下执行的话,很导致更多的错误,因为这是运行,所以最好返回
.如果真结束
整数变量列表.写 (Token2数组 [index].名字, 取字节集数据 (Token2数组 [index].实际值, #整数型, ))
.如果真结束
.如果真 (Token2数组 [index].类型 = 1)
.如果真 (整数变量列表.查找键 (Token2数组 [index].名字) 或 文本变量列表.查找键 (Token2数组 [index].名字))
调试输出 (“第” + 到文本 (Token2数组 [index].所在行) + “存在错误,原因:变量名重复”)
返回 () ' 可以不返回,但是继续向下执行的话,很导致更多的错误,因为这是运行,所以最好返回
.如果真结束
文本变量列表.写 (Token2数组 [index].名字, 取字节集数据 (Token2数组 [index].实际值, #文本型, ))
.如果真结束
.如果真 (Token2数组 [index].类型 = 2 且 Token2数组 [index].名字 = “println”)
' 数值 = {0}, {1} = 文本, 是变量 = {2}
ms = 取字节集左边 (Token2数组 [index].实际值, 1)
.如果真 (ms = { 0 })
标准输出 (, 取字节集数据 (取字节集右边 (Token2数组 [index].实际值, 取字节集长度 (Token2数组 [index].实际值) - 1), #整数型, ))
标准输出 (, #换行符)
.如果真结束
.如果真 (ms = { 1 })
标准输出 (, 取字节集数据 (取字节集右边 (Token2数组 [index].实际值, 取字节集长度 (Token2数组 [index].实际值) - 1), #文本型, ))
标准输出 (, #换行符)
.如果真结束
.如果真 (ms = { 2 })
str = 取字节集数据 (取字节集右边 (Token2数组 [index].实际值, 取字节集长度 (Token2数组 [index].实际值) - 1), #文本型, )
.如果 (整数变量列表.查找键 (str)) ' 如果找到就是整数,找不到就是文本
标准输出 (, 整数变量列表.读 (str))
标准输出 (, #换行符)
.否则
.如果 (文本变量列表.查找键 (str))
标准输出 (, 文本变量列表.读 (str))
标准输出 (, #换行符)
.否则
调试输出 (“第” + 到文本 (Token2数组 [index].所在行) + “存在错误,原因:不存在名为” + #引号 + str + #引号 + “的变量”)
返回 () ' 可以不返回,但是继续向下执行的话,很导致更多的错误,因为这是运行,所以最好返回