澳门·威尼斯人(中国)官方网站

澳门·威尼斯人(中国)官方网站

| 举报 切换到宽版

澳门·威尼斯人(中国)官方网站

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  下士

注册:2010-4-1
跳转到指定楼层
1#
发表于 2011-2-25 13:08:36 |只看该作者 |倒序浏览
上海贝尔阿尔卡特公司的《Tcl编程初步》

Tcl 语法

Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单
精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明。极具可读性,
我并不是原封不动的翻译而是加上了一些自己的体会和例子,如有错误请指正。如果你看
起来很吃力,那是因为 Tcl与一般的语言有一些不同之处,刚开始可能有一些不理解,但
很快就会掌握的。请坚持一下,我能坚持写完,你至少也应该坚持读一遍吧!

Tcl Overview

这篇文章里包含了几乎 Tcl 的全部。文章的作者是Tcl的缔造者John Ousterhout,对Tcl
的诠释非常清楚。

Introduction 简介

Tcl 代表 "tool command language" 发音为 "tickle." 。它实际上包含了两个部分:一
个语言和一个库。

首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调
试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建
命令的能力。

其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建
命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行
,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库
收到命令后将它分解并执行内建的命令,经常会产生递归的调用。
/* 现在不理解没关系,请往下看 */

应用程序使用Tcl作为它的命令语言有三个好处:
1 Tcl提供了标准语法,一旦用户掌握了Tcl就可以很容易的发布命令给基于Tcl的程序。
2 Tcl实现了很多的功能,使你的工作变得很方便。
3 TCl可作为程序间威尼斯人官方网站的接口。

Tcl Interpreters 解释器

在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用
于描述状态的东西。每一个 Tcl命令是在特定的Tcl_Interp中运行的,基于Tcl的应用程序
可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除


Tcl Data Types 数据类型

Tcl只支持一种数据结构:字符串(string)。所有的命令,命令的所有的参数,命令的结
果,所有的变量都是字符串。请牢记这一点,所有的东西都是字符串。

然而字符串的实际解释是依赖于上下文或命令的。它有三种形式:命令(command), 表达式
(expresion)和表(list)。下面会讨论细节。

Basic Command Syntax 基本语法

Tcl有类似于shell和lisp的语法,当然也有许多的不同。一条Tcl的命令串包含了一条或多
条命令用换行符或分号来隔开,而每一条命令包含了一个域(field)的集合,域使用空白分
开的,第一个域是一个命令的名字,其它的是作为参数来传给它。

例如:
set a 22 //相当于C中的 a=22 a是一个变量这条命令分为三个域:1: set 2: a 3: 2
2
set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,22是
要付给的a值。

Tcl的命令名可以使内建的命令也可以是用户建的新命令,在应用程序中用函数Tcl_Creat
eCommand来创建。所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。
命令的名字必须被打全,但 Tcl解释器找不到一同名的命令时会用 unknown命令
来代替。

在很多场合下,unknown 会在库目录中搜寻,找到一个的话,会自动生成一个Tcl命令并调
用它。unknown经常完成缩略的命令名的执行。但最好不要使用。

Comments 注释

和shell很象,第一个字母是'#'的Tcl字符串是注释。

Grouping arguments with double-quotes 用双引号来集群参数用双引号来集群参数的目
的在于使用有空白的参数。
例如:
set a "this string contains whitespace"
如够一个参数一双引号来开始,该参数会一直到下一个双引号才结束。其中可以有换行符
和分号。

子替换是在正式运行该调命令之前由分析器作的

Variable substitution with $ 用美元符进行变量替换说白了就是引用该变量。
如:
set a hello
set b $a // b = "hello" 实际上传给set命令的参数
//是b,"hello"
set c a // b = "a"

Command substitution with brackets 命令子替换(用方括号)

例如:
set a [set b "hello"]
实现执行 set b "hello" 并用其结果来替换源命令
中的方括号部分,产生一条新命令
set a "hello" //"hello" 为 set b "hello" 的返
 //回值
最终的结果是b="hello" a="hello"

当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子
命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。

一个复杂一点的例子:
set a xyz[set b "abc"].[set c "def"]
//return xyzabcdef

Backslash substitution 转移符替换

转移符时间不可打印字符或由它数意义的字符插入进来。这一概念与C语言中的一样。

\b Backspace (0x8).

\f Form feed (0xc).

\n Newline (0xa).

\r Carriage-return (0xd).

\t Tab (0x9).

\v Vertical tab (0xb).

\{ Left brace (`{').

\} Right brace (`}').

\[ Open bracket (`[').

\] Close bracket (`]').

\$ Dollar sign (`$').

\sp Space (` '): does not terminate argument.

\; Semicolon: does not terminate command.

\" Double-quote.

Grouping arguments with braces 用花扩括号来集群参数

用花扩括号来集群参数与用双引号来集群参数的区别在于:用花扩括号来集群参数其中的
三种上述的子替换不被执行。而且可以嵌套。

例如:
set a {xyz a {b c d}}//set收到俩个参数 a 'xyz a {b
//c d}'

eval {
set a 22
set b 33
}//eval收到一个参数 'set a 22\nset b 33'


Command summary 命令综述

1.一个命令就是一个字符串(string)。

2.命令是用换行符或分号来分隔的。

3.一个命令由许多的域组成。第一个于是命令名,其它的域作为参数来传递。

4.域通常是有空白(Tab横向制表健 Space空格)来分开的。

5.双引号可以使一个参数包括换行符或分号。三种子替换仍然发生。

6.花括号类似于双引号,只是不进行三总体换。

7.系统只进行一层子替换,机制替换的结果不会再去做子替换。而且子替换可以在任何一
个域进行。

8.如果第一个非控字符是`#', 这一行的所有东西都是注释。

Expressions 表达式

对字符串的一种解释是表达式。几个命令将其参数按表达式处理,如:expr、for 和 if,
并调用Tcl表达式处理器(Tcl_ExprLong,Tcl_ExprBoolean等)来处理它们。其中的运算符与
C语言的很相似。

!
逻辑非

* / % + -

<< >>
左移 右移 只能用于整数。

< > <= >= == !=
逻辑比较

& ^ |
位运算 和 异或 或

&& ||
逻辑'和' '或'

x ? y : z
If-then-else 与C的一样

Tcl 中的逻辑真为1,逻辑假为0。

一些例子:

5 / 4.0
5 / ( [string length "abcd"] + 0.0 )
---------------------- ---
计算字符串的长度 转化为浮点数来计算

"0x03" > "2"
"0y" < "0x12"
都返回 1

set a 1
expr $a+2

expr 1+2
都返回 3

Lists 列表

字符串的另一种解释为列表。一个列表是类似于结果的一个字符串包含了用空白分开的很
多域。例如 "Al Sue Anne John" 是一个有四个元素的例表,在列表中换行父被视为分隔
符。

例如:
b c {d e {f g h}} 是一个有三个元素的列表 b 、c 和 {d e {f g h}}。

Tcl的命令 concat, foreach, lappend, lindex, linsert,list , llength, lrange,lre
place, lsearch, 和 lsort 可以使你对列表操作。

Regular expressions 正则表达式

Tcl 提供了两个用于正则表达式的命令 regexp 和 regsub。
这里的正则表导师实际上是扩展的正则表达式,与 egrep 相一致。

支持 ^ $ . + ? \> \< () | []

Command results 命令结果

每一条命令有俩个结果:一个退出值和一个字符串。退出值标志着命令是否正确执行,字
符串给出附加信息。
有效的返回制定议在`tcl.h', 如下:

TCL_OK
命令正确执行,字符串给出了命令的返回值。

TCL_ERROR
表示有一个错误发生,字符串给出了错误的描述。全局变量 errorInfo 包含了人类可读的
错误描述,全局变量errorCode 机器使用的错误信息。

TCL_RETURN
表示 return 命令被调用,当前的命令(通常是一个函数)必须立刻返回,字符串包含了
返回值。

TCL_BREAK
表示break已经被调用,最近的巡环必须立刻返回并跳出。字符串应该是空的。

TCL_CONTINUE
表示continue已经被调用,最近的巡环必须立刻返回不跳出。字符串应该是空的。

Tcl编程者一般需要关心退出值。当Tcl解释器发现错误发生后会立刻停止执行。

Procedures 函数

Tcl 允许你通过proc命令来扩充命令(定义新的命令),定义之后可以向其它的内建命令
一样使用。
例如:
proc pf {str} {
puts $str
}

pf "hello world"
这里有一个初学者不注意的地方,上述的定义一定要写成那样子。而不能向下面那样写:

proc pf {str}
{
puts $str
}
因为proc实际上也只不过是一条命令,是一换行符或分号来结束的,用集群参数来传递函
数体。proc的定义如下:
proc name args tclcommand

Variables: scalars and arrays 变量:标量和向量(即数组)

向量就是数组,而标量是没有下表的变量。
我们用C来类比:
int i; // i 是标量
int j[10]; // j 是向量

变量不需要定义,使用的时候会自动的被创建。Tcl支持两种
变量:标量和向量
举个例子来说明吧,
set i 100
set j(0) 10
set k(1,3) 20
i是标量,j是向量。
引用的时候:
$i
$j(0)
$k(1,3)

第 1 章. TCL基本知识................................................................................................................1
1.1 什么是TCL.............................................................................................................................1
1.2 TCL自学工具...........................................................................................................................1
1.3 TCL软件包..............................................................................................................................2
1.4 TCL命令格式...........................................................................................................................2
1.5 TCL脚本文件和SOURCE 命令..................................................................................................3
1.6 可执行脚本文件(EXECUTABLE FILE)...........................................................................................3
1.7 获得帮助................................................................................................................................4
1.7.1 Windows系统.............................................................................................................4
1.7.2 Unix系统......................................................................................................................4
第 2 章. 输出、赋值与替换........................................................................................................5
2.1 PUTS........................................................................................................................................5
2.2 SET & UNSET.............................................................................................................................5
2.3 替换.......................................................................................................................................6
2.3.1 $..................................................................................................................................6
2.3.2 [].................................................................................................................................6
2.3.3 " " 和{}..........................................................................................................................6
2.3.4 \..................................................................................................................................7
第 3 章. 数学表达式与EXPR命令..............................................................................................8
3.1 数学和逻辑运算符..................................................................................................................8
3.2 数学函数................................................................................................................................8
3.3 数学运算举例.........................................................................................................................9
3.4 INCR命令...............................................................................................................................9
第 4 章. 字符串........................................................................................................................10
4.1 基本命令集...........................................................................................................................10
4.2 APPEND命令..........................................................................................................................10
4.3 FORMAT命令..........................................................................................................................10
4.3.1 format命令说明......................................................................................................10
4.3.2 format举例..............................................................................................................11
4.4 SCAN命令.............................................................................................................................12
4.5 BINARY命令...........................................................................................................................13
4.6 SUBST命令..............................................................................................................................14
4.7 STRING 命令...........................................................................................................................15
4.7.1 string 命令列表.........................................................................................................15
4.7.2 字符串比较................................................................................................................16
4.7.3 string match字符串匹配.........................................................................................16
4.7.4 字符串替换................................................................................................................18
4.7.5 字符类别(class)测试.................................................................................................18
4.7.6 字符串映射................................................................................................................19 i
Tcl 编程初步
第 5 章. TCL列表操作..............................................................................................................20
5.1 列表命令集...........................................................................................................................20
5.2 LIST命令................................................................................................................................20
5.3 CONCAT命令.........................................................................................................................21
5.4 LAPPEND命令........................................................................................................................21
5.5 LLENGTH 命令.........................................................................................................................22
5.6 LINDEX命令............................................................................................................................22
5.7 LRANGE命令..........................................................................................................................22
5.8 LINSERT 和LREPLACE命令........................................................................................................22
5.9 LSEARCH命令.........................................................................................................................23
5.10 LSORT命令.............................................................................................................................24
5.11 JOIN与SPLIT命令...................................................................................................................24
5.12 FOREACH控制结构................................................................................................................27
第 6 章. 数组............................................................................................................................28
6.1 数组的定义与格式................................................................................................................28
6.2 数组变量...............................................................................................................................29
6.3 多维数组...............................................................................................................................29
6.4 数组操作命令.......................................................................................................................30
6.4.1 array get命令.........................................................................................................30
6.4.2 array names命令....................................................................................................30
6.4.3 遍历数组...................................................................................................................31
6.4.4 用数组定义结构........................................................................................................31
第 7 章. 控制结构命令.............................................................................................................32
7.1 IF/ELSE命令............................................................................................................................32
7.2 FOR命令...............................................................................................................................33
7.3 WHILE命令.............................................................................................................................33
7.4 BREAK 与 CONTINUE命令........................................................................................................34
7.5 SWITCH命令...........................................................................................................................34
7.6 CATCH 命令...........................................................................................................................35
7.7 ERROR命令............................................................................................................................36
7.8 RETURN 命令...........................................................................................................................37
7.9 EXIT命令...............................................................................................................................37
第 8 章. 过程与作用域.............................................................................................................38
8.1 PROC—过程定义命令...........................................................................................................38
8.2 作用域..................................................................................................................................40
8.2.1 过程的作用域............................................................................................................40
8.2.2 变量的作用域............................................................................................................40
8.3 UPVAR命令............................................................................................................................42
8.4 RENAME命令.........................................................................................................................44
8.5 特殊变量...............................................................................................................................45
8.5.1 命令行参数................................................................................................................45
8.5.2 env--环境变量数组...................................................................................................45
8.6 EVAL命令..............................................................................................................................46
8.7 UPLEVEL命令..........................................................................................................................48
第 9 章. 正则表达式(REGULAR EXPRESSIONS)...................................................................49
9.1 REGEXP命令..........................................................................................................................49
9.2 REGSUB命令...........................................................................................................................51
9.3 正则表达式的语法................................................................................................................52 ii
Tcl 编程初步
9.3.1 分支(branch)和原子(atom)....................................................................................52
9.3.2 基本语法...................................................................................................................52
9.3.2.1 匹配字符.......................................................................................................................................52
9.3.2.2 限定匹配.......................................................................................................................................53
9.3.2.3 方括号表达式与字符集.................................................................................................................53
9.3.2.4 匹配分支.......................................................................................................................................54
9.3.2.5 量词(Qulifier)..........................................................................................................................54
9.3.2.6 子模式与匹配报告捕获.................................................................................................................55
9.3.2.7 反斜杠引用...................................................................................................................................56
9.3.2.8 匹配优先级...................................................................................................................................56
9.3.3 高级正则表达式(AREs).........................................................................................57
9.3.3.1 反斜杠换码(escape)序列............................................................................................................57
9.3.3.2 归整元素(collating element).....................................................................................................57
9.3.3.3 等价类(equivalence class)........................................................................................................58
9.3.3.4 字符类(character class).............................................................................................................58
9.3.3.5 非贪婪量词...................................................................................................................................59
9.3.3.6 约束量词.......................................................................................................................................59
9.3.3.7 回退引用.......................................................................................................................................59
9.3.3.8 前瞻(lookahead)........................................................................................................................60
9.3.3.9 换行符敏感的匹配.........................................................................................................................60
9.3.3.10 嵌入式选项...............................................................................................................................60
9.3.3.11 扩展语法..................................................................................................................................60
9.3.4 语法小结...................................................................................................................60
9.3.5 其它支持正则表达式的命令......................................................................................60
第 10 章. 名字空间.................................................................................................................62
10.1 创建名字空间...................................................................................................................62
10.2 用::限定符来使用变量和过程...........................................................................................62
10.3 名字空间的变量...............................................................................................................63
10.4 过程的进口与出口............................................................................................................64
10.5 内省(INTROSPECTION).........................................................................................................65
10.6 名字空间命令集...............................................................................................................65
第 11 章. 跟踪与调试.............................................................................................................67
11.1 CLOCK命令...........................................................................................................................67
11.1.1 clock clicks命令......................................................................................................67
11.1.2 clock seconds命令................................................................................................67
11.1.3 clock format命令...................................................................................................68
11.1.4 clock scan命令.......................................................................................................70
11.2 INFO 命令...............................................................................................................................71
11.2.1 info level..................................................................................................................72
11.2.2 info exists.................................................................................................................72
11.3 TRACE命令............................................................................................................................73
11.3.1 trace variable.........................................................................................................73
11.3.2 trace vdelete..........................................................................................................75
11.3.3 trace vinfo...............................................................................................................75
第 12 章. 脚本库与软件包......................................................................................................76
12.1 声明和使用软件包............................................................................................................76
12.1.1 软件包定位................................................................................................................76
12.1.2 声明软件包命令........................................................................................................76
12.1.3 加载软件包命令........................................................................................................76
12.1.4 自动加载与软件包索引.............................................................................................77
12.1.5 用链接库提供软件包.................................................................................................79 iii
Tcl 编程初步
12.2 PACKAGE命令集...................................................................................................................80
12.3 小结.................................................................................................................................80
第 13 章. 文件操作与程序调用...............................................................................................81
13.1 文件操作...........................................................................................................................81
13.1.1 文件I/O....................................................................................................................81
13.1.2 文件系统信息命令.....................................................................................................82
13.1.2.1 glob命令................................................................................................................................83
13.1.2.2 file命令集................................................................................................................................83
13.2 程序调用...........................................................................................................................85
13.2.1 用open命令打开一个进程管道..............................................................................85
13.2.2 用exec命令调用程序..............................................................................................87
13.2.3 pid命令....................................................................................................................88
第 14 章. 套接字与事件驱动编程简介....................................................................................89
14.1 套接字编程.......................................................................................................................89
14.1.1 socket命令..............................................................................................................89
14.1.1.1 Client端socket命令..............................................................................................................89
14.1.1.2 Server端socket命令选项......................................................................................................90
14.1.2 用fconfigure配置套接字........................................................................................90
14.1.3 C/S编程举例............................................................................................................90
14.2 事件驱动编程...................................................................................................................93
14.2.1 after命令.................................................................................................................93
14.2.2 fileevent命令..........................................................................................................96
14.2.3 vwait命令................................................................................................................96
14.2.4 fconfigure命令.......................................................................................................97
14.2.4.1 fconfigure语法.......................................................................................................................97
14.2.4.2 非阻塞I/O...............................................................................................................................98
14.2.4.3 缓冲.........................................................................................................................................98

[ 本帖最后由 tomtuo 于 2011-2-28 09:10 编辑 ]
已有 1 人评分经验 家园分 收起 理由
tomtuo + 10 + 30 + 10 谢谢分享

总评分: 经验 + 10  家园分 + 30  + 10   查看全部评分

举报本楼

本帖有 268 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

( )|联系我们 |网站地图  

GMT+8, 2024-5-15 09:06 , Processed in 0.537812 second(s), 18 queries , Gzip On.

Copyright © 1999-2023 All Rights Reserved

回顶部