パセリを使って単語を一致させようとしています。私が使用している文法は、一般的な単語のルールを作成する場合にのみ機能します。ただし、ここ ( http://bit.ly/1025Qxo ) とここ ( http://bit.ly/17wzUYg )の Allen Short のプレゼンテーションとサンプル コードから示されているように機能しない理由を知りたいです。.
彼のコードでは、次のようになっています。
rule = (expr1 -> returnval) | -> []
しかし、私がそれを機能させる唯一の方法は次のとおりでした:
rule = (expr1 -> returnval) | (expr2) -> []
これが私のコードです:
import parsley
grammar = r"""
myword = "hello"
myrule = (myword:word -> word) | -> []
"""
MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works, returns myword
print MyPar("bye").myrule() # doesn't work, throws exception
私がそれを機能させる唯一の方法は、組み込みの「文字」変数を使用して一般的な単語文字列のルールを作成することでした。
import parsley
grammar = r"""
myword = "hello"
anyword = <letter+>
myrule = (myword:word -> word) | anyword -> []
"""
MyPar = parsley.makeGrammar(grammar,{})
print MyPar("hello").myrule() # works
print MyPar("bye").myrule() # works, returns empty list
どんな助けでも大歓迎です。ありがとうございました。
ポール