Tcl学习笔记(一)——环境搭建及基本语法

一、Tcl简介

       TCL(Tool Command Language,即工具命令语言)是一种解释执行的脚本语言。所谓解释执行语言,是指其不需要通过编译和联结,而是直接对每条语句进行顺序解释、执行。

        TCL包含语言和工具库,TCL语言主要使用于发布命令给一些交互程序如文本编辑器、调试器和shell;TCL包含用于扩展TCL命令的C\C++过程和函数,每个应用程序都可以根据自己的需要对TCL语言进行扩展。TCL在FPGA中使用广泛,比如在静态时序约束中的命令语句、在NIOS生成的自定义组件的等。

二、环境搭建

        打开Tcl官方下载网址:Download & Install Tcl | ActiveState,点击Get Started with Tcl并注册账号。

        然后创建一个organization并下载安装包。

        安装,在Choose Setup Type中选择Typical即可,其他的默认,一直到finish就安装完成了。

三、Tcl语法

3.1 脚本构成

        Tcl具有两大特征:(1)所有结构都是一条命令,包括语法结构;(2)所有数据类型都可被视为字符串(基于字符串的命令语言)。

        一条Tcl脚本是由一个或多个单词构成的,单词之间以空格或Tab键隔开,第一个单词为命令名,其余单词为该命令的参数。

        而Tcl脚本可以只包含一条命令,也可以包含多条命令。命令之间可以由分号隔开,也可以直接采用换行方式,采用分号作为分隔符时分号左侧命令不显示。

        例如通过set进行变量赋值,set后第一个参数是变量名、第二个参数是变量值。 

3.2 处理过程

        Tcl对命令的处理过程分为两步:解析和执行。

  • 在解析阶段,Tcl解释器运用规则把命令分解为一个个独立的单词,同时进行必要的置换;
  • 在执行阶段,Tcl解释器会把第一个单词作为命令名,并查看该命令是否有定义,同时查找完成该命令功能的命令过程。如果有定义,则Tcl解释器调用该命令过程,并把命令中的全部单词传递给该过程。命令过程会根据自己的需求来分辨这些单词的具体含义。每个命令对所需参数都有一些自身的要求,如果不满足要求,则会报错。Tcl会把错误信息保存在全局变量errorInfo中,可以通过puts$errorInfo的方式输出变量值,进而查看错误信息。

3.3 三种替换

        Tcl有三种替换形式:变量替换、命令替换以及反斜线替换。每种替换都会把单词中的一些原始字符替换为另外一些值。Tcl 解释器在执行命令过程之前进行这些替换。替换可以发生在命令中的任何一个单词上,包括命令名本身,在一个单词中也可以进行任意多个替换。

3.3.1 变量替换

        变量替换就是把某个变量的值赋给另一个变量,通过$符号完成,将Tcl变量的值插入单词中

        变量替换可以在一个单词中的任何位置进行,可以进行任意多次,例如:


        变量名由$符号后面所有的数字、字母以及下划线组成。因此第一个变量名result 到号为止,第二个变量名就是base。

        因为下划线不是字符串分隔符,因此tcl解释器不认为存在x_的变量。可以用{}把变量括起来,使tcl解释器把它当作一个整体。

3.3.2 命令替换

        命令替换可以把一个单词的部分或全部替换为一个命令的结果。命令替换通过方括号[]表示,会调用括号中的命令。

        方括号[]内的字符必须是有效的TcI脚本,脚本可以包含任意多条命令,命令之间用换行符隔开,也可以用分号隔开,但最终的返回值为最后一条命令的返回值。

3.3.3 反斜线替换

        反斜线替换用于向单词中插入特殊字符,如换行符、[、$、空格等会被Tcl解析器认为是有特殊含义的字符。

        这里有两处反斜线后面跟着空格,在单词中会被替换为一个空格,而这个空格符不会被视为单词分隔符。还有两处反斜线后面跟着S符号,在单词中这会被替换为一个S符号,而这个S符号会被作为普通字符处理(它们不会触发变量替换)。在反斜线后跟着n,会被替换为换行符。

        Tcl支持的反斜线序列如下表。

反斜线序列替换结果
\a警告音(0x7)
\b删除(0x8)
\f换页符(0xc)
\n换行符(0xa)
\r回车(0xd)
\t制表符(0x9)
\v垂直制表符(0xb)
\ooo八进制值位ooo(1个、2个或3个)的8位Unicode字符
\xhh十六进位值位hh的8位Unicode字符(可以有任意个h,但除了最后两个都会被忽略)
\uhhhh十六进制位hhhh的16位Unicode字符(1~4个h)

\newline

whitespace

一个空格字符

        反斜线-换行符序列和一般的替换不同,这种替换在Tcl解释器解析命令前就要单独进行。这意味着,用于替换反斜线-换行符的空格符会被作为单词分隔符看待,除非它们被双引号或大括号括起来。 

Tcl置换有两条规则:

1.Tcl在解析一条命令时,只从左向右解析一次,进行一轮置换,每一个字符只会被扫描一次;

2.每个字符只会发生一次置换,而不会对置换后的结果进行再次扫描置换。

3.4 两种引用

        Tcl 提供了一些方法,可以阻止解析器对$和分号等字符进行特殊处理,这些方法称为引用。例如,/$向单词中插入一个普通的$字符,而不会引发变量替换。除了反斜线替换外,Tcl还提供了另外两种引用形式:双引号引用和大括号引用。双引号取消其中的单词和命令分隔符的特殊解释,大括号取消其中所有特殊字符的特殊解释。

3.4.1 双括号引用

        变量替换、命令替换以及反斜线替换在双引号中正常进行。如果想要在由双引号括起来的单词中包含双引号字符,则应该使用反斜线替换。

3.4.2 大括号引用

        大括号会取消其中所有特殊字符的特殊意义。如果一个单词以左大括号开头,那么直到与它配对的右大括号为止,所有字符都将被原封不动地识别为这个单词的值。这个单词中不会发生任何替换,所有的空格、制表符、换行符以及分号都作为普通字符处理。

        如果同时使用双引号和大括号,则最外层的起主导作用。

3.5 注释

        Tcl的注释符为#。第一行的注释与set命令的分号后,表明命令结束;第三行的注释被当作set命令的一部分,因此不合法;如果注释语句中出现了反斜线,那么另起一行也被认为是注释的一部分。

        注释大段代码有二种方法:
        1.if命令,由于if的判断条件始终为0,因此大括号的代码块不会被执行

        2.大括号,大括号具有组织内部置换的功能

参考文献:

《Tcl/Tk入门经典》
《Vivado/Tcl零基础入门与案例实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/274723.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源数据集 nuScenes 之 3D Occupancy Prediction

数据总体结构 Nuscenes 数据结构 可以看一下我的blog如何下载完整版 mmdetection3d ├── mmdet3d ├── tools ├── configs ├── data │ ├── nuscenes │ │ ├── maps │ │ ├── samples │ │ ├── sweeps │ │ ├── lidarseg (o…

绝地求生:现在购买通行证还能兑换成长型武器吗?

大家好,我闲游盒,这几天收到几位盒友的私信咨询我现在购买通行证还能获得一把成长型武器吗?我相信还有许多盒友也有此困惑,那我就在这统一回复了,目前距通行证和商城物资箱礼包下架还有最后16天时间,众所周…

【Linux】从零开始认识进程 — 前篇

我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。。——山本耀司 从零开始认识进程 1 认识冯诺依曼体系2 操作系统3 进程3.1 什么是进程???3.2 进程管理PCB 3.3 Linux中的进程深入理解 3.4 进程创建总结 送给…

(一)Linux+Windows下安装ffmpeg

一丶前言 FFmpeg是一个开源的音视频处理工具集,由多个命令行工具组成。它可以在跨平台的环境中处理、转换、编辑和流媒体处理音视频文件。 FFmpeg支持多种常见的音视频格式和编解码器,可以对音视频文件进行编码、解码、转码、剪辑、合并等操作。它具有广…

如何在Tomcat中的webapp中手动发布

这里写目录标题 首先进入Tomcat文件夹进入webaaps中,编写Java代码最后进入浏览器打开就看可以进入这个界面了 首先进入Tomcat文件夹 如图: 进入webaaps中, 编写Java代码 最后进入浏览器打开 就看可以进入这个界面了

PX4|基于FAST-LIO mid360的无人机室内自主定位及定点悬停

目录 前言环境配置运行fast-lio修改px4位置信息融合方式编写位置坐标转换及传输节点 前言 在配置mid360运行环境后,可使用mid360进行室内的精准定位。 环境配置 在livox_ros_driver2的上级目录src下保存fast-lio的工程 git clone https://github.com/hku-mars/F…

AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频

第一部分:文本生成视频 1. 文本生成视频概述 随着人工智能(AI)技术的飞速发展,视频制作领域也迎来了创新的浪潮。文本生成视频是其中的一项令人激动的进展,它利用自然语言处理技术将文本内容转化为视频。这项技术在广…

redis和rabbitmq实现延时队列

redis和rabbitmq实现延时队列 延迟队列使用场景Redis中zset实现延时队列Rabbitmq实现延迟队列 延迟队列使用场景 1. 订单超时处理 延迟队列可以用于处理订单超时问题。当用户下单后,将订单信息放入延迟队列,并设置一定的超时时间。如果在超时时间内用户…

默写单词cpp(初学者版本)

笔摔坏了直接使用版:yum:仔细学习版:yum:1.直接使用版:yum:(文件使用规范)(1)文件(2)使用规范 2.仔细学习版。将会讲各个函数的功能和细节。今天太晚了,明天再写。 笔摔坏了 在一个阳光明媚的早晨,我愉快的奋笔疾书,抄…

基于VMware虚拟机安装MacOS BigSur系统

这周用VMWare搞了个MacOS虚拟机,也算是完成初中高中时候的梦想了吧~~(那时候我的电脑配置还很拉跨,带不动虚拟机)~~ 写一篇博客记录一下,当然这也是yonagi04.github.io建站的第一篇新博客 准备工作(VMWare…

c++ 常用函数 集锦 整理中

c 常用函数集锦 目录 c 常用函数集锦 1、string和wstring之间转换 2、经纬度转 xyz 值 互转 3 、获取 根目录下的文件地址 1、string和wstring之间转换 std::string convertWStringToString(std::wstring wstr) {std::string str;if (!wstr.empty()){std::wstring_convert<…

31-Java前端控制器模式(Front Controller Pattern)

Java前端控制器模式 实现范例 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用来提供一个集中的请求处理机制&#xff0c;所有的请求都将由一个单一的处理程序处理该处理程序可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给…

LabVIEW NV色心频率扫描

LabVIEW NV色心频率扫描 通过LabVIEW软件开发一个能够实现对金刚石氮空位&#xff08;Nitrogen-Vacancy&#xff0c;NV&#xff09;色心的频率扫描系统。系统通过USB协议与硬件设备通信&#xff0c;对NV色心进行高精度的频率扫描&#xff0c;满足了频率在2.6 GHz到3.2 GHz范围…

云原生:重塑未来应用的基石

随着数字化时代的不断深入&#xff0c;云原生已经成为了IT领域的热门话题。它代表着一种全新的软件开发和部署范式&#xff0c;旨在充分利用云计算的优势&#xff0c;并为企业带来更大的灵活性、可靠性和效率。今天我们就来聊一聊这个热门的话题&#xff1a;云原生~ &#x1f4…

DevEco Studio 项目创建

安装DevEco Studio后开始使用&#xff0c;双击桌面DevEco Studio 快捷方式弹出界面&#xff1a; 选择Application —> Empty Ability&#xff0c;点击Next 项目配置 Project name&#xff1a;工程的名称&#xff0c;可以自定义&#xff0c;由大小写字母、数字和下划线组成。…

解锁编程潜能:ChatGPT如何革新软件开发

目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代&#xff0c;软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步&#xff0c;越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一&#xff0c;最近…

【RabbitMQ | 第一篇】消息队列基础知识

文章目录 1.消息队列基础知识1.1什么是消息队列&#xff1f;1.2消息队列有什么用&#xff1f;&#xff08;结合项目说&#xff09;1.2.1异步处理1.2.2削峰/限流1.2.3降低系统耦合性1.2.4实现分布式事务 1.3消息队列的缺点1.4JMS和AMQP1.4.1 JMS的两种消息模型&#xff08;1&…

海外社交营销为什么用云手机?不用普通手机?

海外社交营销作为企业拓展海外市场的重要手段&#xff0c;正日益受到企业的青睐。云手机以其成本效益和全球性特征&#xff0c;成为海外社交营销领域的得力助手。那么&#xff0c;究竟是什么特性使得越来越多的企业选择利用云手机进行海外社交营销呢&#xff1f;下文将对此进行…

【微服务】Gateway服务网关

文章目录 1、为什么需要网关2、gateway示例1&#xff09;创建gateway服务&#xff0c;引入依赖2&#xff09;编写启动类3&#xff09;基础配置和路由规则4&#xff09;重启测试5&#xff09;网关路由流程图6&#xff09;总结 3、断言工厂4、过滤器工厂4.1.路由过滤器的种类4.2、…

[Python人工智能] 四十三.命名实体识别 (4)利用bert4keras构建Bert+BiLSTM-CRF实体识别模型

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…
最新文章