1

私はpyparsingを使用してDSLに取り組んできました。

キーワードがいくつかあります。pyparsingキーワードクラスの詳細は、http://packages.python.org/pyparsing/pyparsing.pyparsing.Keyword-class.htmlにあります。

私はそれらを次のように定義しました

this = Keyword("this", caseless=cl)
that = Keyword("that", caseless=cl)

上記のキーワードが数字に変換される辞書があります。

helper_dict = {"this":-1, "that":1}

私が直面している問題は、それらの一貫した文字列表現を取得できないことです。str(this)を試してみると、引用符が付いています。そのため、キーエラーが発生しない限り、辞書を実際に使用することはできません。次のいずれかを試してKeyErrorみると、が表示されます。

helper_dict[this]
helper_dict[this.__str__()]
helper_dict[str(this)]

適切な文字列表現を取得するにはどうすればよいですか

キーワードのドキュメントとキーワードのスーパークラスの両方を見ましたが、どの関数が実際にこれを行うのかわかりません。

4

1 に答える 1

0

this文字列でthatはなく、文字列を使用して定義されたpyparsing式ですが、文字列ではありません。についてhelper_dictは、「this」と「that」の文字列を使用してキーを定義しました。定義する入力文字列を含む入力を解析した後、thisおよび式から文字列を取得します。that

これがどのように機能するかを示すために実験しているコンソールを次に示します。

>>> from pyparsing import *
>>> this = Keyword("this", caseless=True)
>>> that = Keyword("that", caseless=True)
>>> result = (this|that).parseString("This")
>>> print result
['this']

キーワードは、入力文字列の大文字と小文字に関係なく、大文字と小文字の観点から常に一貫したトークンを返すことに注意してください。CaselessLiteralおよびcaselessキーワードは、入力文字列の場合ではなく、定義する文字列の場合に常にトークンを返します。

>>> print result[0]
this
>>> print type(result[0])
<type 'str'>

解析されたデータは、list、dict、およびオブジェクトスタイルのアドレス指定をサポートするParseResultsオブジェクトで返されます。ここで、0番目の要素は文字列、文字列「this」です。この文字列を使用して、helper_dictで定義されているキー「this」と一致させることができます。

>>> helper_dict = {"this":1, "that":-1}
>>> helper_dict[result[0]]
1

または、解析時にこの置換を行うための解析アクションを定義します(replaceWithは、pyparsingで定義されたヘルパーメソッドです。

>>> this.setParseAction(replaceWith(1))
"this"
>>> print (this | that).parseString("This")[0]
1

-ポール

于 2012-10-31T18:52:19.513 に答える