首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PyPy转换错误

PyPy转换错误
EN

Stack Overflow用户
提问于 2011-03-04 21:20:48
回答 2查看 530关注 0票数 2

我希望这是这个问题的正确位置。我正在尝试编写一个简单的支持JIT的解释器。然而,当涉及到翻译时,我遇到了一个奇怪的错误。我几乎一字不差地复制了JavaScript示例解析器,但这里是我的问题:

首先,这里是解析器(几乎100%类似于JS示例):

代码语言:javascript
运行
复制
from pypy.rlib.parsing.ebnfparse import parse_ebnf, make_parse_function
from pypy.rlib.parsing.parsing import ParseError, Rule
import py
import sys

GFILE = py.magic.autopath().dirpath().join("grammar.txt")

try:
       t = GFILE.read(mode="U")
       regexs, rules, ToAST = parse_ebnf(t)
except ParseError, e:
       print e.nice_error_message(filename=str(GFILE), source=t)
       raise

parsef = make_parse_function(regexs, rules, eof=True)

def parse(code):
       t = parsef(code)
       return ToAST().transform(t)

我的语法是:

代码语言:javascript
运行
复制
STRING: "\\"[^\\\\"]*\\"";
SYMBOL: "[A-Za-z+-_*<>]+";
KEYWORD: ":[A-Za-z+-_*<>]+";
INTEGER: "\-?([0-9]+)";
DECIMAL: "\-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][\+\-]?[0-9]+)?";
IGNORE: " |\n|\t|,";
value: <KEYWORD> | <SYMBOL> | <STRING> | <DECIMAL> | <INTEGER> |
<hash> | <vector> | <sexps>;
hash: ["{"] (entry [","])* entry ["}"];
vector: ["["] value* ["]"];
entry: STRING [":"] value;
sexps: ["("] value+ [")"];

我执行以下操作将代码编译为c:

代码语言:javascript
运行
复制
import parse
t = Translation(parse.parse)
t.annotate([str])
t.rtype()
t.compile_c()
>>>
<---snip---->
File "/home/tbaldridge/pypy/pypy/translator/c/genc.py", line 339, in
getentrypointptr
   self._wrapper = new_wrapper(self.entrypoint, self.translator)
 File "/home/tbaldridge/pypy/pypy/translator/llsupport/wrapper.py",
line 57, in new_wrapper
   r_to = pyobj_repr)
 File "/home/tbaldridge/pypy/pypy/rpython/rtyper.py", line 931, in convertvar
   (r_from, r_to))
pypy.rpython.error.TyperError: don't know how to convert from
<InstanceRepr for pypy.rlib.parsing.tree.Node> to <PyObjRepr *
PyObject>

我遗漏了什么?这看起来很直截了当...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-04 22:20:36

您的函数返回一个RPython级别的AST节点,它是转换后的C结构。翻译器不知道如何在Python解释器中表示它,以便在调用函数时返回结果。

在C中,main()函数只能返回一个整数。在pypy中,交互式翻译器可以传递和返回字符串、整数、浮点数和元组。您应该处理ast节点并返回基本类型。

票数 3
EN

Stack Overflow用户

发布于 2011-03-04 21:34:41

这是一个与pypy相关的非常具体的问题,你更有可能在irc.freenode.net上的#pypy或pypy-dev上得到答案。

也就是说,你不应该为此使用交互式翻译(在其他事情中,它有疯狂的默认设置)。相反,您应该编写一个目标(查看translator/goal/targetnopstandalone.py中的示例),并使用translate.py对其进行编译。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5194232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档