Написание калькулятора с разбором выражений, страница 2

    int FTC_Position;                  /* FUNCTION TO CALCULATE CURRENT READ POSITION*/

    STACK <int> PriorityBuf;           /* PRIORITY STACK */

    STACK <long double> NumberBuf;     /* NUMBER STACK */

    int LastPriority;                  /* LAST PRIORITY FOUND */

    int RisePriority;                  /* PRIORITY RISER */

    bool IsCorrect;                    /* THIS PARAMETER IS TRUE IF FORMULA IS CORRECT */

  private:

  /* FILTER FUNCTION DEFINITIONS */

    /* THIS FUNCTION DELETES ALL SPACES IN CALCULATION FORMULA */

    void DeleteSymbols (void)

    {

      char *result = (char*) malloc (0);

      int pos = 0, i = 0;

      while (i < FTC_Length)

      {

        if (FTC[i] != ' ' && FTC[i] != 10 && FTC[i] != 13)

        {

          result = (char*)realloc (result, pos + 1);

          result[pos] = FTC[i];

          pos++;

          i++;

        }

        else

          i++;

      }

      free (FTC);

      FTC = result;

      FTC_Length = pos;

    }

    /* END OF 'DeleteSymbols' FUNCTION */

    int FunctionCall (char elem)

    {

 /*      switch (elem)

       {

       case 's':

       case 'S':

         if (FTC[FTC_Position + 1] == 'i' || FTC[FTC_Position + 1] == 'I' &&

             FTC[FTC_Position + 2] == 'n' || FTC[FTC_Position + 2] == 'N')

           return 600;

       case 'c':

       case 'C':

         if (FTC[FTC_Position + 1] == 'o' || FTC[FTC_Position + 1] == 'O' &&

             FTC[FTC_Position + 2] == 's' || FTC[FTC_Position + 2] == 'S')

           return 601;

         if (FTC[FTC_Position + 1] == 't' || FTC[FTC_Position + 1] == 'T' &&

             FTC[FTC_Position + 2] == 'g' || FTC[FTC_Position + 2] == 'G')

           return 604;

       case 't':

       case 'T':

         if (FTC[FTC_Position + 1] == 'a' || FTC[FTC_Position + 1] == 'A' &&

             FTC[FTC_Position + 2] == 'n' || FTC[FTC_Position + 2] == 'N')

           return 605;

       case 'a':

       case 'A':

         if (FTC[FTC_Position + 1] == 's' || FTC[FTC_Position + 1] == 'S' &&

             FTC[FTC_Position + 2] == 'i' || FTC[FTC_Position + 2] == 'I' &&

             FTC[FTC_Position + 3] == 'n' || FTC[FTC_Position + 3] == 'N')

           return 602;

         if (FTC[FTC_Position + 1] == 'c' || FTC[FTC_Position + 1] == 'C' &&

             FTC[FTC_Position + 2] == 'o' || FTC[FTC_Position + 2] == 'O' &&

             FTC[FTC_Position + 3] == 's' || FTC[FTC_Position + 3] == 'S')

           return 603;

         if (FTC[FTC_Position + 1] == 't' || FTC[FTC_Position + 1] == 'T' &&

             FTC[FTC_Position + 2] == 'a' || FTC[FTC_Position + 2] == 'A' &&

             FTC[FTC_Position + 3] == 'n' || FTC[FTC_Position + 3] == 'N')

           return 606;

/*         if (FTC[FTC_Position + 1] == 'c' || FTC[FTC_Position + 1] == 'C' &&

             FTC[FTC_Position + 2] == 't' || FTC[FTC_Position + 2] == 'T' &&

             FTC[FTC_Position + 3] == 'g' || FTC[FTC_Position + 3] == 'G')

           return 607;

       }*/

       return 0;

    }

    /* THIS FUNCTION CHECKS FOR PRIORITY ELEMENTS */

    bool isprior (char elem)

    {

      if (elem == '(' || elem == ')' || elem == '+' ||

          elem == '-' || elem == '*' || elem == '/' ||

          elem == '^' || elem == '!' ||

          FunctionCall (elem))