Лекс (программное обеспечение)
Оригинальный автор(ы) | Майк Леск , Эрик Шмидт |
---|---|
Первоначальный выпуск | 1975 год |
Репозиторий | |
Написано в | С |
Операционная система | Unix , Unix-подобные , Plan 9 |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | План 9: МОЯ лицензия |
Lex — компьютерная программа , генерирующая лексические анализаторы («сканеры» или «лексеры»). [1] [2] Он обычно используется с yacc генератором синтаксического анализатора и является стандартным генератором лексического анализатора во многих Unix и Unix-подобных системах. Эквивалентный инструмент указан как часть стандарта POSIX . [3]
Lex считывает входной поток, определяющий лексический анализатор, и записывает исходный код , реализующий лексический анализатор, на языке программирования C.
Помимо C, некоторые старые версии Lex могли генерировать лексер в Ratfor . [4]
История [ править ]
«Лекс» изначально был написан Майком Леском и Эриком Шмидтом. [5] и описан в 1975 г. [6] [7] В последующие годы Lex стал стандартным генератором лексического анализатора во многих Unix и Unix-подобных системах. В 1983 году Lex был одним из нескольких инструментов UNIX, доступных для операционной системы UNOS компании Charles River Data Systems по лицензии Bell Laboratories . [8] Хотя изначально Lex распространялся как проприетарное программное обеспечение, некоторые версии теперь имеют открытый исходный код . Версии Lex с открытым исходным кодом, основанные на оригинальном проприетарном коде, теперь распространяются вместе с операционными системами с открытым исходным кодом, такими как OpenSolaris и Plan 9 от Bell Labs . Одна популярная версия Lex с открытым исходным кодом, называемая flex или «быстрый лексический анализатор», не является производной от проприетарного кода.
Структура файла Lex [ править ]
Структура файла Lex намеренно аналогична структуре файла yacc: файлы разделены на три раздела, разделенные строками, содержащими только два знака процента, следующим образом:
- Раздел определений определяет макросы и импортирует файлы заголовков, на C. написанные Здесь также можно написать любой код на языке C, который будет дословно скопирован в сгенерированный исходный файл.
- Раздел правил связывает шаблоны регулярных выражений с операторами C. Когда лексер видит во входных данных текст, соответствующий заданному шаблону, он выполняет соответствующий код C.
- Раздел кода C содержит инструкции и функции C , которые дословно копируются в сгенерированный исходный файл. Эти операторы предположительно содержат код, вызываемый правилами в разделе правил. В больших программах удобнее размещать этот код в отдельном файле, подключаемом во время компиляции .
Пример файла Lex [ править ]
Ниже приведен пример файла Lex для гибкой версии Lex. Он распознает строки чисел (положительные целые числа) во входных данных и просто распечатывает их.
/*** Definition section ***/
%{
/* C code to be copied verbatim */
#include <stdio.h>
%}
%%
/*** Rules section ***/
/* [0-9]+ matches a string of one or more digits */
[0-9]+ {
/* yytext is a string containing the matched text. */
printf("Saw an integer: %s\n", yytext);
}
.|\n { /* Ignore all other characters. */ }
%%
/*** C Code section ***/
int main(void)
{
/* Call the lexer, then quit. */
yylex();
return 0;
}
Если этот вход передан flex
, он будет преобразован в файл C, lex.yy.c
. Его можно скомпилировать в исполняемый файл, который сопоставляет и выводит строки целых чисел. Например, учитывая ввод:
abc123z.!&*2gj6
программа напечатает:
Saw an integer: 123 Saw an integer: 2 Saw an integer: 6
Использование Lex с другими инструментами программирования [ править ]
Использование Lex с генераторами парсеров [ править ]
Lex, как и другие лексические анализаторы, ограничивает правила теми, которые можно описать регулярными выражениями . Благодаря этому Lex может быть реализован с помощью конечных автоматов, как показывает Хомского иерархия языков . Для распознавания более сложных языков Lex часто используется с генераторами парсеров, такими как Yacc или Bison . Генераторы анализаторов используют формальную грамматику для анализа входного потока.
Обычно предпочтительнее, чтобы синтаксический анализатор, сгенерированный, например, Yacc, принимал поток токенов («поток токенов») в качестве входных данных, а не обрабатывал поток символов («поток символов») напрямую. . Lex часто используется для создания такого потока токенов.
Синтаксический анализ без сканера относится к непосредственному анализу входного потока символов без отдельного лексера.
Лекс и сделай [ править ]
make — это утилита, которую можно использовать для поддержки программ, использующих Lex. Make предполагает, что файл с расширением .l
это исходный файл Lex. Внутренний макрос make LFLAGS
может использоваться для указания опций Lex, которые будут автоматически вызываться командой make. [9]
См. также [ править ]
Ссылки [ править ]
- ^ Левин, Джон Р .; Мейсон, Тони; Браун, Дуг (1992). lex & yacc (2-е изд.). О'Рейли . стр. 1–2 . ISBN 1-56592-000-7 .
- ^ Левин, Джон (август 2009 г.). флекс и бизон . О'Рейли Медиа. п. 304. ИСБН 978-0-596-15597-1 .
- ^ Базовые спецификации открытой группы, выпуск 7, издание 2018 г. § Shell & Utilities § Utilities § lex
- ^ Джон Р. Левин; Джон Мейсон; Дуг Браун (1992). Лекс и Якк . О'Рейли. ISBN 9781565920002 .
- ^ Леск, МЭ; Шмидт, Э. «Lex – генератор лексического анализатора» . Архивировано из оригинала 28 июля 2012 г. Проверено 16 августа 2010 г.
- ^ Леск, МЭ; Шмидт, Э. (21 июля 1975 г.). «Lex — генератор лексического анализатора» (PDF) . СИСТЕМА РАЗДЕЛЕНИЯ ВРЕМЕНИ UNIX: РУКОВОДСТВО ПРОГРАММИСТА UNIX, седьмое издание, том 2B . bell-labs.com . Проверено 20 декабря 2011 г.
- ^ Леск, Мэн (октябрь 1975 г.). «Lex - Генератор лексического анализатора». Комп. наук. Тех. Реп. № 39 . Мюррей Хилл, Нью-Джерси: Bell Laboratories.
- ^ Путеводитель по Вселенной для инсайдеров (PDF) . Charles River Data Systems, Inc., 1983. с. 13.
- ^ "делать" . Базовые характеристики открытой группы (6). IEEE и Открытая группа. 2004. IEEE Std 1003.1, издание 2004 г.
Внешние ссылки [ править ]

- Использование Flex и Bison на Macworld.com
- Solaris 11.4 по пользовательским командам Справочное руководство –
- Plan 9 , том 1 Руководство программиста –