Это командный фрагмент, который можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
Slice - извлечение заранее определенных фрагментов из файла ASCII.
СИНТАКСИС
кусочек [-v] [-y политика вывода] [-o слайстерм:выходной файл[@chmodcmd] [#политика вывода] ..]
[входной_файл]
кусочек [-V] [-h]
Версия
1.3.8 (10 февраля 2002 г.)
ОПИСАНИЕ
вход Принцип
Команда кусочек программа читает входной_файл (или из СТАНДИН if входной_файл не дано или равно
`` - '' ') и делит уже подготовленное содержимое ASCII на возможно перекрывающиеся области,
под названием ломтики. Эти срезы определяются включением блоков, определяемых началом и концом.
разделители, которые должны быть уже в файле. Эти разделители блоков используют синтаксис
[ИМЯ: ...: ИМЯ]
или в качестве альтернативы (если нет возможности неправильного толкования, т. е. нет перекрытия или
сложенные ломтики)
[ИМЯ: ... :]
Команда ИМЯ идентификатор должен соответствовать регулярному выражению "" [_A-Z0-9] + "", т.е.
ИМЯ представляет собой строку, состоящую только из прописных букв, цифр или символов подчеркивания.
Таких определений срезов может быть сколько угодно, и их может быть больше одного.
срез с таким же названием. Результирующий срез представляет собой объединение всех равных именованных срезов.
На самом деле используйте это, чтобы распределить большой кусок по разрозненным участкам входной_файл.
Результат Выбор Схема
Окончательные выходные данные рассчитываются термином среза, состоящим из имен срезов и набора
Теория операторов. Распознается следующий синтаксис (в порядке LR(1) грамматический анализ)
для условий среза:
SLICE_TERM :: = "ИМЯ"
Сам срез NAME. Это имя должно совпадать с регулярным выражением "" [_A-Z0-9 * {}] + "''.
Здесь возможны два случая: «ИМЯ» - это либо простое имя фрагмента, состоящее только из
прописные буквы, цифры или символ подчеркивания. Или это имя среза с подстановочными знаками
обозначается звездочкой.
Первый вариант просто расширяется до объединения всех фрагментов, названных в точности «ИМЯ». В
второй вариант расширяется до объединения всех фрагментов, которые соответствуют подстановочному знаку
узор "ИМЯ". Здесь звездочка имеет семантическое значение отсутствия или любого количества
символы. Есть один частный случай, когда сразу за звездочкой следует
символы, заключенные в фигурные скобки, это означает отсутствие или любое количество символов, но не
это последовательность символов.
SLICE_TERM :: = "! NAME" | "~ ИМЯ"
Команда ИМЕНИ среза (т.е. ВСЕ \ ИМЯ).
В формуле: {x во ВСЕХ: x в NAME}
SLICE_TERM :: = "ИМЯ1xNAME2", "ИМЯ1 ^ ИМЯ2"
Команда Эксклюзивный или связь между срезом NAME1 и срезом NAME2. В теории множеств также
под названием симметричный разница: (NAME1uNAME2) \ (NAME1nNAME2) или альтернативно
(ИМЯ1n! ИМЯ2) u (! ИМЯ1nNAME2).
В формуле: {x во ВСЕХ: (x в NAME1 или x в NAME2), а не (x в NAME1 и x в
ИМЯ2)}.
SLICE_TERM :: = "ИМЯ1 \ ИМЯ2", "ИМЯ1-ИМЯ2"
Команда разница фрагмента NAME1 и фрагмента NAME2, то есть NAME1 минус NAME2.
В формуле: {x во ВСЕХ: x в NAME1 и x в NAME2}
SLICE_TERM :: = "NAME1nNAME2" | "NAME1% NAME2"
Команда пересечение фрагмента NAME1 и фрагмента NAME2.
В формуле: {x во ВСЕХ: x в NAME1 и x в NAME2}
SLICE_TERM :: = "ИМЯ1uNAME2", "ИМЯ1 + ИМЯ2"
Команда союз фрагмента NAME1 и фрагмента NAME2.
В формуле: {x во ВСЕХ: x в NAME1 or x в NAME2}
SLICE_TERM :: = "(" SLICE_TERM ")"
Сгруппированный термин фрагмента. Используйте это, чтобы установить другой порядок оценки. По умолчанию,
все операторы левоассоциативны, за исключением правоассоциативного дополнения.
Операторы перечислены ниже в порядке убывания приоритета:
- uxn!
Фильтр Выбор: Ломтик Уровни
Поскольку срезы могут перекрываться и накладываться друг на друга, каждому назначается уровень определения.
slice во время анализа ввода. Эти уровни варьируются от 1 до максимального встречающегося (
уровень 0 - это весь файл, т.е. «ВСЕ»). Когда начинается срез, ему назначается самый низкий
свободный уровень, начиная с уровня 1. Пока один уровень используется, он не может быть назначен
снова до тех пор, пока не будет виден конечный разделитель соответствующего фрагмента.
Пример:
[A: [B :: B]: A] [C: [D: [E :: C]: D] [F :: E]: F]
3 E ----------- E
2 Б - Б Д -------- Г
1 A -------- A C -------- C F ----- F
0
Здесь слайсу A назначается уровень 1. Затем B назначается уровень 2, потому что уровень 1 все еще находится в
использование A. Затем достигается конец B, уровень 2 освобождается. Тогда достигается конец A
и уровень 1 теперь также бесплатен, поэтому C снова назначается уровень 1. Сейчас используется только уровень 1,
поэтому D назначается уровень 2. Затем E назначается уровень 3. Затем виден конец C и уровень
1 освобожден. Затем виден конец D и уровень 2 освобождается. Теперь начинается F, и потому что только
уровень 3 используется, ему назначается уровень 1. Затем конец E освобождает уровень 3 и конец
of F освобождает уровень 1. Наконец, все уровни не используются. Это означает, что нарезка
исправить.
Если в конце этого процесса остались какие-либо использованные уровни, это указывает на ошибку ввода.
и кусочек отвечает сообщением об ошибке, отображающим все еще открытые срезы.
Этот сложный механизм уровней необходим для операций с детализированным набором, где особенно
должны быть включены или исключены только срезы. Итак, чтобы облегчить жизнь, несколько псевдосрезов
определяются автоматически:
"DEFn"
Объединение всех определенных пользователем срезов ровно на уровне n (0 <= n <= oo).
"UNDEFn"
Союз всех нет-определяемые пользователем срезы ровно на уровне n (0 <= n <= oo). Этот
на самом деле это просто "! DEFn".
"DEF"
Объединение всех определенных пользователем срезов в ВСЕ уровни, начиная с уровня 1. Это
фактически является объединением всех "DEFn" срезов.
"UNDEF"
Союз всех нет-определяемые пользователем срезы в ВСЕ уровни, начиная с 1. Это
на самом деле это просто "! DEF".
"ВСЕ"
Весь файл. На самом деле это просто "UNDEF0", потому что на уровне 0 нет пользователей
определенные срезы, поэтому все не определено.
ИМЯ"@"
Это кусок ИМЯ минус объединение всех срезов "DEFn" с min (NAME) <= n <= oo.
Здесь min (NAME) - это самый низкий уровень плюс один, где ИМЯ когда-либо происходило. Ты можешь читать
это как `` НАЗВАНИЕ без всех других фрагментов на более высоких уровнях, которые его перезаписывают ''. Этот
звучит немного безумно, но на самом деле это самая важная конструкция. Пытаться
поймите это, или ваши термины станут очень сложными.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
[-y политика вывода]
Этот флаг изменяет политику вывода в зависимости от событий: «u», если установлен неопределенный набор.
обнаружено, "w" для несовпадающего набора подстановочных знаков, "z", если вывод пустой, и "s", если он
состоит только из пробелов. За каждой буквой следует цифра, говорящая
какое действие связано с такими событиями: 0 для игнорирования таких событий, 1 для отображения предупреждения
сообщение и продолжить, 2, чтобы пропустить соответствующий файл и продолжить, и 3, чтобы прервать
сообщение об ошибке.
Этот флаг состоит из одной или нескольких спецификаций событий, по умолчанию - «u0w0s0z0».
[-o слайстерм:выходной файл[@chmodcmd] [#политика вывода] ..]
Это перенаправляет вывод в файл. Обычно весь файл отправляется в "STDOUT".
(то же, что и «ВСЕ: -»). Вы можете использовать эту опцию больше чем консолидировать выводить более чем на один
файл, а соответствующий слайстерм определяет, какие выходные данные будут включены
в каждый выходной файл.
Необязательный chmodcmd строка предназначена для указания опций для CHMOD команда,
который применяется к выходной файл после написания. Например, используйте «a + r» ', чтобы убедиться, что
файл доступен для чтения веб-серверу "u + x" '' для создания файла с выполнением
набор бит (обычно используется для файлов SSI на веб-сервере с опцией "XBitHack"
доступный).
Необязательный политика вывода строка позволяет изменить политику вывода только для этого вывода
файл без изменения его глобального значения. См. Выше информацию о политике вывода.
Будьте осторожны: при использовании скобок или звездочек внутри слайстерм Вы должны
убедитесь, что он действительно передан кусочек таким образом, т.е. обычно вам нужно избегать этих
символы из интерполяции используемой оболочкой. Сделайте это либо добавив обратную косую черту
перед этими символами или просто заключите полный аргумент параметра в один
цитаты ('').
-v Это устанавливает подробный режим, в котором некоторая информация об обработке будет отображаться на консоли.
для отладки.
-V Отображает строку идентификации версии.
-h Отображает страницу использования.
SPECIAL В ФОКУСЕ
Иногда может быть очень полезно предоставить параметры командной строки непосредственно в
входной файл, например, для настройки одного или нескольких -o параметры. Для этого кусочек признает
линии формы
%! slice ВАРИАНТЫ
во входном файле и автоматически добавляет ОПЦИИ к параметрам строки аргумента. Эти
строки должны начинаться в столбце 0.
Пример:
%! slice -oTOC: contents.txt
ПРИМЕР
Предположим, что следующий простой файл статьи на нескольких языках статья.источник, написано в HTML:
[EN: Titlepage:] [DE: Titelseite:]
[EN: само название:] [DE: Der Titel selbst:]
[EN: ... English Abstract ...:]
[DE: ... Deutsche Zusammenfassung ...:]
[EN: ... Текст на английском языке ...:]
[DE: ... Deutscher Text ...:]
Команда
slice -o ENuUNDEF: article.html.en -o DEuUNDEF: article.html.de
затем создает следующие файлы:
article.html.ru:
Титульная страница
Само название
... Английский Аннотация ...
... Английский текст ...
Article.html.de:
Тителсеит
Der Titel selbst
... Deutsche Zusammenfassung ...
... Deutscher Text ...
ОГРАНИЧЕНИЕ
Текущая реализация обрабатывает только анонимные конечные разделители «":] "'' правильно и ясно
случаи, когда недопустимая интерпретация невозможна, т. е. когда не происходит перекрытия. Для
экземпляр в
... [A: ... [B: ...: A] ...:] ...
конечный разделитель неправильно назначен фрагменту «B». Итак, будьте осторожны при использовании
анонимные разделители концов в перекрывающихся ситуациях. Чистая укладка, как
... [A: ... [B: ...:] ...:] ...
разрешено и обрабатывается правильно, но только если вы интерпретируете это как
... [A: ... [B: ...: B] ...: A] ...
АВТОРСКИЕ ПРАВА
Авторские права (c) 1997-2002 Ральф С. Энгельшалл.
Copyright (c) 1999-2002 Дени Барбье.
Используйте slice онлайн с помощью сервисов onworks.net