Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Flex (генератор лексических анализаторов)22 февраля 2011Flex генератор лексических анализаторов. Заменяет lex в системах на базе пакетов GNU и имеет аналогичную функциональность. При этом Flex не является частью проекта GNU. Использование
На входе получает текст в свободном формате и правила выделения лексем. На выходе даёт код анализатора, в виде функции на языке C. Правила задаются в виде регулярных выражений слева и, обычно, кода на языке C справа. Правила содержат три секции, отделяющиеся строкой «%%»: Определения содержат стартовые значения и определения, правила, непосредственно сами выражения и соответствующие им действия, пользовательский код просто включается в вывод flex. Некоторые секции могут отсутствовать. Функция анализатора получает текст на входе и выполняет заданный код для каждой найденной лексемы. Например, данный код, для каждого вхождения username в тексте, выполнит код printf): %% username printf ); Данная функция выведет в поток строку, возвращаемую функцией getlogin. То есть, каждое вхождение username во входном потоке будет заменено значением, возвращаемым getlogin. Например, именем текущего пользователя. Правила, согласно которым, итоговая функция должна печатать на выходе тип лексемы и значения для некоторых лексем: %% if printf ; + printf ; {D}+ printf ; "++" printf ; "+" printf ; Пример подсчёта количества строк и символов в тексте: %{ int num_lines = 0, num_chars = 0; %} %% \n ++num_lines; ++num_chars; . ++num_chars; %% main { yylex; printf; } Далее, функцию созданную генератором возможно использовать с генераторами синтаксических анализаторов. Обычно flex используют с yacc или bison. Синтаксический анализатор использует вызов функции yylex, созданной генератором flex для поиска следующей лексемы. Просмотров: 1887
|