Я стараюсь следовать учебнику this, и мне трудно преобразовать грамматику, используемую в учебнике, к грамматике пифарирования. Суть блога заключается в создании языка выражения для синтаксического анализа и сравнения словарей.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(), Index() , And(), Equals() и GreaterThan() являются пользовательскими cl ослы, созданные для создания выражения.
Как я могу изменить свою четвертую строчку свойств так же, как и их вторая линия? Я в основном путают о том, как передать буквальным в пользовательский класс, такие как PropertyLookup(), который
class PropertyLookup(object):
def evaluate(self, props):
return props[self.key]
Любая помощь приветствуется!
Что вы пробовали? Каков был результат? Как он отличался от того, что вы ожидали? Иногда хороший способ отделиться от учебника - это скопировать его * точно *, а затем начать вносить изменения. Если он сломается, вернитесь туда, где он все еще работает, а затем узнайте, что * вы * это нарушили. –