2017-03-07 5 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)