Difference between revisions of "YOLOL语言"
Danthbyrth (talk | contribs) m |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Otherlang2 | {{Otherlang2 | ||
|en=YOLOL | |||
|de=YOLOL:de | |de=YOLOL:de | ||
| | |fr=YOLOL:fr | ||
|ru=YOLOL:ru | |ru=YOLOL:ru | ||
|ua=YOLOL:ua | |||
|jp=YOLOL:jp | |||
|zh-cn=YOLOL语言 | |zh-cn=YOLOL语言 | ||
}} | }} |
Latest revision as of 09:16, 11 October 2021
简介
YOLOL语言是一种用于控制和管理电子设备的编程语言。
将代码逐行写在YOLOL芯片上,随后将芯片插在芯片槽中,读取和转发它们的信息。
这种编程语言可以用于规划和控制已知世界内的几乎所有电子设备。
基本信息
如何运作
这种编程语言在YOLOL芯片上编写和执行,并且可以用于监视和控制连接到数据网络的电子设备。
代码将由上到下按顺序逐行执行,当最后一行被执行后将重复该芯片的周期,除非脚本包括用于特定行的改变或完全停止执行的编程指令。
简而言之:
- 代码从第1行开始执行
- 在读取第1行以后,将基于芯片的时间间隔前进到下一行
- 随后该过程被重复到第2、3、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 |
它也可以使用not,and和or关键词来设置比简单的变量值检查更复杂的情况
混合变量操作
混合变量操作能够将所有参数像字符串一样操作
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.
- 一个注释语法示例
错误
该编程语言可能发生两种类型的错误。
- 语法错误
- 运行错误
- 语法错误来自无效且不可解析的脚本,将导致整行代码无法执行。
- 只有在脚本被执行时才能捕获运行错误。它们会导致行的执行被中断,但在错误发生之前不会有任何影响。