Искусство программирования для Unix
Шрифт:
*
во всех
Любое количество экземпляров предыдущего элемента
?
egrep/Emacs, Perl/Python
Ни одного или один экземпляр предыдущего элемента
+
egrep/Emacs, Perl/Python
Один или несколько экземпляров предыдущего элемента
{п}
egrep,
В точности п повторений предыдущего элемента. Не поддерживается некоторыми
Perl/Python; как \ {n\} в Emacs
{п,}
egrep,
п или более повторений предыдущего элемента. Не поддерживается некоторыми старыми regexp-средствами
Perl/Python; как \ {n, \} в Emacs
{ш,п}
egrep,
Минимум ш и максимум п повторений предыдущего элемента. Не поддерживается некоторыми старыми regexp-средствами
Perl/Python; как \{m,n\} в Emacs
1
egrep,
Элемент слева или справа. Обычно используется с некоторой формой группирующих разделителей
Perl/Python; как \ | в Emacs
(...)
Perl/Python; как \ (. . . \) в более старых версиях
Интерпретировать данный шаблон как группу (в более новых regexp-функциях, например в языках Perl и Python). Более старые средства, такие как regexp-функции в Emacs и в утилите grep требуют записи \ (... \)
8.2.3. Учебный пример: Glade
Glade представляет собой средство разработки интерфейсов для библиотеки Х-инструментария59 GTK с открытым исходным кодом. Glade позволяет разрабатывать GUI-интерфейс путем интерактивного выбора, размещения и модификации элементов управления на панели интерфейса. GUI-редактор создает XML-файл, описывающий проектируемый интерфейс. Полученный файл, в свою очередь, можно передать одному из нескольких генераторов кода, которые непосредственно создают С, С++, Python- или Perl-код для интерфейса. Сгенерированный код затем вызывает создаваемые разработчиком функции, определяющие поведение интерфейса.
XML-формат Glade для описания GUI-интерфейсов является хорошим примером простого узкоспециального мини-языка. В примере 8.1 показан G/ade-формат для GUI-интерфейса "Hello, world!".
Адекватная спецификация в G/fiufe-формате предполагает набор действий, предпринимаемых GUI-интерфейсом в ответ на действия пользователя. GUI-интерфейс Glade интерпретирует данные спецификации как структурированные файлы данных. С другой стороны, генераторы кода Glade используют их для написания программ, реализующих GUI. Для некоторых языков (включая Python) существуют библиотеки времени выполнения, которые позволяют пропустить этап генерирования кода и просто создавать GUI непосредственно во время обработки XML-спецификации (интерпретируя Glade-разметку
Программисту, освоившему подробности XML-формата, разметка Glade представляется довольно простым языком. Она решает только две задачи: объявляет иерархии GUI-элементов и связывает свойства с элементами управления. Чтобы прочесть спецификацию, представленную в примере, разработчику фактически не требуется досконально разбираться в работе glade. Действительно, имея опыт программирования с помощью GUI-инструментариев и читая данную спецификацию, можно сразу довольно наглядно представить себе интерфейс, создаваемый glade на ее основе. (Для тех, кто не имеет такого опыта, можно отметить, что данная спецификация позволяет получить однокнопочный элемент управления в окне).
Пример 8.1. СШе-спецификация "Hello, world!"
<?xml version®"1.0"?> <GTK-Interface»
<widget>
<class>GtkWindow</class>
< name >Не11oWi ndow</name > <border_width>5</border_width> <Signal>
<name>destroy</name> <handler>gtk_main_quit</handler> </Signal>
<title>Hello</title>
< type >GTK_WINDOW_TOPLEVEL</type > <position>GTK_WIN_POS_NONE</position> <allow_shrink>True</allow_shrink> <allow_grow>True</allow_grow> <auto_shrink>False</auto_shrink>
<widget>
<class>GtkButton</class> <name>Hello World</name> <can_focus>True</can_focus> <Signal>
<name>clicked</name>
<handler>gtk_widget_destroy</handler> <object>HelloWindow</object> </Signal>
<label>Hello World</label> </widget> </widget>
</GTK-Interface>
8.2.4. Учебный пример: т4
Макропроцессор т4( 1) интерпретирует декларативный мини-язык для описания трансформаций текста. Программа т4 представляет собой набор макросов, который определяет способы преобразования одних текстовых строк в другие. В результате применения описаний к входному тексту с командами т4 происходит макрорасширение и на выходе создается текст. (Препроцессор С предоставляет аналогичные службы для компиляторов С, хотя и в несколько отличающемся стиле.)
В примере 8.2 показана макрокоманда т4, которая заставляет утилиту т4 преобразовывать каждое вхождение строки "OS" в тесте ввода в строку "operating system" на выводе. Данный пример тривиален. т4 поддерживает макросы с аргументами, которые можно использовать для более сложных операций, чем просто преобразование одной фиксированной строки в другую. Ввод info m4 в командную строку оболочки позволит получить справочную документацию по данному языку.