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

开源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://www.xdnf.cn/news/13805.html

相关文章:

  • 深度学习简介
  • 【驱动设计的硬件基础】处理器的分类
  • Opencv 相机标定相关API及原理介绍
  • 按7:2:1比例随机划分yolo数据集
  • 2025.uexp、.uasset文件、.ubulk如何打开
  • Flutter 命名路由与参数传递完全指南
  • 机器学习×第七卷:正则化与过拟合——她开始学会收敛,不再贴得太满
  • 【unitrix】 1.3 Cargo.toml 文件解析
  • 软考-计算机硬件组成
  • reactor模型
  • 支持 CHI 协议的 NOC的错误注入和边界条件测试
  • Kubernetes微服务发布治理与Java容器化终极实践指南
  • SM3算法Python实现(无第三方库)
  • 运行springboot
  • 本地内网搭建网址需要外部网络连接怎么办?无公网ip实现https/http站点外网访问
  • 动态多目标进化算法:TrRMMEDA求解CEC2018(DF1-DF14),提供完整MATLAB代码
  • SpringBoot集成ActiveMQ
  • 3D 展示崛起:科技赋能的新变革
  • 【力扣 简单 C】83. 删除排序链表中的重复元素
  • 英一真题阅读单词笔记 10年
  • c语言接口设计模式之抽象算法,以冒泡排序为例
  • @Validation 的使用 Spring
  • Matlab图像清晰度评价指标
  • 如何在网页里填写 PDF下拉框
  • STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
  • Spring Boot 项目中Http 请求如何对响应体进行压缩
  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • php列表头部增加批量操作按钮,多选订单数据批量微信退款(含微信支付SDK)
  • 洛谷-P3375 【模板】KMP
  • 前端导出PDF(适配ios Safari浏览器)