package ql.semantics; import ql.ast.form.Form; import ql.ast.form.FormVisitor; import ql.ast.statement.*; import ql.semantics.values.UndefValue; /** * Created by Nik on 24-2-15. */ public class ValueTableBuilder implements FormVisitor<Void>, StatVisitor<Void> { private final ValueTable valueTable; private final UndefValue undefValue = new UndefValue(); public static ValueTable build(Form f) { ValueTableBuilder valueTableBuilder = new ValueTableBuilder(); f.accept(valueTableBuilder); return valueTableBuilder.valueTable; } private ValueTableBuilder() { this.valueTable = new ValueTable(); } @Override public Void visit(Form f) { for (Statement s : f.getBody()) { s.accept(this); } return null; } @Override public Void visit(Question q) { this.valueTable.storeValue(q.getId(), undefValue); return null; } @Override public Void visit(CalculatedQuestion q) { this.valueTable.storeValue(q.getId(), undefValue); return null; } @Override public Void visit(IfCondition c) { for (Statement s : c.getBody()) { s.accept(this); } return null; } }