Lex

Lex — программа для генерации лексических анализаторов, обычно используемая совместно с генератором синтаксических анализаторов yacc. Lex был первоначально написан Эриком Шмидтом (Eric Schmidt) и Майком Леском (Mike Lesk) и является стандартным генератором лексических анализаторов в операционных системах Unix, а также включён в стандарт POSIX. Lex читает входной поток, описывающий лексический анализатор, и даёт на выходе исходный код на языке программирования Cи.

Структура входного файла

Структура lex-файла сделана подобно структуре yacc-файла; файл разделяется на три блока, разделённые строками, содержащими по два символа процента:

Блок определений
%%
Блок правил
%%
Блок кода на Си
  • В блоке определений задаются макросы и заголовочные файлы. Здесь также допустимо писать любой код на Си — он будет скопирован в результирующий файл.
  • Блок правил — наиболее важная часть; она описывает шаблоны и ассоциирует их с вызовами. Шаблоны представляют собой регулярные выражения. Когда анализатор видит текст, подходящий под шаблон, он выполняет указанный код.
  • Блок кода содержит операторы и функции на Си, которые копируются в генерируемый файл. Предполагается, что эти операторы содержат код, вызываемый правилами из предыдущего блока. Для сложных анализаторов бывает более удобно поместить этот код в отдельный файл, подключающийся на стадии компиляции.

См. также

  • Flex
  • JLex
  • ANTLR

Ссылки

  • GPLex Архивная копия от 9 мая 2015 на Wayback Machine — генератор сканнеров на языке C#
  • Создание анализаторов текста при помощи yacc и lex Архивная копия от 19 августа 2016 на Wayback Machine
  • Lex и YACC в примерах Архивная копия от 27 ноября 2020 на Wayback Machine
Перейти к шаблону «Команды Unix»
Команды Unix
Перейти к шаблону «POSIX.1-2008»
Утилиты POSIX.1-2008
Перейти к шаблону «GNU Coreutils»
Файловые утилиты
Текстовые утилиты
Shell-утилиты
другие утилиты