pyPEG2:'f(x)'的PEG语法有什么问题?

时间:2012-12-07 23:30:29

标签: python peg

另一个这个语法问题出了什么问题:

我和Volker Birk一起玩pyPEG2而且我遇到了一个非常微不足道的案子:

from pypeg2 import *

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

我得到的例外情况如下:

  

Traceback(最近一次调用最后一次):文件“test.py”,第5行,in          print parse(text,grammar)file“/home/yy/dev/python/len/len/lang/pypeg2/init.py”,第539行,in   解析       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行,in   _parse       提高GrammarTypeError(“in grammar:”+ repr(thing))pypeg2.GrammarTypeError:in grammar:'('

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

2 个答案:

答案 0 :(得分:3)

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

VB。

答案 1 :(得分:2)

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)]

为什么? RTFM !!

  

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