Flex i Bison/Prosty kalkulator - lekser
Wygląd
Przykład leksera dla prostego kalkulatora.
/* Lex input */
%{
#include <stdlib.h> /* (1) */
#include <stdio.h>
#include "y.tab.h" /* (2) */
void yyerror(char* );
%}
%%
[ \t]+ ; /* (3) */
[0-9]+ { yylval = atoi(yytext); return INTEGER; } /* 4) */
[-+*/()\n] { return *yytext; } /* (5) */
. { char msg[25]; /* (6) */
sprintf(msg, "Niedozwolony znak '%s'", yytext);
yyerror(msg); }
%%
int yywrap(void)
{
return 1;
}}
- Dołączamy potrzebne pliki
- oraz tablice tokenów.
- Ignorujemy spacje i tabulatory.
- Wczytujemy liczby całkowite
- i inne potrzebne znaki.
- Kropka, będąca znakiem specjalnym w wyrażeniach regularnych, oznacza każdy znak, wiec każdy znak nie dopasowany do tej pory spowoduje błąd.