Compilerbau

Was ist Flex

Was ist Flex?

Flex ist ein Scanner. Er hilft uns dabei auf Basis von regulären Ausdrücken Patterns zu finden und basierend darauf Logiken auszuführen

Aus einer Flex Datei wird mit Hilfe eines CLI Tools ein C Programm generiert, welches wir dann ausführen können.

Wollen wir beispielsweise alle einzeiligen Kommentare in einem Programm finden könnte das Flex Programm so aussehen:

% option noyywrap

/* Hier können wir jegliche C/C++ Definitionen machen und bei Bedarf Bibliotheken einbinden/*
%{
#include <stdio.h>
/* Counter for comments */
int comment_counter = 0;
%}

/*Zwischen den %% Blöcken geben wir unsere patterns und actions an*/

%%
^[ \t]*\/\/.*  {
    ++comment_counter;
    printf("%s\n", yytext);
}
%%

int main(void)
{
    yylex();
    return 0;
}

Diese programm können wir nun mit

flex -o lex.yy.c linecount.l
gcc -o out lex.yy.c -lfl

unser c Programm generieren und dieses ausführen

Angenommen wir haben eine Datei program.c können wir mit ./out < input.txt unser Programm ausführen und die Datei in der gesucht werden soll angeben