package uva.qls.interpreter.typecheck; import uva.qls.ast.ASTNode; import uva.qls.interpreter.typecheck.CheckWidget; import uva.qls.interpreter.typecheck.table.SymbolTable; import uva.qls.interpreter.typecheck.table.SymbolTableValue; import uva.qls.ast.Page; import uva.qls.ast.Prog; import uva.qls.ast.StyleSheet; import uva.qls.ast.component.Checkbox; import uva.qls.ast.component.Dropdown; import uva.qls.ast.component.Radio; import uva.qls.ast.component.Slider; import uva.qls.ast.component.Spinbox; import uva.qls.ast.component.Textbox; import uva.qls.ast.literal.BooleanLiteral; import uva.qls.ast.literal.Identifier; import uva.qls.ast.literal.IntLiteral; import uva.qls.ast.literal.Literal; import uva.qls.ast.literal.MoneyLiteral; import uva.qls.ast.literal.StringLiteral; import uva.qls.ast.statements.DefaultValue; import uva.qls.ast.statements.Question; import uva.qls.ast.statements.Section; import uva.qls.ast.statements.Statement; import uva.qls.ast.statements.Subsection; import uva.qls.ast.statements.visitor.StatementVisitor; import uva.qls.ast.style.Color; import uva.qls.ast.style.Font; import uva.qls.ast.style.FontName; import uva.qls.ast.style.FontSize; import uva.qls.ast.style.Height; import uva.qls.ast.style.Style; import uva.qls.ast.style.Width; import uva.qls.ast.type.Type; import uva.qls.ast.type.TypeBoolean; import uva.qls.ast.type.TypeInteger; import uva.qls.ast.type.TypeMoney; import uva.qls.ast.type.TypeString; public class TypeCheckVisitorQLS implements StatementVisitor<Object>{ private TypeCheckQLS typeCheck; protected SymbolTable symbolTable; protected CheckWidget widget; public TypeCheckVisitorQLS (TypeCheckQLS _typeCheck, SymbolTable table){ this.typeCheck = _typeCheck; this.symbolTable= table; } @Override public Object visitASTNode(ASTNode node) { return null; } @Override public Object visitProg(Prog prog) { prog.getStyleSheet().accept(this); return null; } @Override public Object visitPage(Page page) { for (Statement statement : page.getStatement()) this.visitStatement(statement); return null; } @Override public StyleSheet visitStyleSheet(StyleSheet styleSheet) { styleSheet.getIdentifier().accept(this); for (Page p : styleSheet.getPage()) p.accept(this); return null; } @Override public Object visitStatement(Statement statement) { statement.accept(this); return null; } @Override public Object visitDefaultValueComponent(DefaultValue defaultValue) { String type = defaultValue.getType().getPrimitiveType().getName(); String componentName = defaultValue.getComponent().getName(); this.typeCheck.isCompatibleDefaultValue(defaultValue, type, componentName); return null; } @Override public Object visitDefaultValueStatements(DefaultValue defaultValue) { return null; } @Override public Object visitQuestion(Question question) { String identifier = question.getIdentifier().evaluatedValue(); this.typeCheck.isUndefined(question.getIdentifier()); this.typeCheck.isMultiple(question.getIdentifier()); SymbolTableValue value = new SymbolTableValue(question.getLOC()); this.symbolTable.putValue(question.getIdentifier(), value); if (question.getComponent() != null){ if (this.typeCheck.getTypeCheckQL().getSymbolTable().keyExists(identifier)){ String type = this.typeCheck.getTypeCheckQL().getSymbolTable().retrieveValue(identifier).getPrimitiveType().getName(); String componentName = question.getComponent().getName(); this.typeCheck.isCompatibleQuestionType(question, type, componentName); } } return null; } @Override public Object visitSection(Section section) { for (Statement statement : section.getStatement()) statement.accept(this); return null; } @Override public Object visitSubsection(Subsection subsection) { subsection.getQuestion().accept(this); return null; } @Override public Style visitStyle(Style style) { // TODO Auto-generated method stub return null; } @Override public Color visitColor(Color color) { // TODO Auto-generated method stub return null; } @Override public Font visitFont(Font font) { // TODO Auto-generated method stub return null; } @Override public Object visitFontsize(FontSize fontSize) { // TODO Auto-generated method stub return null; } @Override public Object visitFontName(FontName fontName) { // TODO Auto-generated method stub return null; } @Override public Object visitHeight(Height height) { // TODO Auto-generated method stub return null; } @Override public Object visitWidth(Width width) { // TODO Auto-generated method stub return null; } @Override public Object visitCheckBox(Checkbox checkBox) { // TODO Auto-generated method stub return null; } @Override public Object visitDropDown(Dropdown dropDown) { // TODO Auto-generated method stub return null; } @Override public Object visitRadio(Radio radio) { // TODO Auto-generated method stub return null; } @Override public Object visitSlider(Slider slider) { // TODO Auto-generated method stub return null; } @Override public Object visitSpinbox(Spinbox spinbox) { // TODO Auto-generated method stub return null; } @Override public Object visitTextbox(Textbox textbox) { return null; } @Override public Object visitBooleanLiteral(BooleanLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitIntLiteral(IntLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitIdentifier(Identifier identifier) { // TODO Auto-generated method stub return null; } @Override public Object visitLiteral(Literal literal) { // TODO Auto-generated method stub return null; } @Override public Object visitMoneyLiteral(MoneyLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitStringLiteral(StringLiteral literal) { // TODO Auto-generated method stub return null; } @Override public Object visitType(Type type) { // TODO Auto-generated method stub return null; } @Override public Object visitTypeBoolean(TypeBoolean booleanType) { // TODO Auto-generated method stub return null; } @Override public Object visitTypeInteger(TypeInteger integerType) { // TODO Auto-generated method stub return null; } @Override public Object visitTypeMoney(TypeMoney moneyType) { // TODO Auto-generated method stub return null; } @Override public Object visitTypeString(TypeString stringType) { // TODO Auto-generated method stub return null; } }