本篇 Scade 语言教程将讲述 Scade 表达式中的算术类表达式算子。
在Scade 文法定义中,与算术表达式相关的文法定义如下
expr ::= ...
| arith_expr
...
arith_expr ::= unary_arith_op expr
| expr bin_arith_op expr
| ( expr : type_expr )
unary_arith_op ::= – | + | lnot
bin_arith_op ::= + | – | * | / | mod | land | lor | lxor | lsl | lsr
算术类表达式包括三类
- 一元算术表达式
- 二元算术表达式
- 数值类型转换表达式
一元算术表达式
一元算术表达式为左结合的表达式,算子包括: -
, +
, lnot
。
-
一元表达式
-
一元表达式代表取负操作。使用样例如下
function unaryMinusOp(ival1: int8) returns (ival2: int8)
let
ival2 = - ival1;
tel
+
一元表达式
+
一元表达式代表取正操作。使用样例如下
function unaryPlusOp(i: int8) returns (o: int8)
o = + i;
lnot
一元表达式
lnot
一元表达式表达式代表逻辑取反操作。使用样例如下
function lnotOp(ui8val1: uint8) returns (ui8val2: uint8)
let
ui8val2 = lnot ui8val1;
tel
二元算术表达式
二元算术表达式算子包括 +
, -
, *
, /
, mod
, land
, lor
, lxor
, lsl
, lsr
。
+
二元表达式
+
二元表达式代表加法。使用样例如下
function plusOp(ival1, ival2: int8) returns (ival3: int8)
let
ival3 = ival1 + ival2;
tel
-
二元表达式
-
二元表达式代表减法。使用样例如下
function minusOp(i8val1, i8val2: int8) returns (i8val3: int8)
let
i8val3 = i8val1 - i8val2;
tel
*
二元表达式
*
二元表达式代表乘法。使用样例如下
function multiplicationOp(ival1, ival2: int8) returns (ival3: int8)
let
ival3 = ival1 * ival2;
tel
/
二元表达式
/
二元表达式代表除法。使用样例如下
function divisionOp(ival1, ival2: int8) returns (ival3: int8)
let
ival3 = ival1 / ival2;
tel
mod
二元表达式
mod
二元表达式代表取余。使用样例如下
function modOp(ival1, ival2: int8) returns (ival3: int8)
let
ival3 = ival1 mod ival2;
tel
land
二元表达式
land
二元表达式代表按位与。使用样例如下
function landOp(ui8val1, ui8val2: uint8) returns (ui8val3: uint8)
let
ui8val3 = ui8val1 land ui8val2;
tel
lor
二元表达式
lor
二元表达式代表按位或。使用样例如下
function lorOp(ui8val1, ui8val2: uint8) returns (ui8val3: uint8)
let
ui8val3 = ui8val1 lor ui8val2;
tel
lxor
二元表达式
lxor
二元表达式代表按位异或。使用样例如下
function lxorOp(ui8val1, ui8val2: uint8) returns (ui8val3: uint8)
let
ui8val3 = ui8val1 lxor ui8val2;
tel
lsl
二元表达式
lsl
二元表达式代表左移。使用样例如下
function lslOp(ui8val1, ui8val2: uint8) returns (ui8val3: uint8)
let
ui8val3 = ui8val1 lsl ui8val2;
tel
lsr
二元表达式
lsr
二元表达式代表右移。使用样例如下
function lsrOp(ui8val1, ui8val2: uint8) returns (ui8val3: uint8)
let
ui8val3 = ui8val1 lsr ui8val2;
tel
数值类型转换表达式
( expr : type_expr )
为数值类型转换表达式,将数值 expr
转为 type_expr
类型。使用样例如下
function numericCastOp(i16val1: int16) returns (i16val2: int8)
let
i16val2 = (i16val1 : int8);
tel