開源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.pswp.cn/bicheng/84666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84666.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84666.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《linux2.4 內存管理》:第 2 章 描述物理內存

Linux 適用于多種體系結構,需用體系結構無關方式描述內存。本章介紹影響 VM 行為的內存簇、頁面和標志位結構。 非一致內存訪問(NUMA):在 VM 中,大型機器內存分簇,依簇與處理器距離,訪問代價不…

數據湖是什么?數據湖和數據倉庫的區別是什么?

目錄 一、數據湖是什么 (一)數據湖的定義 (二)數據湖的特點 二、數據倉庫是什么 (一)數據倉庫的定義 (二)數據倉庫的特點 三、數據湖和數據倉庫的區別 (一&#…

Smart Form Adobe form

強制更改內表:TNAPR se16-> Smart Form總覽 Smart form 變量格式說明: &symbol& (括號中,小寫字母為變量) &symbol& 屏蔽從第一位開始的N位 &symbol (n)& 只顯示前N位 &symbol (S)& 忽略正負號 &symbol (<)& 符號在…

Linux 內核學習(11) --- Linux 鏈表結構

文章目錄 Linked List 簡介Linked List 操作方法鏈表頭結點初始化創建鏈表節點添加節點到鏈表中從鏈表中刪除節點從鏈表中替換節點移動鏈表中的節點檢查鏈表鏈表遍歷demo 實例 Linked List 簡介 鏈表是一種數據結構&#xff0c;由一系列節點組成&#xff0c;每個節點包含數據部…

一分鐘部署nginx-公網IP訪問內網

前言 服務器內網下有nacos cluster&#xff08;3個節點&#xff09;&#xff0c;開放到公網并指定公司網絡訪問需要配置三次IP白名單&#xff0c;因此需要簡化流程&#xff0c;通過nginx反向代理只配置1次IP白名單。 現在通過docker容器模擬環境&#xff0c;準備1臺云服務器。…

C 語言分支與循環

目錄 一. 分支結構&#xff1a;if 語句與 switch 語句 1. if 語句 2. switch 語句 二、關系操作符、條件操作符與邏輯操作符 1. 關系操作符 2. 條件操作符 3. 邏輯操作符 三、循環結構&#xff1a;while 循環、for 循環與 do - while 循環 1. while 循環 2. for 循…

【一文看懂Spring Boot2.x升級Spring Boot3.x】springboot2.x升級springboot3.x

springboot2.x升級springboot3.x 背景升級jdk版本為17以上springboot版本修改javax包更新mybatis-plus升級swagger升級springdocspringdoc配置背景 當前項目是springboot2.5.9版本的springboot+mybatis-plus項目,需要升級到springboot3.5.0項目。 升級jdk版本為17以上 Spri…

陽臺光伏防逆流電表革新者:安科瑞ADL200N-CT/D16-WF

——為家庭能源管理提供高精度、智能化解決方案 一、陽臺光伏爆發的背景 在全球能源轉型與碳中和目標的驅動下&#xff0c;陽臺光伏正以革命性姿態重塑家庭能源消費模式。從歐洲的“微型發電站”到中國的“萬億藍海”&#xff0c;這一創新技術不僅撬動了能源市場的結構性變革…

美團完整面經

面試崗位 面試的崗位 - 2025春季校招 【轉正實習】軟件服務工程師-后端方向&#xff08;成都 - 軟硬件服務-SaaS事業部&#xff09; 一面&#xff08;業務初試 - 30min&#xff09; 問題 自我介紹 Java基礎 HashMap底層用的數據結構是什么&#xff1f;是線程安全的嗎&…

pysnmp 操作流程和模塊交互關系的可視化總結

1. SNMP GET 操作序列圖 #mermaid-svg-KALvv8WkHJTsNCeu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KALvv8WkHJTsNCeu .error-icon{fill:#552222;}#mermaid-svg-KALvv8WkHJTsNCeu .error-text{fill:#552222;str…

關于 /proc/net/tcp 與 /proc/$pid/net/tcp 的關系分析

關于 /proc/net/tcp 與 /proc/$pid/net/tcp 的關系分析 1. 基礎概念 在 Linux 系統中&#xff0c;每個進程必定歸屬于一個且僅一個網絡命名空間&#xff08;Network Namespace&#xff09;。這是 Linux 命名空間隔離機制的核心特性之一。 /proc/net/tcp 顯示當前網絡命名空間…

微信小程序 - 保存手機號等信息到通訊錄

主要使用小程序 wx.addPhoneContact 這個api 一、界面 <view class"tab-item" bindtap"addToPhoneContacts">保存</view> 二、js 邏輯文件中 addToPhoneContacts() {wx.addPhoneContact({firstName: this.data.firstName, // 姓名mobilePh…

計算機視覺一些定義解析

1.GCT&#xff08;Gated Channel Transformation&#xff09; 定義 GCT&#xff08;Gated Channel Transformation&#xff09;是一種用于增強卷積神經網絡特征提取能力的模塊。它的核心思想是通過門控機制對特征圖的通道進行動態調整&#xff0c;從而突出對任務更有幫助的特…

美團NoCode的Database 使用指南

系列文章目錄 第一篇&#xff1a;美團NoCode設計網站的嘗試經驗分 第二篇&#xff1a;美團NoCode中的Dev Mode 使用指南 文章目錄 系列文章目錄Database 適用場景一、什么是 Database&#xff1f;二、準備流程1. 申請賬號 三、使用流程1.申請資源的同時可搭建 NoCode 頁面&…

MVC 數據庫

MVC 數據庫 引言 在軟件開發領域,Model-View-Controller(MVC)是一種流行的軟件架構模式,它將應用程序分為三個核心組件:模型(Model)、視圖(View)和控制器(Controller)。這種模式有助于提高代碼的可維護性和可擴展性。本文將深入探討MVC架構與數據庫之間的關系,以…

1.11 HTTP 文件上傳的核心協議

HTTP 文件上傳是 Web 開發中的常見需求&#xff0c;涉及到特殊的請求格式和處理機制。 一、HTTP 文件上傳的核心協議 1. 兩種主要方式 multipart/form-data&#xff08;主流&#xff09; 支持二進制文件和表單字段混合傳輸&#xff0c;由 Content-Type 頭部標識。applicatio…

安裝 Poppler(Windows)

下載 Poppler&#xff08;Windows&#xff09;&#xff1a;https://github.com/oschwartz10612/poppler-windows/releases/ 解壓在自己目錄下 配置系統環境變量&#xff1a;把 poppler-xx.x.x\bin 目錄加入你的環境變量 PATH 中。 檢查是否配置成功 pdfinfo

Java學習筆記之:初識nginx

Java學習筆記之&#xff1a;初識nginx PS&#xff1a;雖然總結的都很簡單&#xff0c;但是作為初學者并且本人記憶力較差所以每次學習新知識點后習慣性記錄下來&#xff0c;這樣加深一遍記憶并且便于日后復習。 介紹&#xff1a; Nginx是一款輕量級的Web服務器/反向代理服務器…

Middleware

中間件的定義&#xff1a;中間件是位于操作系統和應用程序之間的軟件層&#xff0c;用于解決分布式系統中通信、數據共享、資源管理等共性問題。消息隊列屬于通信中間件&#xff0c;用于在分布式系統中傳遞消息&#xff0c;實現應用解耦、異步通信和流量削峰。解耦系統&#xf…

Mac如何配置ZSH并使用Oh-my-zsh?讓你的終端更加實用、美觀

前言 現在&#xff0c;越來越多的人趨向使用ZSH取代(Linux)原本的Bash作為自己的終端Shell。的確&#xff0c;ZSH才是適用于現代的Shell&#xff1a; 更豐富的命令提示更鮮明的演示標記更強大的插件支持 什么是ZSH 回答什么是ZSH前&#xff0c;我們先解釋什么是Bash&#x…