ply的助手函数(python lex和yacc)
easypl的Python项目详细描述
简介
easyply是ply的助手库,python的解析器生成器。它 充当语法定义和ply之间的中间件。
什么东西这么吸引人?ply支持相当粗糙的解析器 定义;很容易添加一些ebnf-y的味道。简单是纯粹的 日常工作中的助手-你一定要先了解ply 为了使用这个库。
糖果
冒号周围没有强制空格
def px_rule(): "production: SYMBOL
命名参数
而不是变异和读取神秘的p参数, easyply使用命名参数和返回值。所以:
def px_rule(id): "production: {ID} ... return retval
相当于:
def p_rule(p): "production : ID" id = p[1] ... p[0] = retval
您还可以对参数使用自定义名称,如下所示:
def px_rule(foo): "production: {ID:foo}"
如果未提供自定义名称,则 用这个词。
可选符号
而不是创建多个相似的规则,只差几个符号, 您可以使用?symbol将它们合并为一个。注意:
def px_rule(): "production: symbol1 symbol2? symbol3" ...
给定此代码,easyply将生成两个函数 相同的代码和以下规则:
- ^{tt3}$
- ^{tt4}$
与命名参数(请注意括号)结合使用时,这一功能尤其强大:
def px_list(expression, list = ()): "list: ({list} COMMA)? {expression}" return list + expression
很好,不是吗?
或运算符
此外,easyply还提供或运营商快速分组类似案例:
def px_expression(): """ expression: LPAREN expression RPAREN | NUMBER | REAL """ ...
or运算符也可以内联使用:
def px_list(expresion, list = ()): "list: ({list} (COMMA|SEMICOLON))? {expresson}" ...
注意,或在所有运算符中优先级最低,因此 圆括号。
安装
pip install easyply
用法
基本用法很简单:给所有简单规则加上前缀,除了p_error, 使用px_前缀(而不是通常的p_)和 在创建ply解析器之前调用easyply.process_all(globals())。 参数可以是任何映射或带有解析器的类 函数-process\u all将改变参数并添加适当的 帘布层规则。如果需要更细粒度的控制,请参阅 源头本身。
许可证
这个图书馆是根据麻省理工学院的许可证授权的。
版权所有©2011,作者:Mike Hordecki
兹免费准许任何人取得副本 本软件和相关文档文件(“软件”)的 在软件中不受限制,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或出售 软件的副本,并允许软件的用户 在满足以下条件的情况下,可以这样做:
上述版权公告及本许可公告须包括在 软件的所有副本或大部分。
本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合特定目的和不侵权。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与软件、使用或其他交易有关 软件。