blob: 28fe783e9e8b36e858fea31fff7b83d38b7ef7f5 (
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
 | package ast.nodes;
import java.util.ArrayList;
import semanticanalysis.SemanticError;
import semanticanalysis.SymbolTable;
import ast.types.*;
/**
 * Node for the `for_stmt` statement of the grammar.
 */
public class ForStmtNode implements Node {
    private Node exprList;
    private Node block;
    public ForStmtNode(Node exprList, Node block) {
        this.exprList = exprList;
        this.block = block;
    }
    @Override
    public ArrayList<SemanticError> checkSemantics(SymbolTable ST, int _nesting) {
        ArrayList<SemanticError> errors = new ArrayList<SemanticError>();
        ExprNode expr = (ExprNode) exprList;
        ST.insert(expr.getId(), expr.typeCheck(), _nesting, "");
        errors.addAll(exprList.checkSemantics(ST, _nesting));
        errors.addAll(block.checkSemantics(ST, _nesting));
        return errors;
    }
    @Override
    public Type typeCheck() {
        return new VoidType();
    }
    // TODO: add code generation for while
    @Override
    public String codeGeneration() {
        return "";
    }
    @Override
    public String toPrint(String prefix) {
        return prefix + "For\n" + exprList.toPrint(prefix + "  ") + block.toPrint(prefix + "  ");
    }
}
 |