summaryrefslogtreecommitdiffstats
path: root/src/Compiler/Expression.java
blob: 278946229f8ecd5a75d42108d3127bf1d98e8c18 (plain)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package Compiler;

import java.util.List;

abstract class Expression {
    static class Binary extends Expression{

        final Expression left;
        final Expression right;
        final Token op;

        Binary(Expression left, Token op, Expression right){
            this.left=left;
            this.op=op;
            this.right = right;
        }

        @Override
        public String getExpressionType() {
            return "binary";
        }

    }

    static class Singular extends Expression{

        final Expression right;
        final Token op;

        Singular(Token op, Expression right){
            this.op=op;
            this.right = right;
        }

        @Override
        public String getExpressionType() {
            return "singular";
        }

    }

    static class Literal extends Expression{
        final Token value;
        final String type;

        Literal(Token value,String type){
            this.value=value;
            this.type=type;
        }
        

        @Override
        public String getExpressionType() {
            return "literal";
        }
        
    }

    static class BracketedExpression extends Expression{
        final Expression expr;

        BracketedExpression(Expression expr){
            this.expr=expr;
        }

        @Override
        public String getExpressionType() {
            return "bracket";
        }
        
        
    }

    static class AssignmentExpression extends Expression{
        final Expression variable;
        final Expression value;

        AssignmentExpression(Expression variable,Expression value){
            this.variable=variable;
            this.value=value;
        }


        @Override
        public String getExpressionType() {
            return "assign";
        }   
    }

    static class Variable extends Expression{
        
        Variable(Token name){
            this.name=name;

        }
        @Override
        public String getExpressionType() {
            return "var";
        }
        final Token name;
        
    }

    static class ArrayVariable extends Expression{
        ArrayVariable(Token name,List<Expression> positions){
            this.name=name;
            this.positions=positions;

        }
        @Override
        public String getExpressionType() {
            return "arrayvar";
        }
        final Token name;
        final List<Expression> positions;
    }

    static class FunctionCall extends Expression{
        FunctionCall(Token name, List<Token> arguments){
            this.arguments=arguments;
            this.name=name;
        }
        final List<Token> arguments;
        final Token name;

        @Override
        public String getExpressionType() {
            return "functCall";
        }
        
    }

    public abstract String getExpressionType();
}