Compilerbau
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 -lflunser 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