Changeset 765


Ignore:
Timestamp:
May 27, 2003, 12:56:09 PM (18 years ago)
Author:
luba
Message:
  • Comments to the function are added
File:
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/library/Convert/to_int.cc

    r753 r765  
    2020
    2121  Term* t = e_Exp.get_first();
     22  //пропускаем произвольное количество пробелов, если
     23  //последовательность термов Char
     24  //
    2225  if (t->get_type() == type_char) {
    2326    for (; ;)
     
    2730      else t++;
    2831  }
     32  //в переменную flag присваиваем -1, если перед последовательностью
     33  //символов-чисел был знак '-', и 1, если перед последовательностью
     34  //был знак '+'
     35  //
    2936  if (t->get_type() == type_char) {
    3037    if (((Char*)t)->to_wchar_t() == '-') {
     
    3643    }
    3744  };
     45  //функция is_number() проверяет, что терм типа Word является
     46  //записью числа;
     47  //наличие или отсутствие знаков '+' или '-' у термов типа Word проверяет
     48  // так же функция is_number(),
     49  //в переменную flag записывается соответствующее значение:
     50  //-1, если знак '-', 1, если знак '+' и 0, если слово является числом
     51  //и у него нет знака
     52  //
    3853  if ((t->get_type() == type_word) )
    3954    if (((Word*)t)->is_number() == -1)
     
    5166    t++;
    5267  }
     68
     69  //первый терм в выражении порверен, переходим к проверке
     70  //следующих в цикле
     71  //
    5372 
    5473  for (; t < e_Exp.get_last(); t++) {
     74    //если терм типа Char, то необходимо проверить, является ли он
     75    //символом-числом, если да, то его длина добавляется к длине
     76    //выражения, которое будет построено из исходного
     77    //
    5578    if (t->get_type() == type_char) {
    5679
     
    7295        }
    7396      }
    74                  
     97      //после символов-чисел допускается любое количество пробелов,
     98      // не допускаются пробелы между символами-числами
     99      //
    75100      else {
    76101        Term* temp = t;
     
    85110      }
    86111    }
     112    //для термов типа ShortInt не допускается появление отрицательных чисел
     113    //внутри исходного выражения; если число положительное,
     114    //то считается его длина и добавляется к длине выражения, которое будет
     115    //построено из исходного
     116    //
    87117    else
    88118      if (t->get_type() == type_short_int) {
     
    97127        }
    98128      }
     129    //для термов типа Word не допускается появление знаков '+' или '-'
     130    //внутри исходного выражения;
     131    //если слова являются правильной записью числа (допускается
     132    //произвольное количество пробелов в начале и в конце слова,
     133    //не допускаются пробелы внутри слова, что проверяет функция
     134    //is_number(), то считается длина слова и добавляется к
     135    //длине выражения, которое будет построено из исходного
     136    //
    99137    else
    100138      if (t->get_type() == type_word){
    101         // retfail, if '-' or '+' is the 1st symbol in the 2nd, 3rd,... word
    102         //   
    103139        if (((Word*)t)->is_number() == 1 ||((Word*)t)->is_number() == -1 )
    104140          retfail;
     
    114150      retfail;
    115151  };
     152  //проверка, что длина выражения, которое может быть построено
     153  //из исходного, не превышает максимальной длины числа ShortInt
     154  //(в будущем если эта проверка не выполнится, будет построено число
     155  //типа Int)
     156  //
    116157  if (len >= ShortInt::max_len)
    117158    RF_LIB_ERROR("Argument too large for conversion");
    118159 
     160  //посторение выражения, содержащего число, из исходного выражения
    119161  s_Int = ShortInt::create_expr(e_Exp, flag);
    120162 
Note: See TracChangeset for help on using the changeset viewer.