/*public ObjectType getExpressionType() * { * Token.TokenValue e1Type = e1.getExpressionType(), e2Type = e2.getExpressionType(); * * switch (value) * { * * case Token.TokenValue.EQBOOL: * if (e1Type == e2Type * && e1Type != Token.TokenValue.NONE) * { * return e1Type; * } * break; * * case Token.TokenValue.AND: * case Token.TokenValue.OR: * if (e1Type == Token.TokenValue.BOOL * && e2Type == Token.TokenValue.BOOL) * { * return Token.TokenValue.BOOL; * } * break; * * case Token.TokenValue.LT: * case Token.TokenValue.GT: * case Token.TokenValue.LEQ: * case Token.TokenValue.GEQ: * if (e1Type == e2Type * && (e1Type == Token.TokenValue.INT || e1Type == Token.TokenValue.STRING)) * { * return Token.TokenValue.BOOL; * } * break; * * case Token.TokenValue.PLUSEQ: * if (e1Type == Token.TokenValue.STRING) * { * return Token.TokenValue.STRING; * } * else if(e1Type == Token.TokenValue.INT && e2Type == Token.TokenValue.INT) * { * return e1Type; //INT * } * break; * * case Token.TokenValue.MINUSEQ: * case Token.TokenValue.TIMESEQ: * case Token.TokenValue.DIVEQ: * if (e1Type == e2Type * && e1Type == Token.TokenValue.INT) * { * return e1Type; //INT * } * break; * * case Token.TokenValue.PLUS: * if (e1Type == Token.TokenValue.STRING || e2Type == Token.TokenValue.STRING) || { || return Token.TokenValue.STRING; || } || else if (e1Type == Token.TokenValue.INT || && e2Type == Token.TokenValue.INT) || { || return Token.TokenValue.INT; || } || break; || || case Token.TokenValue.MINUS: || case Token.TokenValue.TIMES: || case Token.TokenValue.DIV: || if (e1Type == Token.TokenValue.INT || && e2Type == Token.TokenValue.INT) || { || return Token.TokenValue.INT; || } || break; || || || } || || Printer.printError("incompatible types"); || return Token.TokenValue.NULL; ||}*/ public override ObjectType getExpressionType() { ObjectType e1Type = e1.getExpressionType(), e2Type = e2.getExpressionType(); switch (op) { case Token.TokenValue.EQBOOL: if (e1Type == e2Type) { return(ObjectType.booleanType); } break; case Token.TokenValue.AND: case Token.TokenValue.OR: if (e1Type == ObjectType.booleanType && e2Type == ObjectType.booleanType) { return(ObjectType.booleanType); } break; case Token.TokenValue.LT: case Token.TokenValue.GT: case Token.TokenValue.LEQ: case Token.TokenValue.GEQ: if (e1Type == ObjectType.intType && e2Type == ObjectType.intType) { return(ObjectType.booleanType); } break; case Token.TokenValue.PLUS: if (e1Type == ObjectType.stringType || e2Type == ObjectType.stringType) { return(ObjectType.stringType); } else if (e1Type == ObjectType.intType && e2Type == ObjectType.intType) { return(ObjectType.intType); } //erreur break; //return ObjectType.intType; case Token.TokenValue.MINUS: case Token.TokenValue.TIMES: case Token.TokenValue.DIV: if (e1Type == ObjectType.intType && e2Type == ObjectType.intType) { return(ObjectType.intType); } //erreur break; //return ObjectType.intType; default: return(ObjectType.undefinedType); } return(ObjectType.undefinedType); }
public override ObjectType getExpressionType() { return(exp.getExpressionType()); }