Mathematica解析器和转换器

FoxySheep的Python项目详细描述


https://travis-ci.org/rocky/FoxySheep2.svg?branch=master

这是robertjacobson的Python实现的FoxySheep解析器和lexer for Mathematica。它已经被剥离和重组了一点。在

示例

安装后,命令行转换器称为foxy-sheep 它可以将Mathematica InputForm转换为 Mathematica FullForm没有 安装Mathematica:以交互方式运行代码:

$ foxy-sheep
Enter a Mathematica expression. Enter either an empty line, Ctrl-C, or Ctrl-D to exit.
In[1]:= 1+2
Plus[1,2]
In[1]:=D[4 x^2]
D[Times[4,Power[x,2]]]
In[1]:=
$

来自Fast Introduction for Math Students的前几个示例

^{pr2}$

从Python调用:

fromFoxySheepimportif2ff,if2pythonprint(if2ff("x^2-3x+4")# Prints: Plus[Power[x,2],Times[-1,3,x],4]print(if2ff("x^2-3x+4")# Prints (x ** 2 + -1 * 3)

如需更多演示,请运行foxy-sheep--file pytest/parse_expressions/SO1.m,或与其他 pytest/parse_expressions中的Mathamatica文件。在

有关foxy-sheep的帮助,请运行foxy-sheep--help。在

转换为Python

一个非常粗糙的Python翻译程序已经启动。虽然有 还有很多细节需要填写,一些基本的东西已经准备好了。在

以下是一些示例:

167.5 -> decimal.Decimal(167.5)
15^^8 -> int(15, 8)
132`  -> (132)
1 / 10 3 -> (1 / 10 * 3)
x^2 + y^2 -> (x ** 2 + y ** 2)
GCD[12, 15] -> math.gcd(12, 15)
Range[10] -> range(10)
{a, b, c, d}[[3]] -> [a, b, c, d][2]  # Handles 0-1 conversion
{a, b, c, d, e, f}[[2 ;; 4]] -> [a, b, c, d, e, f][1:3] # ditto

通过将“InputForm”输入转换为 “OutputForm”解析树,然后使用它转换为Python AST。 最后使用Python模块astor将其转储到文本。在

为什么我们要经历更复杂的转换一个字符串到另一个字符串?在

通过保持结构为AST,我们可以考虑更强大的 转换和使用Python AST中存在的例程

例如,将{1,2,3}+2翻译成Python,虽然现在还没有处理,但是可以 通过观察加号的操作数类型来完成,注意其中一个是标量 另一个是列表。在

重新生成lexer/parser

要更改语法,您需要ANTLR解析器生成器 (antlr4),已安装4.7.x版。在

要(重新)生成所需的lexer/parser

$ make

生成的文件放在FoxySheep/generated中。在

ANTLR4生成的文件假定位于名为generated的子目录中,其中包含一个空的__init__.py文件。有关详细信息,请参见Makefile。在

FoxySheepLexer必须子类Lexer

为了使生成的antlr4 lexer正常工作,我们需要修补生成的Python lexer FoxySheep.lexer.py;补丁文件FoxySheep.lexer.py.patch执行此操作。 FoxySheepParser.py的Makefile目标包含patch命令。在

如果修补没有完成,您将在尝试运行的lexer中得到一个AttributeError异常,例如通过foxy-sheep。在

AttributeError: 'FoxySheepLexer' object has no attribute 'checkAdditiveOp'

另请参见

FoxySheep

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

推荐PyPI第三方库


热门话题
带有servlet、jsp和数据库的应用程序的java结构   java Admob本机Express广告   java无法在会话超时时获取会话范围的bean   java的“xmlns=”http://www.intellij.com/uidesigner/form/“`由Intellij以.xml格式标记为红色   迭代器在Java中重写Iterables<Obj>的正确方法   java如何刷新我的默认表模型   无效URL上的java PrettyFaces重定向循环   java如何将JSON数组传递给SpringMVC?   java如何从setOnClickListener获取数据并将其传递给倒计时程序   从java运行grep命令后bash获取错误   java[Ljava.lang.String;@5d79a22d结果   java错误p:ajax更新   请在这段代码中解释java instanceof关键字