《System语言详解》——6. 语句种类

  • Post author:
  • Post category:其他



6. 语句种类

SystemTap 脚本语句使开发人员在函数和探针处理函数编写结构化的控制流程。一个探针事件内执行语句数目不能超过MAXACTION ,默认值为1000 ,参阅1.6 节。









6.1 break 和continue

Break 或continue 用于跳出或迭代最内层的 循环语句,如

while



for



foreach

语句。它们的语法和语义均与 C 语言的相同。






6.2 delete


delete

删除一个元素。

下述语句从ARRAY 组数中删除由下标元组指定的元素。删除后,元素不再存在,下次迭代将不会访问该元素。删除不存在的元素不会引致错误。

delete ARRAY[INDEX1, INDEX2, …]

下述语法删除ARRAY 数组内的所有元素:

delete ARRAY

下述语句删除(译者注:准确地说应该是重置)SCLAR 变量的值。整数和字符串变量分别复原为0 和 null(“”) ,而统计变量复原这它们初始时的空状态。

delete SCALAR






6.3 EXP (表达式)

表达式的计算结构为字符串或整数值,最终丢弃该值(译者注:表达式不能储存计算机结果,只能将之赋给其它变量,但对表达式来的,此值被之丢掉)。






6.4 for

一般语法形式:

for (EXP1; EXP2; EXP3) STMT


for

语句类似于C 语言的for 语句

。for

表达式先执行初始化EXP1 ,当EXP2 非零时,执行STMT ,然后执行迭代表达式EXP3 。








6.5 foreach

一般语法形式:

foreach (VAR in ARRAY) STMT

foreach 语句 循环遍历全局数组 ARRAY 的每个元素,并将当前键值(译者注:即数组下标)赋给 VAR 变量。 Foreach 语句内不能对数组作任何更改。如果 VAR 或 ARRAY 标识符后跟随一个加号( + )或减号( – ),那么迭代顺序变为下标或元素值的升序顺序或降序顺序。

下述语句的行为与第一个例子相同,不同之处是它的下标是一个键值元组(tuple of keys )。最多只能在一个VAR 或ARRAY 标识符上使用迭代顺序后缀(sorting suffix )。

foreach ([VAR1, VAR2, …] in ARRAY) STMT

下述语句同样与第一个例子相同,不同之处是关键字limit 限制 循环 最多迭代EXP 次 。 EXP 的值只在循环开始时计算一次。

foreach (VAR in ARRAY limit EXP) STMT






6.6 if

一般语法形式:

if (EXP) STMT1 [ else STMT2 ]

If 语句将EXP 的整数值与0 比较,如果非零则执行第一个STMT ,否则执行第二个STMT 。

if 语句和C 语言中的if 语句有相同的语法和语义。






6.7 next

next 语使包含它的探针处理函数立即退出。








6.8 ; (空语句)

一般语法形式:

statement1

;

statement2

逗号表示空语句,即不做任何事情。它作为语句间可选的分隔符,通常有助于检测语法错误和处理某种语法二义性。






6.9 return

一般语法形式:

return EXP

Return 语句从包含的函数返回EXP 的值。如果函数没有返回值,则函数体内不需要return 语句,没有返回值函数的类型称为特殊的

unknown

类型。








6.10 {} ( 语句块)

语句块由方括号({} )包围起来,内有零个或多个语句。下述是它的一般语法形式:

{ STMT1 STMT2 … }

语句块依次执行块内的每条语句。一般情况而言,语句间的分隔符和结束符不是必须的。语句块的语法和语义与C 语言的相同。






6.11 while

一般语法形式:

while (EXP) STMT

While 语句和 C 语言的有着相同的语法和语义。上述语句中,只要整数 EXP 的求值结果为非零,分析器将执行 STMT 。