123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from abc import *
- from typing import *
- from dataclasses import *
- class Variable:
- def __init__(self, value):
- self.value = value
- class DataModel:
- def __init__(self, names: Dict[str, Variable]):
- self.names = names
- @dataclass
- class Expression(ABC):
- pass
- @abstractmethod
- def eval(self, events, datamodel):
- pass
- @dataclass
- class Identifier(Expression):
- identifier: str
- def eval(self, events, datamodel):
- return datamodel.names[self.identifier].value
- @dataclass
- class FunctionCall(Expression):
- function: Expression
- parameters: List[Expression]
- def eval(self, events, datamodel):
- f = self.function.eval(events, datamodel)
- p = [p.eval(events, datamodel) for p in self.parameters]
- return f(*p)
- @dataclass
- class StringLiteral(Expression):
- string: str
- def eval(self, events, datamodel):
- return self.string
- @dataclass
- class Array(Expression):
- elements: List[Any]
- def eval(self, events, datamodel):
- return [e.eval(events, datamodel) for e in self.elements]
|