Блог о математике, программировании, алгоритмах. И немного о работе операционной системы Linux.

среда, 26 мая 2010 г.

О взаимодействии flex и bison

flex — генератор лексических анализаторов, bison — синтаксических. Оба эти пакета действуют по одной и той же схеме: они берут описание грамматики (для flex этот файл содержит описание лексем с помощью регулярных выражений, для bison — описание грамматики в формате близком к BNF) и выдают файлы, содержащие C-программу, которая занимается разбором входного текста. Исторически сложилось так, что работают они в связке, а мануалы для них отдельные. Схема синтаксического разбора входного текста выглядит так:

  1. Лексер (результат работы flex) предоставляет для bison функцию yylex(); которая возвращает код следующей лексемы распознанной во входном файле yyin.
  2. Парсер (результат работы bison) берет входные лексемы от flex (вызов yylex() происходит внутри функции yyparse(); и распознав то или иное правило, вполняет указанное действие.