Simple语言是什么?
Simple语言是实验性的、极简主义的脚本语言,此语言力求最极简的语法和机制,抛弃一切繁杂特性,比如仅仅只有3种基础功能,而且都是符号表示,因此学起来非常简单。
数据类型
在标准中,Simple语言有两种数据类型:
num | 数字(包含整数和小数) |
str | 字符串 |
没有列表、数组、Table之类的数据结构。
没有布尔值,但可以使用0
或1
代替。
字符串使用""
或''
包围,例如:'Hello'
基础语法
声明普通变量
<变量名称>: <变量值>
例如,我想把123
存入普通变量var
:
var: 123
普通变量必须要先声明才能使用,否则报错:
var1: 123
put var1
rem: '输出:123'
put var2
var2: 456
rem: '报错'
声明预处理变量
<变量名称>:: <变量值>
例如,我想把123
存入预处理变量var
:
var:: 123
预处理变量可以先使用再声明,如果出现重复声明,取代码的最后一次声明,但必须要至少一次声明。
比如,这是合法的:
put var
var:: 123
rem: '输出:123'
当然,预处理变量还可以当标签用,在变量值填写声明变量的行号即可,比如:
label:: 1
put 'hello'
-> label
rem: '无限打印hello'
跳转
<条件(可选,默认是1)> -> <代码行数>
跳转代替了条件判断、循环和遍历。
例如,我想在a == b
的情况下跳转到17行,可以这么写:
a == b -> 17
如果条件的返回值为1,才会触发跳转到指定的代码行数,否则就跳过。
代码行数支持输入变量,因此预处理变量就可以发挥标签的作用。
API
除基础功能,其它语句都是API。
API在设计中应该是可插拔的、来自外部的、需要提前导入的,类似于外部库提供的功能,但由于技术原因,目前集成在了解释器里。
输出文字到终端
put <输出的文字>
例如,完整的Hello world程序是这样写的:
put 'Hello world!'
获取键盘输入到变量
ipt <要保存到的变量>
如果我想把键盘输入的内容保存到变量var
:
ipt var
扩展一下,制作一个可以复读键盘输入的回声桶:
ipt keyboard
put keyboard + '\n'
rem: '输入:hello;输出:hello'
将字符串转换为数字
num <要转换并保存到的变量>
例如,我想转换变量var
:
num var
扩展一下,做一个简单的加法计算器:
put '第一个数:'
ipt a
num a
put '第二个数:'
ipt b
num b
put '结果:'
put a + b
put '\n'
rem: '分别输入:“1”“1”;输出:“结果:2”'
将数字转换为字符串
str <要转换并保存到的变量>
其它方面与num
一致,不多赘述。
杂项
Simple语言没有注释
注释是没必要单独做一个的,可以使用变量代替:
rem: '这就是注释!'
不标准的函数和功能
实际上,你可以运行这个代码:
put len('hello')
rem: '输出:5'
但这不是标准的,而且可能会遇到各种各样奇怪的bug和限制,因为Simple语言的解释器基于Python,最终会解释为Python代码,因此请尽量不要使用不标准的函数和功能。
这个bug会在未来修复。
错乱的语法顺序
实际上,这个代码也可以运行:
'hello' put
rem: '输出:hello'
因为使用了匹配关键字进行语法解析,不会分析语序,所以就导致可以出现这种情况。
这个bug会在未来修复。
示例程序
main:: 1
put '输入要判断奇偶数的数:'
ipt keyboard
num keyboard
keyboard % 2 == 0 -> even
-> odd
even:: 10
put '这是偶数。\n'
-> main
odd:: 14
put '这是奇数。\n'
-> main
如果使用num <要转换并保存到的变量>转换一个非数字的值,比如
那么会出现什么结果,如果报错的话有没有办法拦截这个报错让程序不崩溃
会TypeError,目前没有错误捕获功能。
厉害
我嘞个这么厉害