ОБЗОР ИСПОЛЬЗОВАНИЯ LEX'А
lex - это инструмент, который позволяет решать широкий класс проблем, возникающих при обработке текстов, шифровании, реализации компиляторов и в других областях. При текстовой обработке Вы можете проверить правильность написания слов, при шифровании - переводить определенные шаблоны символов в другие, при реализации компиляторов - определить, какие лексемы (минимальные значащие последовательности символов) встречаются в компилируемой программе. Общей для всех этих задач является необходимость распознавать цепочки символов, удовлетворяющие определенным критериям. Если Вы разрабатываете компилятор, Вам придется реализовать лексический анализатор. Отсюда и название - lex.
В принципе, чтобы справиться с перечисленными проблемами, не обязательно использовать lex. Можно просто писать программы на стандартном языке, подобном C. В самом деле, lex также порождает C-программы. (Поэтому lex можно назвать генератором программ). Дело, однако, в том, что lex позволяет достичь цели проще и быстрее. Его слабость в том, что он зачастую порождает C-программы, которые длиннее, чем необходимо для конкретной задачи, и которые работают медленнее, чем могли бы. Но во многих приложениях это несущественно, и в целом преимущества использования lex значительно превосходят недостатки.
Чтобы понять, что делает lex, изучите приведенную ниже диаграмму. Начало - это исходный lex-текст (часто называемый lex-спецификацией), который Вы, программист, пишете для решения Вашей задачи. lex-спецификация состоит из списка правил, определяющих последовательности символов (выражения), которые надо искать во входном тексте, и действия, которые надо выполнять, когда выражения найдены. Спецификация читается генератором программ lex. Результатом работы генератора является C-программа. Ее, в свою очередь, надо обработать стандартным C-компилятором, чтобы сгенерировать выполняемую объектную программу, осуществляющую лексический анализ. Отметим, что обычно эта процедура не автоматическая; требуется вмешательство пользователя.
Наконец, программа лексического анализа, полученная в результате этого процесса, по входным данным - произвольному исходному файлу - формирует ожидаемые выходные данные, например, измененный текст или список лексем.
lex можно также использовать для сбора статистической информации о свойствах входного текста, таких, как число символов, длина слов, число вхождений слов, и т.д. В следующих разделах этой главы Вы увидите, как:
- Писать lex-спецификации для решения некоторых из названных задач.
- Транслировать lex-спецификации.
- Компилировать, редактировать связи и запускать лексический анализатор на C.
- Выполнять программу лексического анализа.
После этого Вы сможете самостоятельно оценить мощность средств, предоставляемых lex'ом.