Changeset 772 for to-imperative/trunk/library/Convert/to_int.cc
- Timestamp:
- May 28, 2003, 9:14:15 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
to-imperative/trunk/library/Convert/to_int.cc
r767 r772 22 22 //пропускаем произвольное количество пробелов, если 23 23 //последовательность термов Char 24 // 25 //FIXME: А если там не пробел, а \n, \r, \v, \t или что там ещё разрешено? 26 //И надо добавить соответствующие тесты. 27 //Кроме того, если уж есть функция is_not_space(), почему бы её здесь не 28 //использовать? 24 //Eсли там не пробел, а \n, \r, \v, \t или не символ-число, 25 // то выдать сообщение об ошибке 29 26 // 30 27 if (t->get_type() == type_char) { 31 28 for (; ;) 32 if (((Char*)t)-> to_wchar_t() != ' ') {29 if (((Char*)t)->is_not_space()) { 33 30 break; 34 31 } … … 56 53 //и у него нет знака 57 54 // 58 //FIXME: не надо вызывать is_number() каждый раз по новой. Надо либо доп. 59 //переменную использовать, либо switch. Также очень неплохо вместо 60 //обозначения возвращаемых значений цифрами завести enum. 61 // 62 if ((t->get_type() == type_word) ) 63 if (((Word*)t)->is_number() == -1) 55 if ((t->get_type() == type_word) ) { 56 int res_is_number = ((Word*)t)->is_number(); 57 if (res_is_number == minus) 64 58 flag = -1; 65 59 else 66 if( ((Word*)t)->is_number() == 1)60 if(res_is_number == plus) 67 61 flag = 1; 68 62 else 69 if( ((Word*)t)->is_number() == 2)63 if(res_is_number == positive_number) 70 64 flag = 0; 71 65 else 72 66 retfail; 73 67 } 74 68 if (t->get_type() == type_short_int ||t->get_type() == type_word ) { 75 69 t++; … … 85 79 //выражения, которое будет построено из исходного 86 80 // 87 //FIXME: зачем два раза проверяется is_not_space()?88 //89 81 if (t->get_type() == type_char) { 90 82 … … 98 90 len += 1; 99 91 } 100 } 101 else { 102 if (((Char*)t)->is_not_space()) 103 retfail; 104 else 105 continue; 106 } 92 } 93 else 94 retfail; 107 95 } 108 96 //после символов-чисел допускается любое количество пробелов, 109 97 // не допускаются пробелы между символами-числами 110 98 // 111 //FIXME: зачем внутри цикла всё время присваиваем t = temp? Зачем вообще112 //нужна temp?113 //Что будет, если очередной символ -- это " "? Надо добавить114 //соответствующий тест.115 //116 99 else { 117 Term* temp = t;118 while (t emp->get_type()==type_char){119 if (((Char*)t emp)->is_not_space() == false){120 temp++; t = temp;100 t++; 101 while (t->get_type()==type_char){ 102 if (((Char*)t)->is_not_space() == false){ 103 t++; 121 104 } 122 105 else { … … 151 134 //длине выражения, которое будет построено из исходного 152 135 // 153 //FIXME: что, если в начале слова идёт пробел, а у нас уже накоплены цифры?154 //Аналогично с концом слова.155 //156 136 else 157 137 if (t->get_type() == type_word){ 158 if (((Word*)t)->is_number() == 1 ||((Word*)t)->is_number() == -1 ) 138 if (((Word*)t)->is_number() == plus || 139 ((Word*)t)->is_number() == minus ) 140 retfail; 141 //не допускаются пробелы в начале слова, если слово не первое в 142 //выражении 143 // 144 if ( ((Word*)t)->has_space() == 1 ) 145 retfail; 146 //не допускаются пробелы в конце слова, если оно не последнее 147 //в выражении 148 // 149 if ( (((Word*)t)->has_space() == 2) && (t != e_Exp.get_last()) ) 159 150 retfail; 160 151
Note: See TracChangeset
for help on using the changeset viewer.