Sb forum speech.png DiscordLink.png FacebookLink.png RedditLink.png SteamLink.png TwitterLink.png YoutubeLink.png

YOLOL语言

From Starbase wiki
Jump to navigation Jump to search
English Deutsch Русский 简体中文

简介

YOLOL语言是一种用于控制和管理电子设备的编程语言。
将代码逐行写在YOLOL芯片上,随后将芯片插在芯片槽中,读取和转发它们的信息。
这种编程语言可以用于规划和控制已知世界内的几乎所有电子设备。

基本信息

如何运作

这种编程语言在YOLOL芯片上编写和执行,并且可以用于监视和控制连接到数据网络的电子设备
代码将由上到下按顺序逐行执行,当最后一行被执行后将重复该芯片的周期,除非脚本包括用于特定行的改变或完全停止执行的编程指令。

简而言之:

  1. 代码从第1行开始执行
  2. 在读取第1行以后,将基于芯片的时间间隔前进到下一行
  3. 随后该过程被重复到第2、3、4……行
  4. 当最后一行被执行后该芯片将再次从第1行开始执行(除非最后一行代码包含一个goto语句或执行被暂停)

因此空行仍然会消耗0.2秒时间,但可以被作为一个短暂的执行延迟被使用。(只有一个注释的行实际上作为一个空行执行)

相关页面

命令参考

大小写不区分

本编程语言完全不区分大小写。
这意味着下面的两个示例脚本彼此之间的作用相同:

if ButtonState == 1 then DoorState = 1 end
IF buttonstate == 1 THEN doorstate = 1 END
  • 这两个脚本在"buttonstate"的值为1时,将doorstate的值设为1。
  • 在该编程语言中字符可以用小写字母或大写字母来书写。
    • 它们的解析仍然不区分大小写。
    • 可以用这种方式使代码看起来更有条理。

变量

  • 该程序语言中的变量为弱类型(不强制变量类型的有效性),并提供两种数据类型:定点小数(精确到小数点后3位)和字符串
    • 简而言之,这些变量可以被引入作为字符串或数字,如果与先前的变量类型不一致则忽略较早的变量类型,不会产生错误。
  • 每个变量总是单一类型的,尽管它会在需要时被隐式转换。
  • 一个未初始化的变量的默认值是0,并且不支持空值。
  • True/False(真/假)的值为非零或零的数值.
    • True =! 0(真的值不为0)
    • False == 0(假的值为0)

为一个变量赋值时变量的值类型总是转换为被赋予的值的值类型。

例如:

ultimateAutopilot= 128.643
  • 这将使变量ultimateAutopilot的值变为128.643。


ultimateAutopilot= "Error prone"
  • 这将使变量ultimateAutopilot的值变为字符串类型的“Error prone”,而数值类型的值128.643将会被覆盖

小数

该编程语言中的数值是64位定点小数。
变量为十进制并且精确到小数点后3位。
其结果是最大数值范围(即使在操作中)是[-9223372036854775.808,9223372036854775.807]

pieVariable= 3.142
  • 上述脚本为变量pieVariable赋值为数值3.142。
    • 允许在作业中存储精确度更高的数值变量,但不会影响最终结果。
notPieVariable= 0.5772156649
  • 上述脚本尝试为变量notPieVariable赋值为0.5772156649。
  • 然而最终结果为notPieVariable == 0.577
    • 此处更精确的值被切断,只留下小数点后三位

字符串

在该编程语言中要指定字符串,字符串的值要使用双引号包含起来。

badRobots= "saltberia" 
  • 该脚本为变量badRobots赋值为字符串saltberia

设备参数/外部变量

外部变量和设备参数可以通过以下语法在该编程语言中使用:

  • :variableName
    • variableName 这是所配置的设备参数的ID。

冒号前缀用来告知该脚本正在访问一个外部变量,而不是在该脚本内的变量,无论它是否被使用或声明。
一个连接到设备的YOLOL芯片可以访问同一数据网络中的所有设备
它可以修改和监听它所访问到的任何设备参数。

if :ButtonState == 1 then :DoorState = 1 end
  • 如果数据网络中任何监听中的设备的设备参数ButtonState的值为1,这个脚本将发送值1到该设备的DoorState设备参数。

操作和命令

注意YOLOL芯片的型号会限制可使用的操作。
基础芯片可选的功能有限,而更高级的芯片可在本地进行更复杂的操作。

基础的算数和赋值运算符

运算符 数学操作 字符串操作
A + B 加法 将B附加在A后
A - B 减法 将A中包含的最后一个B从A中去除
A * B 乘法 运行时错误,该行剩余的内容将被跳过
A / B 除法 运行时错误,该行剩余的内容将被跳过
A ++ 后缀自增(A=A+1) 字符串A增加一个空格。计算结果为原始值
A -- 后缀自减(A=A-1) 删除字符串的最后一个字符。当试图删除""时结果错误。计算结果为原始值
++ A 前缀自增(A=A+1) 字符串A增加一个空格。计算结果为原始值
-- A 前缀自减(A=A-1) 删除字符串的最后一个字符。当试图删除””时结果错误。计算结果为原始值
A = B 赋值(将变量B的值赋予A) 赋值
A += B 加法赋值(A=A+B) A被赋予A+B的值
A -= B 减法赋值(A=A-B) A被赋予A-B的值
A *= B 乘法赋值(A=A*B) 运行时错误,该行剩余的内容将被跳过
A /= B 除法赋值 (A=A/B) 运行时错误,该行剩余的内容将被跳过
A %= B 取余赋值 (A=A%B) 运行时错误,该行剩余的内容将被跳过
A ^ B 运行时错误,该行剩余的内容将被跳过
A % B 取余 运行时错误,该行剩余的内容将被跳过
ABS A 绝对值(当A大于等于0时A=A,A小于0时A=-A) 运行时错误,该行剩余的内容将被跳过
A! 阶乘 运行时错误,该行剩余的内容将被跳过
SQRT A A的平方根 运行时错误,该行剩余的内容将被跳过
SIN A A的正弦(度) 运行时错误,该行剩余的内容将被跳过
COS A A的余弦(度) 运行时错误,该行剩余的内容将被跳过
TAN A A的正切(度) 运行时错误,该行剩余的内容将被跳过
ASIN A A的反正弦(度) 运行时错误,该行剩余的内容将被跳过
ACOS A A的反余弦(度) 运行时错误,该行剩余的内容将被跳过
ATAN A A的反正切(度) 运行时错误,该行剩余的内容将被跳过

逻辑运算符

逻辑运算符将检查确认语句是真或假。
所有逻辑运算返回“0代表假”“1代表真”

运算符 数学操作 字符串操作
A < B 小于 如果字符串A按字母顺序排列在B之前,则返回1;如果不是,则返回0
A > B 大于 如果字符串A按字母顺序排列在B之前,则返回0;如果不是,则返回1
A <= B 小于等于 如果字符串A按字母顺序排列在B之前或与B相同,则返回1;如果不是,则返回0
A >= B 大于等于 如果字符串A按字母顺序排列在B之前或与B相同,则返回0;如果不是,则返回1
A != B 不等于 当字符串A与字符串B不相同时返回1,否则返回0
A == B 等于 当字符串A与字符串B相同时返回1,否则返回0

它也可以使用notandor关键词来设置比简单的变量值检查更复杂的情况

混合变量操作

混合变量操作能够将所有参数像字符串一样操作

previouslyNumber= "10" + 15
  • 以上脚本将使previouslyNumber包含字符串值“1015”。
    • 注意,所涉及的参数本身不会更改类型,它们的值只是为了操作的目的转换为字符串:
purelyNumber = 15
purelyString = "10" + purelyNumber
  • 当该脚本执行后,purelyString包含字符串值“1015”,而purelyNumber仍然包含数值15。

Goto语句

当不需要从1到20的正常脚本读取顺序或需要更改顺序时可以使用Goto语句。

Goto使用以下语法:

  • goto 行号
    • 行号是此命令将要执行的脚本所在的行。
    • 与goto命令同一行且在goto命令之后的任何脚本都不会执行。
      • 在goto语句前使用if语句时,若if语句判定为假,将忽略goto语句。
    • 可以使用条件判断语句在同一行内使用多个goto语句,因为判定为的goto语句会被跳过。
    • 超出[1,20]范围的数值会被限制在此范围内。
    • 非整数将被平铺。
    • 字符串值将会使运行时结果错误。
if variable == 5 then goto 4 end goto 6

variable的值为5时,上述脚本将跳转到行号4。
否则它将跳转到行号6。

If else条件语句

If else语句用于将脚本分支到不同的路径。
它使用如下语法:

  • if 条件 then 语句 else 语句 end
    • 条件是一个语句,它会返回一个数值(当返回0时判定为假,否则判定为真),而语句是将要运行的脚本片段。
    • 每一个if-else所将要执行的语句在结束时必须在结尾处写上end语句。

If可基于变量值临时讲脚本执行为两种可能的结果。
例如:

if variable != 2 then endResult = 3 else endResult = 4 end
  • variable的值不为2时,这个脚本将endResult的值设为3。
  • 如果variable的值为2,endResult的值将被设为4。

注意,else语句部分如果非必要的话可以被排除。
例如:

if variable != 2 then endResult = 3 end
  • 该脚本只会在当variable的值不为2时将endResult的值设为3,在其他情况下不会做任何事情。

嵌套if语句

可以将if条件语句放在true/false语句块中作为条件,以实现进一步的执行分支。
例如:

if variable == 0 then endResult = 1 else if variable == 1 then endResult = 2 end end 
  • variable等于0时,此脚本将ndResult设为1。
  • variable不等于0但等于1时,endResult被设为2。

例如:

if variable == 0 then if endResult == 1 then endResult = 2 end else endResult = 1 end
  • variable的值为0,且endResult等于1时,此脚本将endResult设为2。
  • 否则它将把endResult设为1。

注意,将包含嵌套if语句的脚本格式化为更整洁的格式,可以更易于调整和规划脚本流。
还要注意这样的脚本无法在芯片上运作,但有助于调试脚本。YOLOL芯片, but doing this can still be useful when debugging scripts.

这是格式化的嵌套语句:

if variable == 0 then
    if otherVariable == 1 then
        otherVariable = 2
    end
else
    otherVariable = 1
end

注释

当程序员编写代码时注释是非常有用的。
注意,注释也被限制在一行的70个字符内,而不是被排除在外。

使用注释的语法如下:

  • // text
    • Text可以是任何单行的字符集。
// This is a comment. It will explain how other lines of script work.
  • 一个注释语法示例

错误

该编程语言可能发生两种类型的错误。

  1. 语法错误
  2. 运行错误
  • 语法错误来自无效且不可解析的脚本,将导致整行代码无法执行。
  • 只有在脚本被执行时才能捕获运行错误。它们会导致行的执行被中断,但在错误发生之前不会有任何影响。

YOLOL语言