Flex i Bison/Prosty kalkulator - lekser

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;
}}
  1. Dołączamy potrzebne pliki
  2. oraz tablice tokenów.
  3. Ignorujemy spacje i tabulatory.
  4. Wczytujemy liczby całkowite
  5. i inne potrzebne znaki.
  6. 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.
Poprzedni rozdział: Wprowadzenie