Vera ++ TCL规则:列出所有局部变量[关闭]

2023-12-03

我正在尝试为 vera++ 静态分析器编写规则。由于我在这里没有找到vera++的小组,并且vera++使用TCL来实现其分析规则,因此我将其发布到TCL论坛。我曾在 vera++spirel.com/vera/ce/doc/tclapi.html 上工作过,但由于我对 TCL 不太了解,所以我需要进一步的建议。

由于我是 TCL 编程的初学者,但想知道 TCL 程序列出 C++ 源代码文件中所有局部变量的方法?我的意思是采取什么方法以及如何实现?

我面临的问题是在解析 C++ 源代码文件以检测局部变量声明时?


使用 vera++ 规则解析本地(或任何其他)变量定义非常复杂,但当然是可行的。基本的 C++ 解析和标记化是由 vera++ 完成的。

基本方法是使用 vera++ 的getTokens函数与一个小型状态机结合使用,用于检查已完成的 C++ 语句。您需要收集标记(也可能是它们的值,因为稍后您需要变量名称来设置列表)并将它们连接起来,直到获得完整的语句。如果您有完整的语句,则可以使用正则表达式来检查它是否是变量定义并从子匹配中提取变量名称。另外你还需要记住你是否在一个{}块以了解它是否是局部变量定义。

您可以找到一个构建简单状态机的示例,以将标记收集到 vera++ 规则 T019 中的语句中,该规则检查完整的大括号代码块,作为起点。

我已经用 vera++ 解析了变量定义(以检查各种命名约定),但不幸的是无法发布完整的代码,因为它是我雇主的专有工作。但我可以给你一个片段,显示我用来检查变量声明的正则表达式:

set isVar false
if [regexp {\s+((extern\s+)?(static\s+|mutable\s+|register\s+|volatile\s+)?(const\s+)?)?((identifier#[^#]+#\s+colon_colon\s+)*identifier#[^#]+#)\s+(star\s+|const\s+|and\s+|less.*greater\s+|greater\s+)*(identifier#[^#]+#\s+colon_colon\s+)*identifier#([^#]+)#(\s+leftbracket.*rightbracket)?(\s+assign)?.*semicolon$} $statement m s1 s2 s3 s4 s5 s6 s7 s8 s9 s10] {
    set locVarname $s9
    set isVar true
    set currentMatch $m
} elseif [regexp {\s+((extern\s+)?(static\s+|mutable\s+|register\s+|volatile\s+)?(const\s+)?)?(char\s+|int\s+|short\s+|long\s+|void\s+|bool\s+|double\s+|float\s+|unsigned\s+|and\s+|star\s+|unsigned\s+)+(identifier#[^#]+#\s+colon_colon)*\s+identifier#([^#]+)#(\s+leftbracket.*rightbracket)?(\s+assign)?.*semicolon$} $statement m s1 s2 s3 s4 s5 s6 s7 s8] {
    set locVarname $s7
    set isVar true
    set currentMatch $m
}

$statement包含前面提到的完整声明。请注意,我将令牌值连接到identifier令牌使用identifier#<value>#并使用正则表达式组来提取它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vera ++ TCL规则:列出所有局部变量[关闭] 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • JVM GC 问题

    在过去的几周里 我一直在为我的 Glassfish 服务器测试不同的 JVM 设置 堆的主要设置 除其他外 是 Xms512m Xmx512m XX NewRatio 2 我尝试了不同的 GC 设置 但在启动服务器几天后仍然遇到长时间暂停的
  • 确定平均角度

    我正在开发一个涉及获取游戏中摄像机角度的应用程序 该角度可以是 0 359 之间的任意值 0 是北 90 是东 180 是南 等等 我正在使用一个 API 它在 Camera 类中有一个 getAngle 方法 我如何找到不同摄像机角度之间
  • HTML 中的大括号

    我偶然发现了这段代码 a href class text1 a 什么是 text2 做 稍后 该 HTML 被替换为 a href class text1 a 有什么办法可以找回text2jQuery 的价值 在某些情况下 代码是输入的 因
  • 如何创建Windows服务的多个实例?

    我想运行服务器上安装的 Windows 服务的多个实例 而无需再次安装 这怎么可能 服务 安装 实际上只是在名称 可执行文件和其他一些元数据位之间添加映射 服务一旦安装 要么运行 一次 要么不运行 运行多个实例作为服务 它们必须使用不同的名
  • 新的.NET“project.json”项目,将预构建的本机.dll复制到输出目录

    我正在寻找将我的项目转换为使用project json格式 但仍使用 NET CLR 直到第 3 方依赖项添加对 CoreCLR 的支持 话虽如此 content 目录中的一些文件的 NuGet 依赖项需要输出到正在运行的应用程序的 bin
  • 获取最小化窗口的大小

    我从来不知道这一点 但显然 默认情况下 系统会减少 最小化窗口到其大小 任务栏按钮并移动最小化 窗口到任务栏 一个恢复的 window 是一个已经存在的窗口 返回到之前的大小并且 位置 即它的大小 在最小化或最大化之前 在应用程序中 我们希
  • ggplot2 中的等高线

    我想知道如何使用 ggplot2 中的 stat contour 更改轮廓线的比例 现在我正在使用这段代码 如下 来制作 PAR 到 30m 的等高线图 但我的图仅显示前 10m 中的等高线 并且仅显示达到最小值 10 5 的线 但是 我有
  • 发送短信j2me出现提示消息

    当我通过 j2me 应用程序发送短信时 在发送消息之前 会出现我是否可以使用互联网发送消息的问题 是否可以退出这个问题而不出现 发生这种情况是因为您访问 HTTP 和 SMS API 要使用此类 API 您需要签署 Java ME 应用程序
  • emacs:控制选项卡缓冲区循环,或堆栈缓冲区循环,类似于窗口之间的 alt-tab

    我查阅了这个资源 http www emacswiki org cgi bin wiki ControlTABbufferCycling 并尝试过buffer stack el 这很有用 但我发现用户体验有点尴尬 无法直观地看到堆栈中的其他
  • Python Pandas:为源列的每个不同值创建一个新列(布尔输出作为列值)

    我试图根据数据帧的内容将其源列拆分为几列 然后按以下方式用布尔值 1 或 0 填充新生成的列 原始数据框 ID source column A value 1 B NaN C value 2 D value 3 E value 2 生成以下
  • Access 2010 限制查询结果

    MS Access 2010 中用于将查询结果限制为前 1 000 个的语法是什么 我试过这个 SELECT tblGL Cost Centre Code FROM tblGL LIMIT 1000 但我收到错误 FROM 子句中的语法错误
  • 有什么方法可以控制 blockproc 输出的串联吗?

    这是问题的后续 使用 blockproc 或 im2col 在图像上重叠滑动窗口 所以通过使用代码 B blockproc A 1 1 block fun BorderSize 2 2 TrimBorder false PadPartial
  • 使用 geom_line 连接缺失值

    我试图弄清楚是否可以使用 geom line 连接缺失值 例如 在下面的链接中 构面 F 中的时间 3 处缺少值 在这种情况下 我想要一条线来连接时间 2 和 4 有办法实现这一点吗 https farm8 staticflickr com
  • 从自定义表格视图单元格发送重新加载数据?

    我将如何从自定义 tableViewCell 向 tableView 发送 reloadData 消息 实现这一点的最简单方法是使用委托 在 CustomTableCell h 中定义一个协议 如下所示 protocol CustomTab
  • 递归 - 数字按相反顺序排列

    我需要实现一个递归方法 printDigits 它将整数 num 作为参数 并以相反的顺序打印其数字 每行一位数字 这是我到目前为止所拥有的 public class PrintDigits public static void main
  • 启动层初始化时发生错误 FindException: Module not found

    使用 Java 9 执行简单的 Hello World 程序会导致以下错误消息 boot层初始化时出错java lang module FindException 找不到模块 com pantech myModule 我执行的命令行是 ja
  • 使用 VBA 宏在 CATIA V5R19 中实例化 PowerCopy

    我不知道如何使用 VBA 宏实例化 Power copy 我有一个 CATPart1 其 Power copy 名称为 MyPC 我想在当前部分实例化这个超级副本 仅举例来说 此超级复制输入为 Plane Start point 和 End
  • 查找“立体校正”两个摄像机之间的旋转矩阵

    所以我有一个深度图以及相机的外部和内部 我想取回 3D 点和表面法线 我正在使用该函数重新投影图像至 3D 在stereo rectify函数中找到Q如何得到旋转矩阵between第一和第二相机的坐标系 我有单独的旋转矩阵和平移向量 但如何
  • Android Studio:使用 Mongo Java 驱动程序连接到 MongoDB 服务器

    关于这个问题有很多帖子 但似乎没有人能解决问题 所以也许有些事情已经改变了 我正在尝试将我的 Android 应用程序连接到位于 mLab 上的 MongoDB 服务器 我正在使用 Mongo Java Drived 当然已经将库添加到了
  • Vera ++ TCL规则:列出所有局部变量[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试为 vera 静