def fn(self, items, meta, op=op): assert len(items) == 2 return E.Apply(sp(self.filename, meta), "_" + op, items)
def at(self, items, meta) -> E.Base: return E.Apply(sp(self.filename, meta), "_at", items)
def negate(self, items, meta) -> E.Base: return E.Apply(sp(self.filename, meta), "_negate", items)
def apply(self, items, meta) -> E.Base: assert len(items) >= 1 assert not items[0].startswith("_") # TODO enforce in grammar return E.Apply(sp(self.filename, meta), items[0], items[1:])
def get_right(self, items, meta) -> E.Base: return E.Apply(sp(self.filename, meta), "_get_right", items)
def apply(self, items, meta) -> E.Base: assert len(items) >= 1 return E.Apply(sp(self.filename, meta), items[0], items[1:])