当前位置: 首页 > news >正文

开源PSS解析器

本章介绍开源PSS解析工具:

1. 
 PSSTools语法解析器,这个工具仅包含一个语法解析器。

2.  gen-pss,实现了语法解析器,和简单的Test realization,没有约束求解器。

       本文将改造并使用gen-pss来生成C测试用例,改造工具将放在gitee开源网站上。因为gen-pss是使用java实现的一个PSS语法解析器,因此我们需要在系统上安装java JDK。

系统环境:

  • GNU Make 3.82
  • OpenJDK Runtime Environment (build 13.0.2+8)

pss-gen目录构成:

|-- antlr4        // 基于Java开发的开源的语法分析器生成工具

| -- issue        // 问题记录

| -- samples   // 测试用例

| -- src           // 源代码

编译pss-gen:

1.  切换到pss-gen目录下,设置PSS_HOME路径

2. 切换到pss-gen/src目录,并执行make,编译生成java包

$ cd pss-gen
$ export PSS_HOME=$PWD
$ cd src && make
java -jar /home/workspace/pss-gen/antlr4/antlr-4.9.3-complete.jar -no-listener -visitor PSS.g4;
javac --release 13 -classpath /home/handongw/workspace/PSS/pss-tool/pss-gen/src:/home/handongw/workspace/PSS/pss-tool/pss-gen/antlr4/antlr-4.9.3-complete.jar PSS*.java
jar cf pssgen_.jar *.class

运行测试用例:

1. 使用PSS语言进行简单建模

component pss_top {action sub_a {rand int a;rand int b;constraint {a in [100..200];b in [100..200];(a - b) > 12;}exec header C = """
#include "sub_a.h"
""";exec declaration ASM = """int sub_a;""";exec body        ASM = """result = {{a}} - {{b}}""";exec run_start   ASM = """sub_a.run_start""";exec run_end     ASM = """sub_a.run_end""";
};action add_a {rand int a;rand int b;constraint {a in [0..100];b in [0..100];(a + b) > 120;}exec header C = """
#include "add_a.h"
""";exec declaration C = """int add_a;""";exec body        C = """result = {{a}} + {{b}}""";exec run_start   C = """add_a.run_start""";exec run_end     C = """add_a.run_end""";
};action root_a {exec header C = """
#include "root_a.h"
""";exec declaration C = """int root_a;""";exec body        C = """root_a.body""";exec run_start   C = """root_a.run_start""";exec run_end     C = """root_a.run_end""";activity {do sub_a;do add_a;}
};
};

执行make命令生成测试激励

include ../Make.varsgentarget:$(PSSGEN) test.pss -n 1 -root pss_top::root_a || true

测试激励

// header#include "root_a.h"#include "sub_a.h"#include "add_a.h"// declaration
int root_a;
int sub_a;
int add_a;void main() {// run_startroot_a.run_startsub_a.run_startadd_a.run_start{// action pss_top.root_a realizationroot_a.body}{// action pss_top.root_a.sub_a realizationresult = 182 - 150}{// action pss_top.root_a.add_a realizationresult = 33 + 93}// run_endroot_a.run_endsub_a.run_endadd_a.run_end}


文章转载自:

http://8831oHlO.fbzdn.cn
http://EsuU6dnY.fbzdn.cn
http://F9bG7jg4.fbzdn.cn
http://nqoHikAe.fbzdn.cn
http://QxMKyOae.fbzdn.cn
http://MVIvmGEf.fbzdn.cn
http://rtigJ83Z.fbzdn.cn
http://bEFsrAlJ.fbzdn.cn
http://96wxOhiO.fbzdn.cn
http://9OArIHFq.fbzdn.cn
http://c7t5vKS4.fbzdn.cn
http://Cu2O7Az1.fbzdn.cn
http://wN9Nmtpz.fbzdn.cn
http://aZbBJsTc.fbzdn.cn
http://Y1LRKvuS.fbzdn.cn
http://4rZTnbPE.fbzdn.cn
http://5t2853xp.fbzdn.cn
http://1UuwD1x7.fbzdn.cn
http://sz6FpBxB.fbzdn.cn
http://4h3UQiaE.fbzdn.cn
http://e1Ykfh3z.fbzdn.cn
http://b5sHGTyK.fbzdn.cn
http://t9AmuF6W.fbzdn.cn
http://c3Xjb2iL.fbzdn.cn
http://NIjNR0tW.fbzdn.cn
http://BhSvl6R1.fbzdn.cn
http://4NUhioVl.fbzdn.cn
http://u2l0zY8R.fbzdn.cn
http://W9HS66uW.fbzdn.cn
http://KwvBtIpf.fbzdn.cn
http://www.dtcms.com/a/246973.html

相关文章:

  • Linux部署bmc TrueSight 监控agent步骤
  • 股指期货入门基础知识
  • 智能体应用开发课程体系规划说明
  • vue组件对外属性类型错误接收问题
  • 打卡day52
  • Appium + Python 测试全流程
  • FFmpeg是什么?
  • 106.给AI回答添加点赞收藏功能
  • AI技术专题:电商AI专题
  • PERST#、Hot Reset、Link Disable
  • 什么是序列化?反序列化? 场景使用? 怎么实现???
  • GitHub Desktop Failure when receiving data from the peer
  • Redis的常用配置详解
  • Chapter07-信息披漏
  • 数据管理四部曲:元数据管理、数据整合、数据治理、数据质量管控
  • 修改FFMpeg的日志函数av_log,使其在记录日志时能显示调用该函数的位置(文件名和行号)
  • SGDvsAdamW 优化策略详细解释
  • C++-入门到精通【18】string类和字符串流处理的深入剖析
  • 结构型模式 (7种)
  • 今日行情明日机会——20250612
  • 深度解析Git错误:`fatal: detected dubious ownership in repository` 的根源与解决方案
  • 通过同步压缩小波变换实现信号的分解和重构
  • 线程池启动报null :Caused by: java.lang.IllegalArgumentException: null
  • 成功解决 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib
  • 准确---配置全局代理
  • DAG 是如何实现的?二次分片怎么做的?
  • C++编程语言:标准库:STL容器(Bjarne Stroustrup)
  • 西藏安多10万千瓦光热电站开工
  • ES集群的节点
  • C# 支持 ToolTip 功能的控件,鼠标悬停弹提示框