Changeset 868
- Timestamp:
- Jun 25, 2003, 9:50:36 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
to-imperative/trunk/library/Convert/to_int.cc
r865 r868 14 14 namespace Convert 15 15 { 16 /*17 1. Ищем цифру, + или -.18 - Если встретили + или -, переходим к шагу 2.19 - Если встретили цифру, переходим к шагу 3.20 - Если встретили пробел, ищем дальше.21 - Если встретили что-то ещё, то $fail.22 - Если кончилась строка, полученная из текущего терма, берём след.23 - Если выражение кончилось, то $fail.24 2. Ищем первую цифру.25 - Сдвигаемся на символ влево.26 - Если это цифра, переходим к шагу 3.27 - Если что-то ещё, то $fail.28 - Если не смогли сдвинуться, потому что строка кончилась, берём29 след. терм.30 - Если выражение кончилось, то $fail.31 3. Ищем первую ненулевую цифру.32 - Если встретили ненулевую цифру, переходим к шагу 4.33 - Если встретили 0, ищем дальше.34 - Если встретили пробел, то кладём текущую строку во вспомогательную35 и переходим к последнему шагу.36 - Если встретили что-то ещё, то $fail.37 - Если кончилась строка, полученная из текущего терма, берём след.38 - Если выражение кончилось, то возвращаем ShortInt::create_expr(0).39 4. Считываем цифры и только цифры.40 - Если встретили цифру, повторяем шаг 4.41 - Если встретили пробел, то приплюсовываем текущую строку ко42 вспомогательной и переходим к последнему шагу.43 - Если встретили что-то ещё, то $fail.44 - Если кончилась строка, полученная из текущего терма, то45 приплюсовываем её к нашей вспомогательной строке, и берём след.46 терм.47 - Если выражение кончилось, то приплюсовываем текущую строку, и48 вызываем нужный create_expr от вспомогательной строки.49 Последний шаг. Обработка завершающих пробелов.50 - Если встретили пробел, повторяем шаг.51 - Если встретили что-то ещё, то $fail.52 - Если кончилась строка, берём след. терм.53 - Если выражение кончилось, вызываем нужный create_expr от54 вспомогательной строки.55 56 */57 16 58 17 RF_FUNC (To_m_Int, (RF_ARG e_Exp), (RF_RES s_Int)) … … 60 19 Term* p = e_Exp.get_last(); 61 20 21 //строка-результат 22 // 62 23 pxx::WString str; 24 25 //вспомогательная строка, получающаяся из каждого терма 26 // 63 27 pxx::WString s; 28 64 29 size_t j = 0; 65 30 size_t k = 0; … … 71 36 bool digit = false; 72 37 38 //если нашли цифру или знак, то выходим из цикла, чтобы обработать 39 //эти и следующие символы, 40 //если знак был '-' и терм был типа Char, добавляем его к строке-результату; 41 //пробелы, предшествующие всем символам, пропускаем; 42 //если ничего, кроме пробелов в выражении не встречается, то $fail; 43 // 73 44 for (; t < p; t++) { 74 45 s = WString(*t); … … 98 69 } 99 70 71 //начинаем просмотр очередного терма с той позиции, на которой нашли 72 //цифру или знак; 73 //ищем первую цифру, не равную 0, если нашли, то выходим из цикла ее 74 //обрабатывать, 75 //если выражение состоит только из 0, то выходим из 76 //функции со значением результата, равным 0, 77 //пропускаем первый знак '+' или '-', если терм типа Char, 78 //и не допускаем появления еще каких-либо знаков; 79 //если встретили не цифру, а что-либо еще, то $fail; 80 // 100 81 for (; t < p; t++) { 101 82 s = WString(*t); … … 121 102 else k = 0; 122 103 } 123 104 105 //начинаем просмотр очередного терма с той позиции, на которой нашли 106 //ненулевую цифру; 107 //если строка, полученная из терма, закончилась, добавляем ее к результату 108 //и переходим к следующему терму; 109 //выходим из цикла, если встретили пробел, добавив к результату 110 //вспомогательную строку; 111 //если встретили не цифру, то $fail; 112 // 124 113 for (; t < p; t++) { 125 114 s = WString(*t); … … 141 130 } 142 131 132 //начинаем просмотр терма с той позиции, где нашли пробел; 133 //если встретили что-то еще, то $fail; 134 // 143 135 for (; t < p; t++) { 144 136 s = WString(*t); … … 150 142 j = 0; 151 143 } 152 144 //создаем выражение из полученной строки 145 //если длина его не превышает ShortInt::max_len 146 // 153 147 if (length < ShortInt::max_len) { 154 148 s_Int = ShortInt::create_expr(str);
Note: See TracChangeset
for help on using the changeset viewer.