def test_assignment(self): assert parse("a = 123") == ast.Block( [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))]) assert parse("a <- 123") == ast.Block( [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))]) assert parse("123 -> a") == ast.Block( [ast.Assign(ast.Symbol("a"), ast.Vector([ast.FloatValue(123.)]))])
def test_funcdef(self): assert parse("function() x") == ast.Block( [ast.Function(formals=ast.FormalList(), body=ast.Symbol("x"))]) assert parse("function(x) x") == ast.Block([ ast.Function(formals=ast.FormalList([(ast.Symbol("x"), None)]), body=ast.Symbol("x")) ]) assert parse("function(x) { x + 3 }") == ast.Block([ ast.Function(formals=ast.FormalList([(ast.Symbol("x"), None)]), body=ast.Block([ ast.BinaryOperation( "+", ast.Symbol("x"), ast.Vector([ast.FloatValue(3.)])) ])) ]) assert parse("function(x, y=0) { x + y }") == ast.Block([ ast.Function(formals=ast.FormalList([ (ast.Symbol("x"), None), (ast.Symbol("y"), ast.Vector([ast.FloatValue(0.)])) ]), body=ast.Block([ ast.BinaryOperation("+", ast.Symbol("x"), ast.Symbol("y")) ])) ])
def formlist_extend(self, p): # type: (List) -> ast.FormalList value = p[4] if len(p) > 3 else None return p[0].append_formal( ast.Symbol(p[2].getstr().decode("utf-8")), value )
def test_unicode_symbol(self): assert parse(u"👺 = 5".encode("utf-8")) == ast.Block([ ast.Assign(ast.Symbol(u"👺"), ast.Vector([ast.FloatValue(5.)])) ])
def test_binary_operation(self): assert parse("a + b") == ast.Block( [ast.BinaryOperation("+", ast.Symbol("a"), ast.Symbol("b"))])
def formlist_from_symbol(self, p): # type: (List) -> ast.FormalList value = p[2] if len(p) > 1 else None return ast.FormalList([ (ast.Symbol(p[0].getstr().decode("utf-8")), value) ])
def simple_expr(self, p): # type: (List[Token]) -> ast.Symbol return ast.Symbol(p[0].getstr().decode("utf-8"))