用于编辑语法的实用程序包(cfg、pda等)

gramutil的Python项目详细描述


格拉穆蒂尔

gramutil是计算机科学中语法的一个实用工具。目前,支持上下文无关文法(cfg)和下推自动机(pda)。

安装

pip install gramutil

概述

上下文自由语法

这个类为上下文无关语法提供初始化和方法。常见操作如下:

fromgramutilimportcfggrammarString="""S -> 0 S 0 | TT -> 1 T 1  -> $"""# Create the grammar from the stringgrammar=cfg.ContextFreeGrammar(grammarString)# Simplify the grammar (simplifies using basic rules)grammar.simplify()# Removes any duplicate productions from any stategrammar.removeDuplicates()# Converts the grammar to a pushdown automata objectpda=grammar.toPDA()# Prints a textual representation of the grammarprint(grammar)

语法字符串的规则如下:

  • 开始状态必须是S
  • 一个状态的多个产品可以用|字符分隔
  • 一个状态的多个产品也可以在多行上,如上图所示
  • epsilon(空字符串)字符用$
  • 表示。
  • 终端可以是下划线或小写字母数字
  • 非终结符具有相同的规则,但必须以大写字符开头,并且始终允许大写
  • 所有术语(端子和非端子)必须用空格分隔

下推自动机

这个类为下推自动机提供初始化和方法。目前,只支持通过ContextFreeGrammar创建。

fromgramutilimportcfggrammar=cfg.ContextFreeGrammar('S -> 0 S 0 | $')# Two options for creating the PDApda=cfg.PushdownAutomata(grammar)pda=grammar.toPDA()# Prints a textual representation of the PDAprint(pda)# Converts the PDA back to a CFGgrammar=pda.toCFG()grammar.simplify()print(grammar)

示例

查看examples/convert.py以获取示例使用

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像