Jump to content

Лекс (программное обеспечение)

Лекс
Оригинальный автор(ы) Майк Леск , Эрик Шмидт
Первоначальный выпуск 1975 год ; 49 лет назад ( 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]

См. также [ править ]

Ссылки [ править ]

  1. ^ Левин, Джон Р .; Мейсон, Тони; Браун, Дуг (1992). lex & yacc (2-е изд.). О'Рейли . стр. 1–2 . ISBN  1-56592-000-7 .
  2. ^ Левин, Джон (август 2009 г.). флекс и бизон . О'Рейли Медиа. п. 304. ИСБН  978-0-596-15597-1 .
  3. ^ Базовые спецификации открытой группы, выпуск 7, издание 2018 г. § Shell & Utilities § Utilities § lex
  4. ^ Джон Р. Левин; Джон Мейсон; Дуг Браун (1992). Лекс и Якк . О'Рейли. ISBN  9781565920002 .
  5. ^ Леск, МЭ; Шмидт, Э. «Lex – генератор лексического анализатора» . Архивировано из оригинала 28 июля 2012 г. Проверено 16 августа 2010 г.
  6. ^ Леск, МЭ; Шмидт, Э. (21 июля 1975 г.). «Lex — генератор лексического анализатора» (PDF) . СИСТЕМА РАЗДЕЛЕНИЯ ВРЕМЕНИ UNIX: РУКОВОДСТВО ПРОГРАММИСТА UNIX, седьмое издание, том 2B . bell-labs.com . Проверено 20 декабря 2011 г.
  7. ^ Леск, Мэн (октябрь 1975 г.). «Lex - Генератор лексического анализатора». Комп. наук. Тех. Реп. № 39 . Мюррей Хилл, Нью-Джерси: Bell Laboratories.
  8. ^ Путеводитель по Вселенной для инсайдеров (PDF) . Charles River Data Systems, Inc., 1983. с. 13.
  9. ^ "делать" . Базовые характеристики открытой группы (6). IEEE и Открытая группа. 2004. IEEE Std 1003.1, издание 2004 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 359cdef2d55684c80936117fe66a6755__1707584700
URL1:https://arc.ask3.ru/arc/aa/35/55/359cdef2d55684c80936117fe66a6755.html
Заголовок, (Title) документа по адресу, URL1:
Lex (software) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)