麻雀规则解析器

规则解析器

上一篇讲的规则设计器的成果只是JSON数据,具体的规则执行则由不同的解析器来执行和编译。

目前市场上的规则引擎很多。但其实大部分都是表达式引擎,相当于对动态表达式进行编译和解析

Java语言的有:Drools(业界有名)、Janino、QL、Mvel、Juel、Fel、Aviator 、URule

Python语言有:rule-engine

Go语言有:gengine (B站出品)、rulego

当然上述的产品中,有些不止表达式引擎这么简单,还包含了决策树、执行器等。

大家可以根据规则生成的器结果自行去翻译成对应规则引擎的脚本。

翻译和解析器

目前我这边已经完成了两个引擎:JS和Aviator的脚本执行器 。欢迎Pr其它语言的执行器,代码请推送到这个文件夹下rule-parser

1、TS/JS执行器

Js是前端的执行器,可以用于前端的各个规则判断,当然也可以放在NodeJs后端执行,改为require引入。

https://github.com/4color/maque-rule/tree/main/rule-parser/rule-parser-ts

浏览器引用

代码是用Ts编写,编译成了js类,所以js可以直接调用


<script src="https://unpkg.com/rule-parser-ts/dist/rule-parser.umd.cjs"></script>
<!-- 引入jquery -->
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>var module = window.RuleParser;var data =  $.parseJSON($.ajax({url: "src/json/simple.json",//json文件位置,文件名dataType: "json", //返回数据格式为jsonasync: false}).responseText);document.write("测试结果:" + module.Parser(data))
</script>

NPM包引入

npm i rule-parser-ts
import {Parser} from "rule-parser-ts/dist/rule-parser.js"
import simple from "./simple.json"let dsData = {gdxm: {id: 2}} as any
let result = Parser(simple, dsData)

2、Aviator

引入Maven坐标

  <dependency><groupId>cloud.maque.rule</groupId><artifactId>rule-parser-aviator</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

调用

simple.json 就是规则设计器的产出物

List<Rule> rules = new ArrayList<>();try {File file = ResourceUtils.getFile("classpath:simple.json");BufferedReader reader = new BufferedReader(new FileReader(file));StringBuilder sb = new StringBuilder();String line;while ((line = reader.readLine()) != null) {sb.append(line).append("\n");}reader.close();rules = JSONObject.parseArray(sb.toString(), Rule.class);} catch (Exception ex) {}Boolean result = ruleParser.Parser(rules);System.out.println(result);

上面没有传递数据集,如果要传入数据集,则调用重载参数即可。

一些自定义的函数,需要在初始化时载入,这块内容请参考Aviator的函数部分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【程序员】程序员的护城河:技术、创新还是沟通?

在IT行业&#xff0c;我们深知程序员在保障系统安全、数据防护以及网络稳定方面的重要作用。他们是我们现代社会的护城河&#xff0c;用代码构筑着我们的未来。但是&#xff0c;程序员的护城河又是什么呢&#xff1f;是技术能力的深度&#xff1f;是对创新的追求&#xff1f;还…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先&#xff0c;你将在整个文档中看到这些术语的使用情况。以下是一个快速参考&#xff1a; 树&#xff08;Tree&#xff09;&#xff1a;用于可…

2023-12-18 C语言实现一个最简陋的B-Tree

点击 <C 语言编程核心突破> 快速C语言入门 C语言实现一个最简陋的B-Tree 前言要解决问题:想到的思路:其它的补充: 一、C语言B-Tree基本架构: 二、可视化总结 前言 要解决问题: 实现一个最简陋的B-Tree, 研究B-Tree的性质. 对于B树, 我是心向往之, 因为他是数据库的基…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程&#xff1a; 1、项目经理分配模块开发任务给开发人员&#xff08;项目经理-开发&#xff09; 2、每个模块单独开发完毕&#xff08;开发&#xff09;&#xff0c;单元测试&#xff08;测试&#xff09; 3、开发完毕后&#xff0c;集成部…

3A服务器 (hcia)

原理 认证&#xff1a;验证用户是否可以获得网络访问权。 授权&#xff1a;授权用户可以使用哪些服务。 计费&#xff1a;记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom&#xff08;认证服务器名字&#xf…

2024 年 8 个顶级开源 LLM(大语言模型)

如果没有所谓的大型语言模型&#xff08;LLM&#xff09;&#xff0c;当前的生成式人工智能革命就不可能实现。LLM 基于 transformers&#xff08;一种强大的神经架构&#xff09;是用于建模和处理人类语言的 AI 系统。它们之所以被称为“大”&#xff0c;是因为它们有数亿甚至…

iPhone手机开启地震预警功能

iPhone手机开启地震预警功能 地震预警告警开启方式 地震预警 版权&#xff1a;成都高新减灾研究所 告警开启方式

CSS浮动

前置传统网页布局的三种方式&#xff1a; 标准流&#xff08;普通流/文档流&#xff09;&#xff1a; 浮动流&#xff1a; 定位流&#xff1a; 浮动: 实现元素在一行中向哪个方向排列 浮动后的元素还是可以设置边距的。 float默认是不会继承&#xff0c;但是可以强制设置flo…

ESP32WiFi(Blinker)-室内舒适度检测装置

一、硬件 ESP32 白色LED DHT11温湿度传感器 有源蜂鸣器 USB转串口&#xff08;只用到VCC,GND&#xff09; 面包板 二、软件 Arduino IDE版ESP32开发板 Blinker,apk 三、电路连接 const int LED18; LED控制管脚 const int BUZ2; 有源蜂鸣器VCC管脚 #define DHTPIN…

使用Matlab实现声音信号处理

利用Matlab软件对声音信号进行读取、放音、存储 先去下载一个声音文件&#xff1b;使用这个代码即可 clear; clc; [y, Fs] audioread(xxx.wav); plot(y); y y(:, 1); spectrogram(y); sound(y, Fs); % player audioplayer(y, Fs);y1 diff(y(:, 1)); subplot(2, 1, 1); pl…

美国第二大互联网供应商泄露3600万用户数据

12月18日&#xff0c;美国第二大互联网服务供应商Xfinity 透露&#xff0c;10月份发生的一起网络攻击泄露了多达3600万用户的敏感数据。 Xfinity由康卡斯特公司所属&#xff0c;为美国用户提供宽带互联网和有线电视等服务。 该公司表示&#xff0c;攻击是受Citrix Bleed的 CVE…

vue3挂载全局方法

比如某个js方法&#xff0c;项目很多地方都能用到&#xff0c;每次去重新写一遍太麻烦&#xff0c;放在一个js里面&#xff0c;每次去引入也懒得引&#xff0c;就可以挂载在全局上 1.创建tool.js文件&#xff0c;里面放常用的方法 const tools {getCurrentTim(){const curre…

基于PHP的蛋糕购物商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…

08.queue 容器

8、queue 容器 概念&#xff1a; Queue 是一种先进先出&#xff08;First In First Out&#xff0c;FIFO&#xff09;的数据结构&#xff0c;他有两个出口 队列容器允许从一端新增元素&#xff0c;从另一端移除元素队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列…

Oracle:JDBC链接Oracle的DEMO

1、引入jar包&#xff1a; 2、DEMO&#xff1a; package jdbc;import java.sql.*;public class OracleConnectionExample {public static void main(String[] args) throws SQLException {Connection conn null;PreparedStatement statement null;try {// Register JDBC dri…

基于Hadoop的农产品价格信息检测分析系统

基于Hadoop的农产品价格信息检测分析系统 前言数据处理模块1. 数据爬取2. 数据清洗与处理3. 数据存储 数据分析与检测模块1. 农产品价格趋势分析2. 农产品价格检索3. 不同市场价格对比 创新点 前言 为了更好地了解农产品市场价格趋势和不同市场之间的价格差异&#xff0c;我设…

Leetcode—151.反转字符串中的单词【中等】

2023每日刷题&#xff08;六十五&#xff09; Leetcode—151.反转字符串中的单词 实现代码 class Solution { public:string reverseWords(string s) {stringstream strs(s);string word;vector<string> res;while(strs >> word) {res.push_back(word);}reverse(…

springboot集成邮件发送的使用示例

springboot集成邮件发送的使用示例 步骤概述1. 引入依赖2. 配置邮件发送3. 发送简单邮件4. 发送 HTML 邮件5. 发送带附件的邮件6. 定时邮件发送 使用 Spring Boot 发送邮件时&#xff0c;通常的应用场景包括用户注册、密码重置和各种验证流程。这里我将展示一个以验证码发送为例…

Labview Vision 机器视觉使用,从下载程序安装应用,到实战找硬币并输出值

1.前言 大家好,今天我要和机器人一起配合来打算 做机器视觉 用Labview 和 Vision 联动实现机器的视觉 2.下载软件-软件的安装 我们除了基础款的labview软件 还要安装视觉四件套 1.Labview 编程平台&#xff08;我是 2023 q3&#xff09; 2. NI - IMAQdx &#xff08;驱动软…

为什么uboot/pmon会随机修改开发板的mac地址

U-Boot&#xff08;Universal Boot Loader&#xff09;在某些情况下可能会随机生成MAC地址&#xff0c;这主要是出于以下原因&#xff1a; 安全考虑&#xff1a; 为了增加设备的安全性&#xff0c;防止恶意用户通过MAC地址追踪或识别特定的设备&#xff0c;U-Boot可能会在每次…