纯python无扫描lr/glr解析器

parglare的Python项目详细描述


https://raw.githubusercontent.com/igordejanovic/parglare/master/docs/images/parglare-logo.png

build-statuscoveragedocsstatuslicensepython-versions

纯python无扫描lr/glr解析器。

有关详细信息,请参见the docs

快速介绍

这只是一个很小的例子来说明这个问题。这个例子展示了如何 使用5个不同优先级和 关联性。使用语义/归约操作进行计算。

整个表达式求值器在不到30行的代码中完成!

fromparglareimportParser,Grammargrammar=r"""
E: E '+' E  {left, 1}
 | E '-' E  {left, 1}
 | E '*' E  {left, 2}
 | E '/' E  {left, 2}
 | E '^' E  {right, 3}
 | '(' E ')'
 | number;

terminals
number: /\d+(\.\d+)?/;
"""actions={"E":[lambda_,nodes:nodes[0]+nodes[2],lambda_,nodes:nodes[0]-nodes[2],lambda_,nodes:nodes[0]*nodes[2],lambda_,nodes:nodes[0]/nodes[2],lambda_,nodes:nodes[0]**nodes[2],lambda_,nodes:nodes[1],lambda_,nodes:nodes[0]],"number":lambda_,value:float(value),}g=Grammar.from_string(grammar)parser=Parser(g,debug=True,actions=actions)result=parser.parse("34 + 4.6 / 2 * 4^2^2 + 78")print("Result = ",result)# Output# -- Debugging/tracing output with detailed info about grammar, productions,# -- terminals and nonterminals, DFA states, parsing progress,# -- and at the end of the output:# Result = 700.8

安装

  • 稳定版本:
$ pip install parglare
  • 开发版本:
$ git clone git@github.com:igordejanovic/parglare.git
$ pip install -e parglare

许可证

麻省理工学院

python版本

使用2.7、3.4-3.7进行测试

学分

这个包的初始布局/内容是用Cookiecutteraudreyr/cookiecutter-pypackage项目模板。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish