|
Программирование >> Формирование пользовательского контейнера
static bool tracklndent = true; tok = ; ch = fin.getO; Ищет EOF и возвращает false, если EOF найден. if(!fin) return false; Читает пробелы, if(isspace(ch)) { while(isspace(ch)) { tok += ch; Переустанавливает счетчик отступа (indent counter) для каждой новой строки. if(ch == -Nn) { indent = ; tracklndent = true; else if(tracklndent) indent += ch; ch = fin.getO ; fin.putback(ch); return true; Перестает отслеживать отступ, обнаружив первый отличный от пробела символ в строке. tracklndent = false; Считывает идентификатор или ключевое слово, if(isalpha(ch) II ch== ) { while(isalpha(ch) isdigit(ch) ch== ) { tok += ch; ch = fin.getO ; fin.putback(ch); return true; Расширение С++ У73 Считывает число. if(p.sdigit(ch)) { vAiile(isdigit(ch) ch==. tolower(ch) == е ch == - II ch ==+ ) { tok += ch; ch = fin.getO; fin.putback(ch); return true; Ищет символьную комбинацию \ if(ch == W) { ch2 = fin.getO ; if(ch2 == ) { tok += ch; tok += ch2; ch = fin.getO; } else fin.putback(ch2) ; Ищет символьную константу if (ch == \ ) { ch2 = fin.getO ; if (ch2 == ) { tok += ch; tok += ch2; return true; } else fin.putback(ch2); Ищет начало символов комментария. if(ch == / ) { tok += ch; ch = fin.getO; if(ch == / II ch == *) { tok += ch; else fin.putback(ch); return true; Ищет конец символов комментария, if(ch == *) { tok += ch; ch = fin.getO ; if(ch ==/ ) { tok += ch; else fin.putback(ch); return true; tok += ch; return true; У функции gettokenO ОДИН параметр - строка, именуемая tok и передающая ссылку на объект типа string. Когда функция вернется в вызывающую профамму, в этом объекте будет храниты:я возвращаемая лексема. Функция возвращает true, если лексема прочитана, и false, если достигнут коней файла. Функция gettokenO начинается с присваивания переменной tok пустой строки (null). Затем читается следующий символ из входного файла fin и запоминается в переменной ch. Если во время чтения обнаружен коней файла, функция возвращает false, в противном случае значение ch проверяется на соответствие нескольким вариантам. Во-первых, если переменная ch равна пробелу, начинается цикл, в котором считываются пробелы до первого появления символа, отличного от пробела. Считанные пробелы добавляются к значению переменной tok. Прочитанный непробельный символ возвращается во входной поток с помошью вызова функции fin.putbacko. В конце цикла переменная tok содержит все считанные пробелы, и эта лексема возвращается в вызывающую процедуру-В цикле считывания пробелов надо обратить внимание еще на один вариант обработки. Если начинается новая строка, переменной indent присваивается пустая строка и переменной tracklndent - значение true. Пока nepej менная tracklndent равна true, пробелы запоминаются в переменной
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |