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 Français Русский Українська 日本語 简体中文

简介

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语言