基于OMeta的模式匹配语言
项目描述
摘要
PyMeta是OMeta的一个实现,由Alessandro Warth开发(http://www.cs.ucla.edu/~awarth/ometa/)的一个面向对象模式匹配语言。PyMeta提供了一个紧凑的语法,基于解析表达式文法(PEGs),用于Python程序员在常见词法、解析和树转换活动中的推理。
工作原理
PyMeta将语法编译为一个Python类,规则作为方法。规则指定解析表达式,如果成功匹配,则消费输入并返回值。
基本语法
- foo ::= ....
定义一个名为foo的规则。
- expr1 expr2
匹配expr1,然后如果成功,匹配expr2,返回expr2的值。类似于Python的and。
- expr1 | expr2
尝试匹配expr1——如果失败,则匹配expr2。类似于Python的or。
- expr*
匹配expr零次或多次,返回匹配列表。
- expr+
匹配expr一次或多次,返回匹配列表。
- expr?
尝试匹配expr。如果失败,则返回None。
- ~expr
如果输入中的下一个项匹配expr,则失败。
- <ruleName>
调用规则ruleName。
- 'x'
匹配字面字符‘x’。
- expr:name
将expr的结果绑定到本地变量name。
- => pythonExpression
评估给定的Python表达式并返回其结果。
支持与Python注释相同的注释,以#开头,延伸到行尾。
接口
定义新语法的起点是 pymeta.grammar.OMeta.makeGrammar,它接受一个语法定义以及其嵌入表达式的变量绑定字典,并生成一个Python类。语法可以像通常一样进行子类化,并且可以在这些类上调用makeGrammar来覆盖规则并添加新的规则。要调用语法规则,请使用语法对象的名字调用 grammarObject.apply()。
示例用法
>>> from pymeta.grammar import OMeta >>> exampleGrammar = """ ones ::= '1' '1' => 1 twos ::= '2' '2' => 2 stuff ::= (<ones> | <twos>)+ """ >>> Example = OMeta.makeGrammar(exampleGrammar, {}) >>> g = Example("11221111") >>> result, error = g.apply("stuff") >>> result [1, 2, 1, 1]
项目详情
关闭
PyMeta-0.5.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e647e739d1aa8b32958d6922af69dabe117bc8b369201deb1e51adb9a6cb9b9b |
|
MD5 | f7c9cf93ef0c2a9d273f90563f9a0cfd |
|
BLAKE2b-256 | ac8e677557793fada7e75f97a098bede3a606e57668e1ded2faba3b83d4716fb |