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.mzph.cn/news/757028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5拷贝复制快捷键修改Ctrl+w

UE5默认修改了原来的Ctrl w的快捷键方式,改成Ctrl D 非常不习惯 其实可以在编辑器中进行修改快捷键的 位置在 Editor Preferences ,搜索 Duplicate, 在其中的command selection中,修改 按键为Ctrl w 如图所示; …

LeetCode 面试经典150题 380.O(1)时间插入、删除和获取随机元素

题目: 实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 va…

C# 方法(函数)

文章目录 C# 方法(函数)简单示例程序代码运行效果 值传递和引用传递示例程序 运行效果按输出传递参数运行结果 C# 方法(函数) 简单示例 程序代码 访问的限制符 using System; using System.Collections.Generic; using Syste…

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第八:trans_func class

# 生态学研究人员通常对微生物群落的功能特征感兴趣,因为功能或代谢数据对于解释微生物群落的结构和动态以及推断其潜在机制是强有力的。 # 由于宏基因组测序复杂且昂贵,利用扩增子测序数据预测功能谱是一个很好的选择。 # 有几个软件经常用于此目标&…

性能优化(CPU优化技术)-NEON指令详解

原文来自ARM SIMD 指令集:NEON 简介 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀&#xf…

Qt5.9.6+VS2015 部署PCL1.8.1

本文系转载,如侵权请告知删除。原博文链接:https://blog.csdn.net/jepco1/article/details/80752954 0 编译环境 所需软件包及其版本 Qt5.9.6 msvc2015_64 VS2015 VTK 8.0.0 https://gitlab.kitware.com/vtk/vtk/tree/v8.0.0 PCL1.8.1 https://github.c…

蓝桥杯刷题(十二)

1.答疑 代码 n int(input()) L [] for i in range(n):a,b,c map(int,input().split())A ab # 进入和答疑时间B abc # 个人总用时L.append([A,B]) L.sort(keylambda x:x[1]) # 个人总用时短的优先 ans tmp 0 # ans为发消息时刻,tmp为前一个人的总用时 for i …

Linux:Gitlab:16.9.2 创建用户及项目仓库基础操作(2)

我在上一章介绍了基本的搭建以及邮箱配置 Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)-CSDN博客https://blog.csdn.net/w14768855/article/details/136821311?spm1001.2014.3001.5501 本章介绍一下用户的创建,组内设置用户&…

[AIGC] MySQL与PostgreSQL:两种流行的数据库系统的对比

数据库是存储和查询数据的重要工具。在选择数据库时,两个经常被考虑的选项都是开源的:MySQL和PostgreSQL。这两个数据库都与许多应用程序一起使用,但它们在某些方面存在显著的不同。在本文中,我们将比较MySQL和PostgreSQL的一些关…

长安链团队论文入选国际顶会Usenix Security 2024

零知识证明是区块链扩容和隐私保护的关键前沿技术,其天然具备完备性、可靠性和零知识性的特点,是提升区块链交易吞吐量与可扩展性、在验证用户身份的同时保护用户数据隐私,实现复杂计算不可或缺的关键技术。基于零知识证明技术实现高兼容性、…

ansible Playbook案例 安装nginx

目录 核心元素基本组件举例命令行也 是可以创建文件的编辑nginx.yml 运行前三部曲 核心元素 Playbook的核心元素: Hosts:主机组; Tasks:任务列表; Variables:变量,设置方式有四种;…

基于华为ensp的企业网络规划(新版)

第一章 项目概述 1.1 项目总体描述 假设某大型公司总部在北京、在重庆设置分部,总部和分部均有研发部、市场部、财务部等部门,现在要求进行网络规划与设计,实现分部和总部能够进行网络连通。为了保证数据安全,在总部和分部之间可…

pytorch单层感知机

目录 1.单层感知机模型2. 推导单层感知机梯度3. 实战 1.单层感知机模型 2. 推导单层感知机梯度 公式前加了一个1/2是为了消除平方2,不加也是可以的,不会改变函数的单调性 3. 实战 初始化1行10列的x和wsigmod中xw.t() w做了转置操作是为了将[1,10]转换…

目标检测——PP-YOLOE算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…

Java:类和对象

目录 1.面对对象的初步认识1.1 什么是面向对象?(Java当中一切皆为对象)1.2 面对对象与面对过程 2.类的定义和使用2.1简单认识类2.2 类的定义格式 3.类的实例化3.1 什么是实例化3.2类和对象的说明 4.this引用4.1为什么要使用this引用4.2 什么是…

上位机图像处理和嵌入式模块部署(qmacvisual图像预处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不管大家是在读书的时候学习的图像处理,还是在后来的工作中,重新学习了图像处理,相信大家对图像预处理的概念并…

基于nodejs+vue班级管理系统的设计与实现-flask-django-python-php

随着电子技术的普及和快速发展,线上管理系统被广泛的使用,有很多事业单位和商业机构都在实现电子信息化管理,班级管理系统也不例外,由比较传统的人工管理转向了电子化、信息化、系统化的管理。随着互联网技术的高速发展&#xff0…

创建自己的“百度网盘”(部署owncloud)

[rootlocalhost html]# cd /root/[rootlocalhost ~]# wget https://download.com/server/stable/owncloud-10.12.0.zip --no-check-certificate #下载当前的owncloud代码包[rootlocalhost ~]# yum -y install unzip #安装解压工具[rootlocalhost ~]# unzip owncloud-10.12.0.zi…

HarmonyOS ArkTS 基础组件

目录 一、常用组件 二、文本显示(Text/Span) 2.1 创建文本 2.2 属性 2.3 添加子组件(Span) 2.4 添加事件 三、按钮(Button) 3.1 创建按钮 3.2 设置按钮类型 3.3 悬浮按钮 四、文本输入(TextInput/TextArea)…

【Flutter】导航组件 NavigationRail 的用法简介

​​Material Design 3 定义了三种导航模式,其用法和对应的 Flutter 组件如下所示: MD3 导航Flutter 组件用途Navigation barBottomNavigationBar小型屏(宽度小于640)Navigation drawerDrawer大型屏(宽度大于960&…