GCRaistlin
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1. Считывается код с раскрытием %-переменных до тех пор, пока не встретится символ CR/LF вне "()", не относящихся к команде. Полученная последовательность символов заносится в буфер 1. 2. Содержимое буфера 1 разбивается на команды на основании символов CR/LF и "&|()". 3. Команда заносится в буфер 2-1, команда перенаправления ее ввода/вывода (при наличии) - в буфер 2-2. 4. Если включено delayed expansion, парсер обрабатывает содержимое буфера 2-1: ищет со стартовой позиции (первоначально - начало содержимого буфера) два типа символов: пробелы/табуляции и "!". 4.1. Если находит пробельный символ, то заносит слово (символы от стартовой позиции до пробельного символа) в буфер 3-1 и возвращается к п. 4 (стартовая позиция - последний найденный пробельный символ). 4.2. Если находит "!", то считает все символы до следующего "!" именем переменной и заменяет (вместе с обрамляющими "!") на ее значение, после чего возвращается в позицию, где стоял первый "!", и ищет пробельные символы, занося найденные слова в буфер 3-1, пока не достигнет конца вставленного значения переменной. Как достигнет - переходит к п. 4 (стартовая позиция - последний найденный пробельный символ). 5. Исчерпав буфер 2-1, повторяет все то же самое для буфера 2-2, занося результат в буфер 3-2. 6. Выполняет команду - содержимое буфера 3-1, перенаправляя ввод/вывод в соответствии с содержимым буфера 3-2. Переходит к п. 2. | Всего записей: 4000 | Зарегистр. 18-04-2005 | Отправлено: 16:36 22-04-2016 | Исправлено: GCRaistlin, 16:37 22-04-2016 |
|