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"))]), ] )
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'))]), ])
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()
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")
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")
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)
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)
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')
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')