基于ometa的模式匹配语言

PyMeta的Python项目详细描述


摘要

PyMeta是面向对象模式匹配OMeta的实现 Alessandro Warth开发的语言 (http://www.cs.ucla.edu/~awarth/ometa/)。PyMeta提供了一个基于紧凑语法的 解析表达式文法(PEGS),用于常见的词法分析和句法分析 以一种易于为python推理的方式对活动进行树转换 程序员

工作原理

PyMeta将语法编译为Python类,规则作为方法这个 规则指定解析表达式,如果 他们成功地配对了

基本语法

foo ::= ....
定义名为foo的规则。
expr1 expr2
匹配expr1,如果成功则匹配expr2,返回 表达式2。就像Python的and
expr1 | expr2
尝试匹配expr1-如果失败,请改为匹配expr2。像Python一样 or.
expr*
匹配表达式零次或多次,返回匹配列表。
expr+
匹配表达式一次或多次,返回匹配列表。
expr?
尝试匹配expr。如果不匹配,则返回“无”。
~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]

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

推荐PyPI第三方库


热门话题
java如何创建比较器   java将所有接口读入列表   java Android Studio在Webview中隐藏特定URL的操作栏   java如何在春季从云存储中生成URL文件而无需持续时间   icalendar如何使用Java以日历格式发送ics电子邮件附件?   如果textfield包含数字,则在运行时进行java检查   java util日志属性中何时需要“.level”?   java在一个字符串中显示json   跨平台日志系统的java Log4j替代方案   coldfusion在Lucee上安装Cassandra Java驱动程序   SpringWebMVC4Java配置不工作   windows使用java程序添加环境变量,并且能够在我从计算机打开“环境”选项卡时看到   java未设置变量和方法   mysql在java中通过查询更改数据库的现有行   java如何使用递归方法查找所有可能的数字   java如何使非原语类成员不可变   java将信息从输入按钮传递到标签