0

这个语法问题还有另一个问题:

我正在玩 Volker Birk 的pyPEG2,但我遇到了一个非常微不足道的案例:

from pypeg2 import *

text = 'f(x)'
grammar = name, '(' , word,')'
print parse(text, grammar)

我得到的异常看起来像:

Traceback(最近一次调用最后):文件“test.py”,第 5 行,打印解析(文本,语法)文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 539 行,在解析 t 中,r = parser.parse(text, thing) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 644 行,在解析 t 中,r = self._parse(t, thing, pos) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 814 行,在 _parse t2 中,r = self._parse(t, e , pos) 文件“/home/yy/dev/python/len/len/lang/pypeg2/ init .py”,第 962 行,在 _parse 中引发 GrammarTypeError("in grammar:" + repr(thing)) pypeg2.GrammarTypeError:在语法中:'('

parse()在解析应该是 Symbol() 的左圆括号时失败。当然,我遗漏了一些明显的东西,但是什么?

4

2 回答 2

3
from __future__ import unicode_literals, print_function
from pypeg2 import *

text = 'f(x)'
grammar = name(), '(' , attr('Param',word),')'
print(parse(text, grammar))

输出

[Attribute(name=u'name', thing=Symbol(u'f'), subtype=None), Attribute(name=u'Param', thing=u'x', subtype=None)]

为什么? 实时调频!!

警告:pyPEG 2.x 是为 Python 3 编写的。您可以通过以下导入将它与 Python 2.7 一起使用(Python 3 不需要它)

于 2012-12-07T23:37:36.370 回答
3

由于人们遇到此类问题,我更新了文档。pyPEG2 是为 Python 3 编写的。这意味着,它一直使用 Unicode 字符串。对于 Python 2.7,这将需要 ie 形式的字符串u'f(x)'。因为我不想拥有两次文档,所以我推荐from __future__ import unicode_literals, print_function

VB。

于 2012-12-08T06:13:23.290 回答