纯python无扫描lr/glr解析器
parglare的Python项目详细描述
纯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进行测试
学分
这个包的初始布局/内容是用Cookiecutter和 audreyr/cookiecutter-pypackage项目模板。