0

この文法の質問のさらに別の問題点:

私はVolkerBirkのpyPEG2で遊んでいますが、非常に些細なケースで立ち往生しています。

from pypeg2 import *

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

私が得ている例外は次のようになります:

トレースバック(最後の最後の呼び出し):ファイル "test.py"、5行目、print parse(text、grammar)ファイル "/ 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、in _parse raise 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)]

なんで? RTFM !!

警告:pyPEG2.xはPython3用に作成されています。次のインポートを使用してPython2.7で使用できます(Python 3では必要ありません)。

于 2012-12-07T23:37:36.370 に答える
3

そのような問題を抱えている人々のために、私はドキュメントを更新しました。pyPEG2はPython3用に作成されています。つまり、Unicode文字列を常に使用します。Python 2.7の場合、これには次の形式の文字列が必要になりますu'f(x)'。ドキュメントを2回持ちたくないので、お勧めしますfrom __future__ import unicode_literals, print_function

VB。

于 2012-12-08T06:13:23.290 に答える