summaryrefslogtreecommitdiffstats
path: root/src/front/ast.py
blob: 26cda51514577a2a11eed1293576457169d5ad45 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class Node(object):
    pass

class Program(Node):
    def __init__(self, functions, lineno = None):
        self.functions = functions
        self.lineno = lineno

class Function(Node):
    def __init__(self, name, params, statements, lineno = None):
        self.name = name
        self.params = params
        self.statements = statements
        self.lineno = lineno

    def __repr__(self):
        return "<Function: %s at line %d>" % (name, lineno)

class Statement(Node):
    pass

class IfStatement(Statement):
    def __init__(self, expression, true_statements, false_statements, lineno = None):
        self.expression = expression
        self.true_statements = true_statements
        self.false_statements = false_statements
        self.lineno = lineno

    def __repr__(self):
        return "<IfStatement at line %d>" % lineno

class WhileStatement(Statement):
    def __init__(self, expression, statements, lineno = None):
        self.expression = expression
        self.statements = statements
        self.lineno = lineno

    def __repr__(self):
        return "<WhileStatement at line %d>" % lineno

class ReturnStatement(Statement):
    def __init__(self, expression, lineno = None):
        self.expression = expression
        self.lineno = lineno

    def __repr__(self):
        return "<ReturnStatement at line %d>" % lineno

class AssignStatement(Statement):
    def __init__(self, ident, expression, lineno = None):
        self.ident = ident
        self.expression = expression
        self.lineno = lineno

    def __repr__(self):
        return "<AssignStatement for %s at line %d>" % (ident, lineno)

class FunctionCall(Statement):
    def __init__(self, ident, arguments, lineno = None):
        self.ident = ident
        self.arguments = arguments
        self.lineno = lineno

    def __repr__(self):
        return "<FunctionCall for %s at line %d>" % (ident, lineno)

class Expression(Node):
    pass

class UnaryExpression(Expression):
    def __init__(self, op, right, lineno = None):
        self.op = op
        self.right = right
        self.lineno = lineno

    def __repr__(self):
        return "<UnaryExpression: %s(%s) at line %d>" % (op, right, lineno)

class BinaryExpression(Expression):
    def __init__(self, left, op, right, lineno = None):
        self.left = left
        self.op = op
        self.right = right
        self.lineno = lineno

    def __repr__(self):
        return "<BinaryExpression: %s(%s, %s) at line %d>" % (op, left, right, lineno)