Parlot .NET 解析器组合器开源项目

我要开发同款
白开水不加糖2021年10月21日
208阅读

技术信息

开源地址
https://github.com/sebastienros/parlot
授权协议
BSD-3-Clause

作品详情

Parlot是一个快速、轻量级和简单易用的.NET解析器组合器。Parlot提供了一个基于解析器组合器的fluetAPI,提供了一个更可读的语法定义。

与所有其他已知的.NET解析器组合器相比,Parlot速度更快,分配更少。

FluetAPI提供了简单的分析器组合器,这些组合器可以用来表达更复杂的表达式。这个API的主要目标是提供和易于阅读的语法。另一个优点是,语法是在运行时建立的,而且可以动态地扩展。

示例(源码):

publicstaticreadolyParser<Expressio>Expressio;staticFluetParser(){/**Grammar:*expressio=>factor(("-"|"+")factor)*;*factor=>uary(("/"|"*")uary)*;*uary=>("-")uary*|primary;*primary=>NUMBER*|"("expressio")";*///TheDeferredhelpercreatesaparserthatcabereferecedbyothersbeforeitisdefiedvarexpressio=Deferred<Expressio>();varumber=Terms.Decimal().The<Expressio>(staticd=>ewNumber(d));vardivided=Terms.Char('/');vartimes=Terms.Char('*');varmius=Terms.Char('-');varplus=Terms.Char('+');varopePare=Terms.Char('(');varclosePare=Terms.Char(')');//"("expressio")"vargroupExpressio=Betwee(opePare,expressio,closePare);//primary=>NUMBER|"("expressio")";varprimary=umber.Or(groupExpressio);//TheRecursivehelperallowstocreateparsersthatdepedothemselves.//("-")uary|primary;varuary=Recursive<Expressio>((u)=>mius.Ad(u).The<Expressio>(staticx=>ewNegateExpressio(x.Item2)).Or(primary));//factor=>uary(("/"|"*")uary)*;varfactor=uary.Ad(ZeroOrMay(divided.Or(times).Ad(uary))).The(staticx=>{//uaryvarresult=x.Item1;//(("/"|"*")uary)*foreach(varopix.Item2){result=op.Item1switch{'/'=>ewDivisio(result,op.Item2),'*'=>ewMultiplicatio(result,op.Item2),_=>ull};}returresult;});//expressio=>factor(("-"|"+")factor)*;expressio.Parser=factor.Ad(ZeroOrMay(plus.Or(mius).Ad(factor))).The(staticx=>{//factorvarresult=x.Item1;//(("-"|"+")factor)*foreach(varopix.Item2){result=op.Item1switch{'+'=>ewAdditio(result,op.Item2),'-'=>ewSubtractio(result,op.Item2),_=>ull};}returresult;});Expressio=expressio;}

功能介绍

Parlot 是一个快速、轻量级和简单易用的 .NET 解析器组合器。Parlot 提供了一个基于解析器组合器的 fluent API,提供了一个更可读的语法定义。 与所有其他已知的 .NET ...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论