打印

[转贴] tcl的语法规则

[复制链接]
1950|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangjun88|  楼主 | 2010-8-26 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
tcl的语法规则

      解释器
        在Tcl的数据结构中的核心是Tcl_Interp.一个解释器包含了一套命令,一组变量和一些用于描述状态的东西。每一个 Tcl命令是
      在特定的Tcl_Interp中运行的,基于Tcl的应用程序可以同时拥有几个Tcl_Interp。Tcl_Interp是一个轻量级的结构,可以快速的新建和删除。
      数据类型
        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: 22
      set使用于设置变量的值的命令,a、20 作为参数来传给它,a使它要操作的变量名,22是要付给的a值。
        Tcl的命令名可以是内置的命令也可以是用户建的新命令,如果是用户用户建的新命令应用程序中用函数Tcl_CreateCommand来创建。所有的参数作为字符串来传递,命令自己会按其所需来解释的参数的。命令的名字必须被打全,但
      Tcl解释器找不到一同名的命令时会用 unknown命令来代替。
        在很多场合下,unknown
      会在库目录中搜寻,找到一个的话,会自动生成一个Tcl命令并调用它。unknown经常完成缩略的命令名的执行。但最好不要使用。
      注释
        和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语言中的一样。
Backspace (0x8).
f Form feed (0xc).
Newline (0xa).
Carriage-return (0xd).
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
set b 33"

      命令综述
        1.一个命令就是一个字符串(string)。
        2.命令是用换行符或分号来分隔的。
        3.一个命令由许多的域组成。第一个于是命令名,其它的域作为参数来传递。
        4.域通常是有空白(Tab横向制表健 Space空格)来分开的。
        5.双引号可以使一个参数包括换行符或分号。三种子替换仍然发生。
        6.花括号类似于双引号,只是不进行三总体换。
        7.系统只进行一层子替换,机制替换的结果不会再去做子替换。而且子替换可以在任何一个域进行。
        8.如果第一个非控字符是`#", 这一行的所有东西都是注释。
      表达式
        对字符串的一种解释是表达式。几个命令将其参数按表达式处理,如: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



相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

251

帖子

5

粉丝