Пример #1
0
 def string(self, items, meta) -> E.Base:
     parts = []
     for item in items:
         if isinstance(item, E.Base):
             parts.append(E.Placeholder(item.pos, {}, item))
         else:
             parts.append(item.value)
     assert len(parts) >= 2
     assert parts[0] in ['"', "'"]
     assert parts[-1] in ['"', "'"]
     return E.String(sp(self.filename, meta), parts)
Пример #2
0
 def placeholder(self, items, meta):
     options = dict(items[:-1])
     if len(options.items()) < len(items) - 1:
         raise Err.MultipleDefinitions(
             sp(self.filename, meta),
             "duplicate options in expression placeholder")
     return E.Placeholder(sp(self.filename, meta), options, items[-1])
Пример #3
0
 def command(self, items, meta):
     parts = []
     for item in items:
         if isinstance(item, E.Placeholder):
             parts.append(item)
         else:
             parts.append(item.value)
     return {"command": E.String(sp(self.filename, meta), parts)}
Пример #4
0
 def command(self, items, meta):
     parts = []
     for item in items:
         if isinstance(item, E.Placeholder):
             parts.append(item)
         elif item.type.endswith("_FRAGMENT"):
             parts.append(item.value[:-2])
         else:
             parts.append(item.value)
     return {"command": E.String(sp(self.filename, meta), parts)}
Пример #5
0
 def string(self, items, meta) -> E.Base:
     parts = []
     for item in items:
         if isinstance(item, E.Base):
             parts.append(E.Placeholder(item.pos, {}, item))
         elif item.type.endswith("_FRAGMENT"):
             # for an interpolation fragment, item.value will end with "${"
             # so we strip that off. it'd be nice to make the grammar filter
             # that out since it does later filter out the "}"...
             parts.append(item.value[:-2])
         else:
             parts.append(item.value)
     # fix up a parsing quirk -- the opening quote got its own item but the
     # closing quote didn't
     assert len(parts) >= 2
     assert parts[0] in ['"', "'"]
     assert parts[-1][-1] in ['"', "'"]  # pyre-fixme
     if len(parts[-1]) > 1:
         parts.append(parts[-1][-1])  # pyre-fixme
         parts[-2] = parts[-2][:-1]  # pyre-fixme
     return E.String(sp(self.filename, meta), parts)
Пример #6
0
 def fn(self, items, meta, op=op):
     assert len(items) == 2
     return E.Apply(sp(self.filename, meta), "_" + op, items)
Пример #7
0
 def left_name(self, items, meta) -> E.Base:
     assert len(items) == 1 and isinstance(items[0], str)
     return E.Get(sp(self.filename, meta),
                  E._LeftName(sp(self.filename, meta), items[0]), None)
Пример #8
0
 def get_name(self, items, meta) -> E.Base:
     assert len(items) == 2 and isinstance(items[0], E.Base) and isinstance(
         items[1], str)
     return E.Get(sp(self.filename, meta), items[0], items[1])
Пример #9
0
 def obj(self, items, meta) -> E.Base:
     return E.Struct(sp(self.filename, meta), items)
Пример #10
0
 def ifthenelse(self, items, meta) -> E.Base:
     assert len(items) == 3
     return E.IfThenElse(sp(self.filename, meta), *items)
Пример #11
0
 def boolean_false(self, items, meta) -> E.Base:
     return E.Boolean(sp(self.filename, meta), False)
Пример #12
0
 def map(self, items, meta) -> E.Base:
     return E.Map(sp(self.filename, meta), items)
Пример #13
0
 def negate(self, items, meta) -> E.Base:
     return E.Apply(sp(self.filename, meta), "_negate", items)
Пример #14
0
 def at(self, items, meta) -> E.Base:
     return E.Apply(sp(self.filename, meta), "_at", items)
Пример #15
0
 def array(self, items, meta) -> E.Base:
     return E.Array(sp(self.filename, meta), items)
Пример #16
0
 def apply(self, items, meta) -> E.Base:
     assert len(items) >= 1
     return E.Apply(sp(self.filename, meta), items[0], items[1:])
Пример #17
0
 def ident(self, items, meta) -> E.Base:
     return E.Ident(sp(self.filename, meta), [item.value for item in items])
Пример #18
0
 def float(self, items, meta) -> E.Base:
     assert len(items) == 1
     return E.Float(sp(self.filename, meta), to_float(items[0]))
Пример #19
0
 def int(self, items, meta) -> E.Base:
     assert len(items) == 1
     return E.Int(sp(self.filename, meta), to_int(items[0]))
Пример #20
0
 def get_right(self, items, meta) -> E.Base:
     return E.Apply(sp(self.filename, meta), "_get_right", items)
Пример #21
0
 def pair(self, items, meta) -> E.Base:
     assert len(items) == 2
     return E.Pair(sp(self.filename, meta), items[0], items[1])
Пример #22
0
 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:])
Пример #23
0
 def boolean_true(self, items, meta) -> E.Base:
     return E.Boolean(sp(self.filename, meta), True)