2017-03-07 13 views
3

私はpypegを使用してフォーム$fのいずれかの種類、$c、...、$dを一致させたいので、私は次のようにEnumでそれを入れてみました:enum(pypeg)でドル記号を使用していますか?

class StatementType(Keyword): 
    grammar = Enum(K("$f"), K("$c"), 
        K("$v"), K("$e"), 
        K("$a"), K("$p"), 
        K("$d")) 

しかし、これは失敗します。

>>> k = parse("$d", StatementType) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.6/site-packages/pypeg2/__init__.py", line 667, in parse 
    t, r = parser.parse(text, thing) 
    File "/usr/local/lib/python3.6/site-packages/pypeg2/__init__.py", line 794, in parse 
    raise r 
    File "<string>", line 1 
    $d 
    ^
SyntaxError: expecting StatementType 

$x\$xに置き換えて、$文字をエスケープしようとしました。私はまた、正規表現オブジェクトとして扱うことを期待して、r"\$x"を前もって試してみました。これらの組み合わせのどちらも機能しておらず、同じエラーメッセージを表示しません。私が与えた例と一致させるにはどうしたらいいですか?

答えて

2

default regex for Keywords\w+です。 Keyword.regexクラス変数を設定して変更できます。

class StatementType(Keyword): 
    grammar = Enum(K("$f"), K("$c"), 
        K("$v"), K("$e"), 
        K("$a"), K("$p"), 
        K("$d")) 

Keyword.regex = re.compile(r"\$\w") # e.g. $a, $2, $_ 
k = parse("$d", StatementType) 
関連する問題