首页 > 编程语言 >Superpower:一个基于 C# 的文本解析工具开源项目

Superpower:一个基于 C# 的文本解析工具开源项目

时间:2024-12-17 14:03:41浏览次数:5  
标签:解析器 C# token 开源 https var 解析 Superpower

推荐一个文本解析开源工具:Superpower,方便我们解析文本,比如解析日志文件、构建自己的编程语言还是其他需要精确解析和错误报告的场景。

01 项目简介

Superpower 的核心功能是将字符序列作为输入,并生成一个数据结构,以便程序更容易分析、操作或转换。这可以是简单的数字、数据格式中的字段列表,或者是某种编程语言的抽象语法树。

Superpower 允许以声明式风格编写解析器,并在遇到无效输入时提供精确和信息丰富的错误报告。

Superpower 在构建时特别注重性能。通过减少回溯、避免分配和间接调度,从而用于极高的性能。

02 使用方法

1、安装依赖

dotnet add package Superpower

2、解析连续大写 ‘A’ 字符的简单文本解析器

var parseA = Character.EqualTo('A').AtLeastOnce();

3、构建复杂的解析器

//解析器:由一个字母开头,后面可以跟任意数量的字母、数字或下划线
TextParser<string> identifier =
    // 使用LINQ查询表达式来构建解析器
    from first in Character.Letter  // 第一个字符必须是字母。
    // 后续字符可以是字母、数字或下划线,且可以出现多次(Many()表示0次或多次)。
    from rest in Character.LetterOrDigit.Or(Character.EqualTo('_')).Many()
    // 将第一个字符和后续字符组合成一个字符串。
    select first + new string(rest);

// 使用上面定义的identifier解析器来解析字符串"abc123"。
var id = identifier.Parse("abc123");

//验证解析结果是否与预期值"abc123"相等
Assert.Equal("abc123", id);

4、除了逐个字符使用输入字符的文本解析器外,Superpower还支持令牌解析器。

// 一个简单的算术表达式:"1 * (2 + 3)"。
var expression = "1 * (2 + 3)";

// 1. 使用一个算术表达式分词器(ArithmeticExpressionTokenizer)来分词。

var tokenizer = new ArithmeticExpressionTokenizer();
var tokenList = tokenizer.Tokenize(expression); // 分词后,tokenList将包含表达式中的各个token。

// 2. 使用一个算术表达式解析器(ArithmeticExpressionParser)来解析分词后的token列表。
var parser = ArithmeticExpressionParser.Lambda; // parser built with combinators
var expressionTree = parser.Parse(tokenList); // 解析后,expressionTree将是一个表示表达式的AST。

// 使用解析结果(即AST)
// Compile方法可能是一个将AST转换为一个可执行函数(或委托)的方法。
// 这个函数接受没有参数并返回表达式的结果。
var eval = expressionTree.Compile();

5、遇到无效输入时提供精确和信息丰富的错误报告

ArithmeticExpressionParser.Lambda.Parse(
    // 对字符串"1 + * 3"进行分词,得到一个token序列。
    // 这个序列应该包含数字1的token、加号(+)的token、星号(*)的token和数字3的token。
    new ArithmeticExpressionTokenizer().Tokenize("1 + * 3")
);

// 解析器在解析过程中遇到了一个语法错误,并报告了错误信息。
// -> Syntax error (line 1, column 5): unexpected operator `*`, expected expression.

03 项目示例与应用

Superpower 提供了多个示例,包括 JSON 解析器、ISO-8601 日期时间解析器等。

具体见:https://github.com/datalust/superpower/tree/dev/sample

另外****Superpower被用于多个实际项目中,例如:

Serilog.Expressions,日志事件解析扩展:

https://github.com/serilog/serilog-expressions

seqcli,纯文本日志解析:

https://github.com/datalust/seqcli

PromQL.Parser,Prometheus查询语言的解析器:

https://github.com/djluck/PromQL.Parser

04 项目地址

https://github.com/datalust/superpower

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

我是编程乐趣,一个.Net开发经验老程序员,欢迎“关注”我,每天为你分享开源项目和编程知识。
也欢迎加入【.Net技术编程交流社区】,和大家共同学习交流!,
点击加入https://bbs.csdn.net/topics/613465368

- End -

推荐阅读

2个零基础入门框架教程!

推荐一个Star超过2K的.Net轻量级的CMS开源项目

Pidgin:一个轻量级、快速且灵活的 C# 解析库

Atata:一个基于 Selenium的C#自动化测试Web框架

mongo-csharp-driver:MongoDB官方的C#客户端驱动程序!

标签:解析器,C#,token,开源,https,var,解析,Superpower
From: https://blog.csdn.net/daremeself/article/details/144533754

相关文章

  • 私有化部署视频平台EasyCVR解决了网页端实时播放RTSP视频流的局限性
    在当今数字化时代,视频监控系统已成为安全保障的重要组成部分。然而,对于希望在网页端实现视频监控流媒体播放的用户来说,RTSP协议的兼容性问题常常成为一个难题。RTSP是一种网络控制协议,常用于流媒体数据的传输,但它并不被HTML5Video元素直接支持。幸运的是,随着技术的发展,我们已经有......
  • centos8 升级 python3.10
    想要将Python3版本从已有的3.6.8升级到3.10,直接dnf安装发现找不到安装包,只能从源代码手动安装,以下是详细步骤:1.安装必要的依赖编译Python3.10需要一些开发工具和库:sudodnfgroupinstall"DevelopmentTools"-ysudodnfinstall-ygccopenssl-develbzip2-devellibffi......
  • PCIe扫盲——PCIe总线体系结构入门
    和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层、事务层(TransactionLayer)、数据链路层(DataLinkLayer)和物理层(PhysicalLayer)。其中,应用层并不是PCIeSpec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是PCIeSpec明确规范的,并要求设计者严格遵循的。......
  • 【采购订单管理系统】 后端服务设计对Spring Cloud的理解是什么?如何确保服务间的通信
    本人详解作者:王文峰,参加过CSDN2020年度博客之星,《Java王大师王天师》公众号:JAVA开发王大师,专注于天道酬勤的Java开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯山峯转载说明:务必注明来源(注明:作者:王文峰哦)【采购订单管......
  • Fleck:一个轻量级的C#开源WebSocket服务端库
    推荐一个简单易用、轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发。01项目简介Fleck是一个用C#编写的轻量级WebSocket服务器库。它提供了一个简单而直观的API,使得开发者可以轻松地在他们的应用程序中集成WebSocket功能,比如一些常见的实时通信应用,在......
  • 【实用指南】Zabbix服务器性能警告分析与解决方案:Zabbix server: Utilization of icmp
    前言:在监控系统的日常运维中,Zabbix作为一个强大的开源监控工具,帮助我们实时监控网络和应用状态。然而,当Zabbix服务器性能出现警告时,如icmppinger进程利用率过高,这可能会影响监控数据的准确性和及时性。本文将为您提供一个详细的分析和解决方案,帮助您快速定位问题并解决Zabbix服务......
  • Rocky 8 初始化环境变量 shell 脚本
            随着CentOS7在2024年6月30日停止技术服务支持,很多采用CentOS7的操作系统开始选择其它可替代操作系统,目前很多企业考虑使用Rocky操作系统作为CentOS的替代品。    日常在安装数据库和应用时,通常会对操作系统上的防火墙、时间同步进行......
  • 深入聊聊async&Promise
    正文最近在学习JavaScript里的async、await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下。从Example说起constcreateImg=function(path){returnnewPromise((resolve,reject)=>{constimg=docu......
  • 要在 C# 6.0 中连接 PostgreSQL 数据库
    要在C#6.0中连接PostgreSQL数据库,你可以使用Npgsql库。Npgsql是一个开源的.NET数据提供程序,专门用于与PostgreSQL数据库进行交互。以下是详细步骤和示例代码,帮助你在C#6.0项目中连接和操作PostgreSQL数据库。步骤1:安装Npgsql包首先,你需要在你的C#项......
  • NoHttpResponseException异常分析和优化实践
    NoHttpResponseException异常分析和优化实践在使用HttpClient进行网络请求时,如果服务器端没有响应,可能会抛出NoHttpResponseException异常。该异常表明服务器端没有及时响应,导致客户端无法获取到服务器端的响应。在实际开发中,我们通常会遇到两种情况:服务器端没有正常响应,导致......