《System语言详解》——5. 语言元素
5 语言元素
5.2 数据类型
SystemTap 语言仅有数种数据类型,均不需要类型声明。变量的类型可从它的使用环境中推导出来。为了支持类型推导,转换器强制要求函数的参数和返回值,数组下标和值在使用时要保证类型一致。字符串和整数之间不存在隐式类型转换。标识符在使用时,类型不一致的相关使用都会产生一个错误信号。
字面值有两种,分别是字符串和整数。字面值可以是十进制,八进制或十六进制,遵照C 语言的标记法,不需要指定类型后缀(如L或U )。
5.2.3 字符串
字符串被括在引号(”” )内,反斜杠转义码均按标准C 的转义字符进行解释。字符的长度不能超过MAXSTRINGLEN ,关于字符串长度或其它限制,请参阅1.6 节。
5.2.4 关联数组
请参阅7 节。
5.2.5 统计变量
请参阅8 节。
分号是一个条空语句,即什么事情也不做。分号是可选的,用作语句的分隔符,通常有助于检查语法错误和消除语法的二义性。
# ... shell style, to the end of line
// ... C++ style, to the end of line
正如C 一样,空格,制表符,回车,换行和注释均被视为空白,分析器直接忽略。
= *= /= %= += -= >>= <<= &= ^= |=
5.6.7 三元运算符
cond ? exp1 : exp2
5.6.11 <value> in <array_name>
5.6.12 [ <value>, ... ] in <array_name>
下标的个数必须与数组定义时指定的下标个数一致。
5.7 stap 命令行传递过来的字面值
字符值要么是由引号包含的字符串,要么是整数。关于整数的信息,请参阅5.2.2 节,而字符串的信息,请参阅5.2.3 节。
命令行后面的脚本参数被扩展为字面值,可将它用于所有接受字面值的上下文中,但引用不存在的参数编号将引致错误。
使用$1 ... $<NN> 将命令行参数转换成整数字面值。
使用@1 ... @<NN> 将命令行参数转换成字符串字面值。
probe begin { printf("%d, %s/n", $1, @2) }
# stap example.stp 10 mystring
那么,$1 会被替换成10 ,而@2 会被替换成"mystring" ,结果输出:
词法分析工作包含简单的条件预处理阶段,它的语法形式类似于三元运算符(5.6.7 节),如下:
%( CONDITION %? TRUE-TOKENS %)
%( CONDITION %? TRUE-TOKENS %: FALSE-TOKENS %)
CONDITION 是一个有限表达式(limited expression ),它的语法格式由它的第一个关键字决定,下述是它的一般语法格式:
%( <condition> %? <code> [ %: <code> ] %)
5.8.2 基于内核版本号的条件: kernel_v 和kernel_vr
kernel_v 仅引用内核版本号数值,如"2.6.13" 。
而kernel_vr 除于引用内核版本号数值外,还包含发布号后缀,如 “2.6.13-1.322FC3smp” 。
5.8.4 TRUN-TOKENS 和FALSE-TOKENS
%( kernel_v <= "2.6.5" %? **ERROR** %) # invalid token sequence
%( kernel_v <= "2.6.12" %? "__mm_do_fault" %:
%( kernel_vr == "2.6.13-1.8273FC3smp" %? "do_page_fault" %: UNSUPPORTED %)
probe syscall.vliw = kernel.function("vliw_widget") {}
下述代码适用于打开内核CONFIG_UTRACR 选( 译者注:原文是CONFIG ,估计是笔误) 。
《System语言详解》——5. 语言元素相关推荐
- 武林c语言,详解C语言中条件编译
预处理器提供条件编译,程序的不同部分可以在不同的条件下编译,从而产生不同的目标代码文件,这对于程序移植和调试非常有用,本文是武林技术频道小编给为大家带来的详解中条件编译,一起来了解一下吧! 通常情况, ...
- 结构体自定义指针函数c语言,详解C语言结构体中的函数指针
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式, ...
- 24c02读程序C语言详解,C语言编写的 24C02程序
#define uchar unsigned char #define uint unsigned int #include reg52.h> #include stdio.h> #inc ...
- 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...
- 有向图邻接矩阵c语言编程,邻接矩阵有向图(一)之 C语言详解
本章介绍邻接矩阵有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- 邻接矩阵用c语言,邻接矩阵无向图(一)之 C语言详解
本章介绍邻接矩阵无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实 ...
- Drools 规则语言详解(上)
http://www.blogjava.net/guangnian0412/archive/2006/06/09/51574.html http://www.blogjava.net/guangnia ...
- DBus glib 各数据类型接收与发送详解—C语言(3)
DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...
- 详解go语言的array和slice 【二】
上一篇 详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲 ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
最新文章
- 一段关于低价的对话(被低价困扰的安利伙伴进!)
- 我该建数仓、大数据平台还是数据中台?看完脑子终于清醒了
- MySQL获取Schema表名和字段信息
- boost::dynamic_bitset模块的测试程序
- 笔记:数据绑定表达式(一)
- 让VS2013支持 C# 6.0 语法
- 二级VB培训笔记11:培训答疑集
- iis php.exe,在IIS75下使用php运行exe程序的总结
- R语言数据挖掘1.9.1 机器学习方法
- Javascript心得(一) Javascript数据类型
- php留言板入门教程,一个php留言板实例
- 用Nginx禁止指定IP、国外IP访问我的网站
- SSD---系统架构
- Python爬取淘宝商品附加cookie修改
- 访问控制和网络冗余--ACL+NAT
- char字符变量在c语言中有什么用,c语言char怎么用
- java selector wakeup_java – 如何检测Selector.wakeup调用
- element-ui中table 去掉表头、去掉边框线、去掉鼠标悬停背景颜色
- 服务器不能使用无线键盘,台式机无线键盘不能使用解决方法
- android文件恢复,安卓手机文件丢失了,如何恢复?
热门文章
- 佳能G系列领军相机G1X
- js实现php中图片轮播,两种js实现轮播图的方式
- 【新发现】不用苹果开发账号就能申请ios证书真机调试
- git rebase之前需要 commit 才行
- SAS 146GB*8 RAID5数据恢复过程(HP 双循环)
- 《Android和PHP开发最佳实践》一第3章 PHP开发准备
- 谈谈python的from __future__ import absolute_import
- 在eclipse中创建web项目
- 大数据实验数据集何处来?
- windows终止处理程序( __try __finally) 简单解析