Example #1
0
def test_parse_blocks():
    assert parse("a b c\nd") == Block(
        [
            Expr([Message(Identifier("a")), Message(Identifier("b")), Message(Identifier("c"))]),
            Expr([Message(Identifier("d"))]),
        ]
    )
    assert parse("a\nb\nc\nd") == Block(
        [
            Expr([Message(Identifier("a"))]),
            Expr([Message(Identifier("b"))]),
            Expr([Message(Identifier("c"))]),
            Expr([Message(Identifier("d"))]),
        ]
    )
Example #2
0
def test_parse_blocks():
    assert parse('a b c\nd') == Block([
        Expr([
            Message(Identifier('a')),
            Message(Identifier('b')),
            Message(Identifier('c'))
        ]),
        Expr([Message(Identifier('d'))]),
    ])
    assert parse('a\nb\nc\nd') == Block([
        Expr([Message(Identifier('a'))]),
        Expr([Message(Identifier('b'))]),
        Expr([Message(Identifier('c'))]),
        Expr([Message(Identifier('d'))]),
    ])
Example #3
0
 def check_compile(self, source, expected):
     bc = compile_ast(parse(source))
     assert [i.strip()
             for i in expected.splitlines()
             if i.strip()] == bc.dump().splitlines()
Example #4
0
def test_parse_args():
    assert parse("_a(b)") == Block([Expr([Message(Identifier("_a"), Args([Expr([Message(Identifier("b"))])]))])])
    assert parse("a(50)") == Block([Expr([Message(Identifier("a"), Args([Expr([Message(ConstantInt("50"))])]))])])
    assert parse("5 pow(ç)") == Block(
        [Expr([Message(ConstantInt("5")), Message(Identifier("pow"), Args([Expr([Message(Identifier("ç"))])]))])]
    )
    assert parse("a(b, c)") == Block(
        [Expr([Message(Identifier("a"), Args([Expr([Message(Identifier("b"))]), Expr([Message(Identifier("c"))])]))])]
    )
    assert parse("a(b, (c))") == parse("a(b,c)")
    assert parse("a(b, c)") == parse("a(b,c,)")
    assert parse("a(b, c)") == parse("a(\nb,\nc\n)")
    assert parse("a(b, c)") == parse("a(b,c,\n)")
    assert parse("a(b, c)") == parse("a(\n\nb,\n\nc,\n\n)\n")
Example #5
0
def test_parse_basic():
    assert parse("50") == Block([Expr([Message(ConstantInt("50"))])])
    assert parse("1 inc") == Block([Expr([Message(ConstantInt("1")), Message(Identifier("inc"))])])
    assert parse("a") == Block([Expr([Message(Identifier("a"))])])
    assert parse("a b c") == Block(
        [Expr([Message(Identifier("a")), Message(Identifier("b")), Message(Identifier("c"))])]
    )
    assert parse("a; c") == Block(
        [Expr([Message(Identifier("a")), Message(Identifier(";")), Message(Identifier("c"))])]
    )
    assert parse("(a)") == parse("a")
    assert parse("(a b)") == parse("a b")
    assert parse("(a b) c") == parse("a b c")
    assert parse("((a b) c d) e") == parse("a b c d e")
Example #6
0
        self.data.append(chr(bytecode))
        self.data.append(chr(arg))

    def create_bytecode(self):
        return Bytecode("".join(self.data), self.constants[:],
                        len(self._names))


def compile_ast(astnode):
    c = CompilerContext()
    astnode.compile(c)
    c.emit(RETURN_VALUE, 0)
    return c.create_bytecode()


if __name__ == '__main__':
    import sys
    from rio.parser import parse, RioSyntaxError

    try:
        source = py.path.local(sys.argv[1], expanduser=True).read('rt')
    except IndexError:
        print('python -m rio.bytecode file_or_code')
        sys.exit(1)
    except py.error.ENOENT:
        source = sys.argv[1]
    try:
        print(compile_ast(parse(source)))
    except RioSyntaxError:
        sys.exit(1)
Example #7
0
    def emit(self, bytecode, arg=0):
        self.data.append(chr(bytecode))
        self.data.append(chr(arg))

    def create_bytecode(self):
        return Bytecode("".join(self.data), self.constants[:], len(self._names))


def compile_ast(astnode):
    c = CompilerContext()
    astnode.compile(c)
    c.emit(RETURN_VALUE, 0)
    return c.create_bytecode()


if __name__ == '__main__':
    import sys
    from rio.parser import parse, RioSyntaxError

    try:
        source = py.path.local(sys.argv[1], expanduser=True).read('rt')
    except IndexError:
        print('python -m rio.bytecode file_or_code')
        sys.exit(1)
    except py.error.ENOENT:
        source = sys.argv[1]
    try:
        print(compile_ast(parse(source)))
    except RioSyntaxError:
        sys.exit(1)
Example #8
0
def test_parse_args():
    assert parse('_a(b)') == Block([
        Expr([
            Message(
                Identifier('_a'),
                Args([Expr([Message(Identifier('b'))])]),
            )
        ])
    ])
    assert parse('a(50)') == Block([
        Expr([
            Message(
                Identifier('a'),
                Args([Expr([Message(ConstantInt('50'))])]),
            )
        ])
    ])
    assert parse('5 pow(ç)') == Block([
        Expr([
            Message(ConstantInt('5')),
            Message(Identifier('pow'),
                    Args([Expr([Message(Identifier('ç'))])]))
        ])
    ])
    assert parse('a(b, c)') == Block([
        Expr([
            Message(
                Identifier('a'),
                Args([
                    Expr([Message(Identifier('b'))]),
                    Expr([Message(Identifier('c'))])
                ]))
        ])
    ])
    assert parse('a(b, (c))') == parse('a(b,c)')
    assert parse('a(b, c)') == parse('a(b,c,)')
    assert parse('a(b, c)') == parse('a(\nb,\nc\n)')
    assert parse('a(b, c)') == parse('a(b,c,\n)')
    assert parse('a(b, c)') == parse('a(\n\nb,\n\nc,\n\n)\n')
Example #9
0
def test_parse_basic():
    assert parse('50') == Block([Expr([Message(ConstantInt('50'))])])
    assert parse('1 inc') == Block(
        [Expr([Message(ConstantInt('1')),
               Message(Identifier('inc'))])])
    assert parse('a') == Block([Expr([Message(Identifier('a'))])])
    assert parse('a b c') == Block([
        Expr([
            Message(Identifier('a')),
            Message(Identifier('b')),
            Message(Identifier('c'))
        ])
    ])
    assert parse('a; c') == Block([
        Expr([
            Message(Identifier('a')),
            Message(Identifier(';')),
            Message(Identifier('c'))
        ])
    ])
    assert parse('(a)') == parse('a')
    assert parse('(a b)') == parse('a b')
    assert parse('(a b) c') == parse('a b c')
    assert parse('((a b) c d) e') == parse('a b c d e')