SRP语言协议文档
介绍
前言
你好,这里是Nsakrty,最近闲的没事干,搞了一个“所谓的编程语言”,把它当个乐子看就行了:D。
下载
SRP语言(230527)名字来源
如你所见,这个语言叫做SRP语言,名字来源于我加入的一个组织SRPG的前三个字。
基于谁编写?运行速度如何?
由于它基于苹果的“快捷指令”app开发,所以它的运行速度必然很低,也就6.64行/s(23.01.08)(?。
特点
- SRP语言的目的就是为了改善”快捷指令”的开发体验(不得不说,ios15的快捷指令的编写体验简直离谱,bug经常出现,好在ios16好些了)以及让我在闲的没事的时候玩玩(?,所以SRP语言只能在“快捷指令”app运行,非常垃圾。
- SRP语言的语法很明显不同于其他语言,以Javascript为例,要输出"hello,world"只需要输入
console.log("hello,world");
,但是在SRP语言里却是print<<hello,wolrd
,在js给定义变量a并且赋值10是let a = 10;
,而SRP语言则是var<<a<<10
,并且SRP语言没有if,只有goto...(?
语法
大小写
SRP语言区分大小写,A和a是不同的变量
语句
SRP语言中的指令被成为语句,用行进行分割,一条语句只能独占一行,因此,语句末尾不需要加分号。但请注意,SRP语言中的<<和其他东西不能存在空格。
注释
SRP语言的注释并无规定该怎么写,只要你此行的文本的第一个<<前的单词不是所有函数中的其中一个即可,所以//我是注释
如果编译器遇到注释,会自动跳过处理。
<!-- 我也是注释 -->
我看起来不像是SRP注释,但我真的是一个SRP注释
print可以输出信息(我也是注释)
input<<hi! 可以请求用户输入,并且输入框文字是:hi!(我不是注释)
标签
SRP语言的标签用name:
表示,标签独占一行,标签对goto等语句来说很重要
变量
SRP语言的变量可以以大小写字母、中文、下划线和绝大多数标点符号开头,%除外,%不能出现在变量名中。
SRP语言的变量声明格式如下:var<<name<<value
,name和value都必须填上,如果你在声明的时候不想让变量有值,请把value设为0,如果不填value,那么本语句就相当于把name的value赋给临时变量temp
在SRP语言,要读取变量很简单:%name%
,在运行程序时,编译器会自动把它替换成对应变量的值,如果这个变量未声明,则会替换成空值。
在SRP语言,很多语句的结果都会赋给临时变量temp,读取temp的方法和普通变量完全一致。SRP语言中的一些操作会用到temp的值,如果你需要把某个变量的值赋给temp,可以直接这么写:var<<name
SRP语言中的变量只能是全局变量
数据类型
SRP语言是弱类型语言,你不需要做任何的类型转换,从编译器的角度来讲,任何东西到了这都是string类型(编译器不能区分东西的类型),但是你依然可以把它分为string(字符串),number(数字),list(列表)几种类型。
- string:字符串类型,一串文本序列,支持储存多行文字,用\n来换行,还有,字符串类型不加引号。
- number:数字类型,在计算表达式的时候参数会自动转换成number类型,然而,编译器不能识别出来。有效范围是±99 999 999 999,如果不在这个范围,超出这个范围会导致数字“失真”
- list:列表类型,列表项用",,"分开,js中的
a = [4,3,9,"y"]
等同于SRP的var<<a<<4,,3,,9,,y
计算
表达式的计算统一在number函数进行,请注意,除这个以外,其他要参数的地方不能填表达式!特别是gotoi函数会出现这种情况!表达式计算只能在number函数进行。还有,SRP语言不支持计算条件表达式。这里列举几个常见的错误写法:var<<a<<number<<3+5
gotoi<<a>>3<<yes
函数
注意,*表示选填,如果是有一个括号扩着多个参数并且加*的,表示括号内的参数必须同时出现或不出现。
alert
alert函数可以显示一个警告框,用来显示文本(content)
写法:alert<<content
choose
choose函数可以在列表(list)中的项目选择一项,参数有列表(list)和提示词(title)。结果返回到temp中。
写法:choose<<list<<title*
round
round函数可以对一个数字(number)进行四舍五入。结果返回到temp中。
写法:round<<number
getDate
getDate函数可以获取当前的日期信息。
写法:getDate
getItem
getItem函数可以从列表(list)中获取一个项目,参数有列表(list)、最小值(min)和最大值(max),如果最大值不填,则获取列表的第min项,请注意,列表项的序号从0开始。
写法:getItem<<list<<min<<max*
getPlace
getPlace函数可以获取当前的位置信息。
写法:getPlace
goto
goto函数可以跳转到指定的标签(id)处。
写法:goto<<id
goton
goton函数可以跳转到指定的标签(id)处,如果temp为负则跳转。
写法:goton<<id
gotoi
gotoi函数可以跳转到指定的标签(id)处,参数有value和标签(id),如果temp和value相等(化为字符串后相等)则跳转,强调:value不能填表达式,表达式计算只能在number函数进行。
写法:gotoi<<value<<id
gotop
gotop函数可以跳转到指定的标签(id)处,如果temp为正则跳转。
写法:gotop<<id
gotoz
gotoz函数可以跳转到指定的标签(id)处,如果temp为0则跳转。
写法:gotoz<<id
hash
hash函数可以让一个东西进行MD5运算
写法:hash<<content
inform
inform函数可以显示一个通知框,用来创建通知,参数有内容(content)和标题(title)。
写法:inform<<content<<title
input
input函数用来获取输入,参数有问题(question)和回答时的默认值(value)。结果返回到temp中。
写法:input<<question<<value
length
length函数可以获取列表的长度(项数)
写法:length<<list
number
number函数可以对数值表达式(expression)进行运算。结果返回到temp中。
写法:number<<expression
random
random函数可以生成一个随机数,参数有最小值(min)和最大值(max),如果不填,则输出一个0~1的浮点数。结果返回到temp中。
写法:random<<(min<<max)
run
run函数可以运行一个快捷指令,参数有快捷指令名称(shortcutName)和参数(parameter)。结果返回到temp中。
写法:run<<shortcutName<<parameter
stop
stop函数可以停止当前程序并输出值。在程序的末尾必须写这个,但是在其他地方也可以写。
写法:stop<<value
temp
temp函数可以快捷地修改temp变量的值,参数仅有value。
写法:temp<<value
var
var函数用来创建一个变量以及给变量赋值,参数有名称(name)和值(value)。如果你在声明的时候不想让变量有值,可不填value。请注意,你只能在这个地方对变量赋值。
写法:var<<name<<value