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

我要开发同款
白开水不加糖2021年10月21日
103阅读
开发技术C#
所属分类.NET开发工具、开发工具
授权协议BSD-3-Clause

作品详情

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

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

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

示例(源码):

publicstaticreadonlyParser<Expression>Expression;staticFluentParser(){/**Grammar:*expression=>factor(("-"|"+")factor)*;*factor=>unary(("/"|"*")unary)*;*unary=>("-")unary*|primary;*primary=>NUMBER*|"("expression")";*///TheDeferredhelpercreatesaparserthatcanbereferencedbyothersbeforeitisdefinedvarexpression=Deferred<Expression>();varnumber=Terms.Decimal().Then<Expression>(staticd=>newNumber(d));vardivided=Terms.Char('/');vartimes=Terms.Char('*');varminus=Terms.Char('-');varplus=Terms.Char('+');varopenParen=Terms.Char('(');varcloseParen=Terms.Char(')');//"("expression")"vargroupExpression=Between(openParen,expression,closeParen);//primary=>NUMBER|"("expression")";varprimary=number.Or(groupExpression);//TheRecursivehelperallowstocreateparsersthatdependonthemselves.//("-")unary|primary;varunary=Recursive<Expression>((u)=>minus.And(u).Then<Expression>(staticx=>newNegateExpression(x.Item2)).Or(primary));//factor=>unary(("/"|"*")unary)*;varfactor=unary.And(ZeroOrMany(divided.Or(times).And(unary))).Then(staticx=>{//unaryvarresult=x.Item1;//(("/"|"*")unary)*foreach(varopinx.Item2){result=op.Item1switch{'/'=>newDivision(result,op.Item2),'*'=>newMultiplication(result,op.Item2),_=>null};}returnresult;});//expression=>factor(("-"|"+")factor)*;expression.Parser=factor.And(ZeroOrMany(plus.Or(minus).And(factor))).Then(staticx=>{//factorvarresult=x.Item1;//(("-"|"+")factor)*foreach(varopinx.Item2){result=op.Item1switch{'+'=>newAddition(result,op.Item2),'-'=>newSubtraction(result,op.Item2),_=>null};}returnresult;});Expression=expression;}
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论