this 튜토리얼을 따르려고하고 있으며 튜토리얼에 사용 된 문법을 pyparsing 문법으로 변환하는 데 어려움을 겪고 있습니다. 블로그의 요지는 사전 비교를 구문 분석하고 실행하기 위해 표현 언어를 작성하는 것입니다.자신의 클래스를 사용하여 pyparsing
properties = {
"name": "David Bowie",
"years_active2": 47
}
평가할 표현식 :
properties["name"] == "David Bowie"
을 그들이 사용하는 문법은 다음과 같습니다
expr: literal { return $1 }
| "properties" "[" literal "]" { return PropertyLookup($3) }
| expr "[" expr "]" { return Index($1, $3) }
| expr "and" expr { return And($1, $3) }
| expr "==" expr { return Equals($1, $3) }
| expr ">" expr { return GreaterThan($1, $3) }
;
literal: QUOTED_STRING { return Literal($1) }
| DECIMAL_NUMBER { return Literal($1) }
;
지금까지 내가 가지고 :
string_literal = pp.Word(pp.alphas, pp.alphanums)
numeric_literal = pp.Word(pp.nums)
literal = string_literal | numeric_literal
properties = "properties" + "[" + literal + "]"
PropertyLookup(), 지수() , and(), Equals() 및 GreaterThan()은 사용자 정의 cl입니다. 식 제작을 위해 만든 엉덩이.
제 4 줄 속성을 두 번째 줄과 동일한 방식으로 변경하려면 어떻게해야합니까? 나는 그런
class PropertyLookup(object):
def evaluate(self, props):
return props[self.key]
어떤 도움에 감사드립니다이다 PropertyLookup()와 같은 사용자 정의 클래스에 문자를 전달하는 방법에 대한 대부분의 혼란 스러워요!
무엇을 시도 했습니까? 그 결과는 무엇입니까? 예상과 다른 점은 무엇입니까? 튜토리얼에서 벗어나는 좋은 방법은 * 정확하게 * 복사 한 다음 수정을 시작하는 것입니다. 그것이 깨진다면, 그것이 여전히 작동하는 곳으로 돌아가서, 당신이 그것을 깨뜨렸던 것을 발견하십시오. –