用于编辑语法的实用程序包(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
以获取示例使用