另一个这个语法问题出了什么问题:
我和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()的开始圆括号时失败。当然我错过了一些明显的东西,但是什么呢?
答案 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不需要)