コード例 #1
0
ファイル: either.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        for index, statements in enumerate(self.items):
            yield Line("or" if index else "either", indent)
            for statement in statements:
                yield from statement.render(indent + 2)

        yield Line("end either;", indent)
コード例 #2
0
ファイル: procedure.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        args = ", ".join(str(arg) for arg in self.args)
        yield Line(f"procedure {str(self.name)}({args})", indent)

        if self.variables is not None:
            yield Line(str(self.variables), indent)

        yield from self.body.render(indent)
        yield Line("end procedure;", indent)
コード例 #3
0
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line()
     yield Line("define", indent)
     yield from (
         Line(line, indent + 2)
         for item in self.items
         for line in item.splitlines()
     )
     yield Line("end define;", indent)
コード例 #4
0
ファイル: with_.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        declarations = ", ".join(
            str(declaration) for declaration in self.declarations)
        yield Line(f"with {declarations}", indent)

        yield Line("do", indent)
        for statement in self.statements:
            yield from statement.render(indent + 2)
        yield Line("end with;", indent)
コード例 #5
0
ファイル: if_.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        yield from self.if_clause.render(indent)

        for elsif_clause in self.elsif_clauses:
            yield from elsif_clause.render(indent)

        if self.else_:
            yield Line("else", indent)
            for statement in self.else_:
                yield from statement.render(indent + 2)

        yield Line(f"end if;", indent)
コード例 #6
0
def test_line():
    line = Line("foo", 2)

    assert_that(
        str(line),
        is_(equal_to("  foo")),
    )
コード例 #7
0
ファイル: base.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        if self.label is not None:
            yield Line(f"{str(self.label)}:", indent)
            extra_indent = 2
        else:
            extra_indent = 0

        yield from self.value.render(indent=indent + extra_indent)
コード例 #8
0
ファイル: algorithm.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        algorithm = "fair algorithm" if self.fair else "algorithm"
        yield Line(f"--{algorithm} {str(self.name)}", indent)

        if self.variables:
            yield from self.variables.render(indent)

        if self.definitions:
            yield from self.definitions.render(indent)

        if self.macros:
            yield from self.macros.render(indent)

        if self.procedures:
            yield from self.procedures.render(indent)

        if isinstance(self.body, AlgorithmBody):
            yield Line()

        yield from self.body.render(indent)

        yield Line("end algorithm", indent)
コード例 #9
0
ファイル: call.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(f"call {self.value}", indent)
コード例 #10
0
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(f"print {str(self.value)};", indent)
コード例 #11
0
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line("return;", indent)
コード例 #12
0
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line("skip;", indent)
コード例 #13
0
ファイル: if_.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(f"{self.clause_type} {str(self.condition)} then", indent)
     for statement in self.statements:
         yield from statement.render(indent + 2)
コード例 #14
0
ファイル: procedure.py プロジェクト: jessemyers/pluscal
    def render(self, indent: int = 0) -> Iterable[Line]:
        values = ", ".join(str(item) for item in self.items)
        variable = "variables" if len(self.items) > 1 else "variable"

        yield Line(f"{variable} {values};", indent)
コード例 #15
0
    def render(self, indent: int = 0) -> Iterable[Line]:
        args = ", ".join(str(arg) for arg in self.args)

        yield Line(f"macro {str(self.name)}({args})", indent)
        yield from self.body.render(indent)
        yield Line("end macro;", indent)
コード例 #16
0
ファイル: base.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line("begin", indent)
     for item in self.items:
         yield from item.render(indent + 2)
コード例 #17
0
ファイル: assign.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(" || ".join(str(item) for item in self.items) + ";", indent)
コード例 #18
0
ファイル: call.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(self.value, indent)
コード例 #19
0
ファイル: while_.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     yield Line(f"while {str(self.condition)} do", indent)
     for statement in self.statements:
         yield from statement.render(indent + 2)
     yield Line("end while;", indent)
コード例 #20
0
ファイル: procedure.py プロジェクト: jessemyers/pluscal
 def render(self, indent: int = 0) -> Iterable[Line]:
     for item in self.items:
         yield Line()
         yield from item.render(indent)