Example #1
0
        /*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);
        }
Example #2
0
 public override ObjectType getExpressionType()
 {
     return(exp.getExpressionType());
 }