免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1479 | 回复: 0
打印 上一主题 下一主题

Tcl语法简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-16 17:29 |只看该作者 |倒序浏览
作为一种脚本语言,Tcl具有简单的语法.
cmd arg arg arg
一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数 .
$foo
$符号代表变量的值. 在本例中, 变量名称是foo.
[clock seconds]
方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号 . 在本例中, 嵌套命令是以秒为单位的当前时间秒数 .
"some stuff"
双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释 .
{some stuff}
大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释.
\
反斜线符号(\) 是用来引用特殊符号. 例如:\n 代表换行. 反斜线符号也被用来关闭"$"符号 , 引号,方括号和大括号的特殊含义 .
--------------------------------------------------------------------------------
一个小例子
下面是Tcl中打印当前时间的命令. 它使用了三条Tcl命令 : set, clock, 和 puts. set 命令给变量赋值. clock 命令生成时间值 . puts 命令打印结果.
set seconds [clock seconds]
puts "The time is [clock format $seconds]"
注意在给变量赋值时并未使用$符号. 只有在使用变量时才使用$符号.在上个例子中, seconds 变量并不是必须的. 你能使用一句命令打印出当前时间:
puts "The time is [clock format [clock seconds]]"
--------------------------------------------------------------------------------
分组和替换
Tcl解析Tcl语法是通过以下三步: 参数分组, 结果替换和命令分派.
参数分组. Tcl需要决定怎样组织命令的参数 . 在最简单的情况中, 空格分隔了各参数 . 作为早期规定, 引号和括号使多个单词成为一个参数 . 在上个例子中 , 双引号使多个单词成为puts命令的一个参数.
结果替换. 在参数分组后 , Tcl执行字符串替换. Put命令中, 只是简单地用变量 $foo 的值替换了foo, 用结果替换了括号命令. 替换是在分组之 后 后进行的. 这种次序使特别的值并未使命令结构变复杂.
命令分派. 在结果替换后, Tcl使用命令名称作为关键字 ,查询分派表,调用相应的C程序,来执行命令. . 你也可以在Tcl中开发命令程序. 在参数传递和错误处理中有一些简单的约定.
--------------------------------------------------------------------------------
  另一个例子
下面是另一个例子:
set i 0
while {$i    puts "$i squared = [expr $i*$i]"
    incr i
}
这里, 大括号用来参数分组, 并没进行任何替换. Tcl语法解析知道 while 命令没有特别的地方,象对待其它命令一样. while 命令的执行程序知道第一个参数是表达式, 第一个参数是多个Tcl命令 . 大括号把它分成两个参数:逻辑表达式控制循环,命令在循环部分 .
我们看到了两个数学表达式: 逻辑比较和乘法计算. while命令自动计算第一个参数值. 在其它场合时,你要明确使用 expr 命令来执行数学计算.
   
--------------------------------------------------------------------------------
命令分派
最后,Tcl调用程序执行复杂的工作. 我们可以看到Tcl 使用 expr 命令来执行数学运算, puts 命令来执行输出功能, set 命令来给变量赋值. 这些Tcl命令,是通过已在Tcl中注册的C语言程序来执行的. C语言程序调用Tcl命令传来的字符串参数, 然后传回结果字符串. 写C语言程序并不复杂, 而且可以做任何事情,包括访问数据库和建立图形界面. Tcl语言, 并不清楚命令会做什么 , 它只是进行参数分组, 结果替换和命令分派 .
--------------------------------------------------------------------------------
最后一个例子
这是一个阶乘程序:
proc fac {x} {
    if {$x        error "Invalid argument $x: must be a positive integer"
    } elseif {$x        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/82448/showart_1309151.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP