SMV源码分析1

本文介绍了SMV源码的主要部分,包括main函数的信号处理、存储管理、命令行参数处理和通用的内存管理及哈希表实现。SMV自定义了malloc/free进行内存分配,并提供了通用的哈希表接口。此外,文章还讨论了如何在SMV中实例化这些数据结构和功能。
摘要由CSDN通过智能技术生成

SMV代表Symbolic Model Verifier,是我研究领域中用到的一个小工具。SMV所基于的原理简单说来是:先把实际中的系统建模为有限状态系统,系统所要满足的性质用CTL时态逻辑表示,然后把它们作为SMV的输入,自动执行模型检测算法,得出性质在系统上是否成立,若不成立就给出反例,说明为什么不成立。

SMV是Carnegie Mellon大学开发,能方便在http://www-2.cs.cmu.edu/~modelcheck/smv.html获得源码。

SMV源码主要包含16个h文件和c文件,再加上词法规则文件和语法规则文件,共18个源码文件,9154行代码。下面命令分别统计h、c文件代码行数和h、c文件个数:

$ find . -name "*\.[hc]" -print | xargs wc -l | tail –n1
$ find . -name "*\.[hc]" -print | wc –l

SMV设计了一种语言(称为SMV语言),以方便描述有限状态系统和CTL时态逻辑,处理这种语言的词法语法分析程序,借助经典的工具Yacc和Lax生成。SMV实现所要求的时态逻辑和符合模型检测知识,当分析到相关代码时详细介绍。

 

1.main函数总体框架

1)信号处理代码:

 int i; 
/* Catch all the signals we can catch, except for segfaults.
     Core dumps are useful for debugging. 
     Also, stopping and resuming seems like a good idea. */
  for(i = 0 ; i < 32 ; i++)
    if((i != SIGSEGV) && (i != SIGCONT) && (i != SIGTSTP))
      signal(i, signal_handler);

解析:

signal的声明十分复杂:void (*signal(int sig, void (*func)(int))) (int);

下图说明如何分析这样的声明(来自《c专家编程》中文版64页)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值