002Karel 第二章 语言元素

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++是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值