开源PSS解析器

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

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

  1. 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.vars

gentarget:
	$(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_start

    root_a.run_start

    sub_a.run_start

    add_a.run_start

    {
        // action pss_top.root_a realization
        root_a.body
    }

    {
        // action pss_top.root_a.sub_a realization
        result = 182 - 150
    }

    {
        // action pss_top.root_a.add_a realization
        result = 33 + 93
    }

    // run_end

    root_a.run_end

    sub_a.run_end

    add_a.run_end

}
相关推荐
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383006 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·7 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停7 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金9 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
2302_8057710710 小时前
Day24:DDT+EXCEL数据驱动
功能测试·单元测试·自动化·测试用例·需求分析·web自动化
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
Wang's Blog11 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog11 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网11 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python