2.1 语言组件
KAREL语言为编写有效的机器人应用程序提供了必要的元素。 主要包含了
本节介绍KAREL语言的以下基本组件:
• 字符集
• Operators
• 保留字
• 用户定义的标识符
• 标签
• 预定义标识符
• 系统变量
• 注释
2.1.1字符集
ASCII 字符集以KAREL语言提供。 表2-1列出了ASCII字符集中的元素。 KAREL语言提供
三种字符集:
• ASCII 字符集
• 多国文字字符集
• 图形字符集(不适用于R-30iB)
这里主要看一下ASCII 字符集 其他的可以自己去看一下手册用到的不多
默认字符集是ASCII。 多国和图形字符集只允许在文字,数据和评论中使用。
2.1.2 Operators操作符
KAREL为标准算术运算,关系运算和布尔(逻辑)运算提供了Operators。 KAREL还包括
特殊的Operators,
KAREL Operators
KAREL Operator 优先级
2.1.3保留字
保留字其实就是关键字 像第一章使用的PROGRAM ,BEGIN,END,WRITE
这些都是保留字。如果想看那有哪些可以去看Karel手册2–6页
这里我放了一点
2.1.4 用户定义的标识符
说白了就是我们自己定义的变量VAR,常量CONST,结构体STRUCTURE
,他们有以下规则
用户定义的标识符表示常量,数据类型,语句标签,变量,例程名称和程序名称。 身份标
识
• 从字母开始
• 可以包括字母,数字和下划线
• 最多可以有12个字符
• 在特定范围内只能有一个含义。 参考5.1.4节。
• 不能成为保留字
• 必须在可以使用之前进行定义。
下面我们自己定义几个数据
PROGRAM user_define
VAR
s_status : INTEGER
s_pi : REAL
CONST
R_D = 1O
BEGIN
END user_define
2.1.4 标签
标签是特殊标识符,用于标记可以使用GOTO语句传送程序控制的程序中的位置。
• 紧接着是两个冒号(::) 可执行语句允许在两个冒号后面的同一行和后续行中。
• 不能用于将控制转入或转出例程。
LABEL ::
--程序块
GOTO LABEL
非必要不要用这种方法这样会形成死循环。
2.1.6 预定义标识符
KAREL语言中的预定义标识符具有预定义的含义。 这些可以是常量,类型,变量或内置例程名称,列如第一章中使用的FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1)
如果有兴趣可以参考Karel手册2–8到2-10
2.1.7 系统变量
系统变量是作为KAREL系统软件的一部分声明的变量。 他们已经永久定义了以美元符号($)开头的变量名称。 许多机器人都是特定的,这意味着它们的值取决于连接到系统的机器人的类型。KAREL程序无法访问某些系统变量。 访问权限控制KAREL程序是否可以读取或写入系统变量。
就是下面这些东西,上一章我们已经更改了一个 $KAREL_ENB
2.2翻译指令
这个大家理解一下就好我个人理解认为就是类似C/C++中的头文件
大家先看一下原文:
比较常用的三个 可参考Karel手册2–11到2-13
%COMMENT = ’comment’ 就是在加载时间内显示comment(可更改),并显示在示教器上
%DELAY 程序延迟
%INCLUDE filename 将指定程序加载指定程序中(有点类似C/C++的头文件)
2.3 数据类型
KAREL 提供了三种数据类型来定义程序中的数据项:
1.简单类型的数据项:
可以在KAREL程序中分配常量或变量
常量和变量的定义
CONST --常量
C_num = 10
VAR
V_num::INTEGER --单个定义
V_num1,V_num2,V_num3:V_num--多个定义
可以在KAREL程序中分配实际(文字)值
只能假设单个值
2.结构化类型数据项
被定义为允许或需要多个值的数据项 - 简单数据和结构化数据的组合
3.用户定义的类型数据项
根据现有数据类型(包括其他用户定义的类型)进行定义 - 可以定义为由
多个KAREL变量数据类型组成的结构 - 不能包含自身
简单数据类型定义
BOOLEAN类型
CONST
C_ture = TURE
C_faes = FALSE
VAR
V_button:BOOLEAN
FILE类型
VAR
V_file:FILE
INTEGER类型
CONST
C_num1 = 11
C_num2 = 1111
VAR
V_num1:INTEGER
REAL类型
CONST
C_num1 = 1.111
C_num2 = 3.13454
VAR
V_num1:REAL
STRING类型
CONST
C_str1 ='dingyark’
C_str1 ='damn bro’
VAR
V_str1:STRING[8]
结构数据类型
这里我就演示几个比较常用的
VAR
V_pos:XYZWPR
V_pos:XYZWPREXT
V_joint:JOINTPOS
V_config:CONFIG
2.4 用户定义的数据类型和结构
学过C/C++的比较好理解他给我的感觉就像是类继承然后子类去调用父类元素。
用户定义的数据类型,可以
• 将他们的声明包含在KAREL程序的TYPE部分中。
• 根据其他数据类型定义KAREL名称以表示新的数据类型。
• 可以使用特定应用所需的预定义数据类型。
用户定义的数据类型可以定义为结构,由几个KAREL变量数据类型组成。接续字符“&”可用于在新行上继续声明。
先看个示例
PROGRAM TEST04
TYPE --定义一个结构体
T_Person = STRUCTURE
t_age:INTEGER
t_tall:REAL
t_sex:BOOLEAN
t_name:STRING[16]
ENDSTRUCTURE
VAR
v_person:T_Person --实例化对象
BEGIN
v_person.t_age = 8
v_person.t_tall =177.9
v_person.t_sex =TRUE
v_person.t_name ='Dingyark'
FORCE_SPMENU(TP_PANEL,SPI_TPUSER,1) --打开用户面板
WRITE(CHR(128),CHR(137)) --清屏
WRITE('My name is ',v_person.t_name,CR,
'My age is',v_person.t_age,CR,
'I am ',v_person.t_tall,'CM',CR)
END TEST04
输出结果
结构体的定义
TYPE --定义一个结构体
T_Person = STRUCTURE
t_age:INTEGER
t_tall:REAL
t_sex:BOOLEAN
t_name:STRING[16]
ENDSTRUCTURE
VAR
v_person:T_Person --实例化对象
成员访问 用(.)<变量名>
v_person.t_age = 8
v_person.t_tall =177.9
v_person.t_sex =TRUE
v_person.t_name ='Dingyark'
2.5 数组
可以声明除了PATH 以外的任何数据类型的数组,在karel中下标起始地址为1
2.5.1一维数组定义
TYPE
<数组类型标识符> = ARRAY [元素个数] OF <基类型>
VAR
<数组变量表> : <数组类型标识符>
TYPE
T_ClassName = ARRAY [10] OF STRING[16]
T_ClassAge = ARRAY [10] OF INTEGER
VAR
V_name: T_ClassName
V_age: T_ClassAge
2.5.2多维数组定义
多维数组是具有二维或三维元素的数组。 这些数组允许您使用两个或三个下标标识一个元
素。
TYPE
<数组类型标识符> = ARRAY [元素个数] OF ARRAY [元素个数] ...OF <基类型>
VAR
<数组变量表> : <数组类型标识符>
--或者
TYPE
<数组类型标识符> = ARRAY [元素个数1,元素个数2,....] OF <基类型>
VAR
<数组变量表> : <数组类型标识符>
TYPE
T_ClassName = ARRAY [10] OF ARRAY [10] OF STRING[16]
VAR
V_name : T_ClassName
TYPE
T_Age = ARRAY [10,10] OF INTEGER
VAR
V_Age :T_Age
2.5.3可变大小的数组
可变大小的数组是指其实际大小未知的数组,并且从程序到另一个程序的使用有所不同。 可
变大小的数组允许您在不建立数组变量的维度的情况下编写KAREL程序。在所有情况下,变
量的维度必须在加载 .PC 文件之前建立。
VAR
变量表: ARRAY[*] OF <基类型>
变量表: ARRAY[*,*] OF <基类型>
VAR
one_d_array: ARRAY[*] OF INTEGER
two_d_array: ARRAY[*,*] OF INTEGER
对于数组的使用遍历我打算等到讲到循环的时候在讲,基本上和C/C++是一样的