summaryrefslogtreecommitdiff
path: root/simple-c/lexer.l
blob: be983d1dee43ca9daf1f6937579b18c8467335dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
%{
#include "parser.h"
#define YY_USER_ACTION yylloc.first_line = yylloc.last_line = yylineno;
%}

%option noyywrap

DIGIT [0-9]

%%

"-" { return MINUS; }
"+" { return PLUS; }
"*" { return MULT; }
"/" { return DIV; }
"=" { return EQUAL; }
"(" { return L_PAREN; }
")" { return R_PAREN; }

(\.{DIGIT}+)|({DIGIT}+(\.{DIGIT}*)?([eE][+-]?[0-9]+)?) {
    yylval.dval = atof(yytext);
    return NUMBER;
}

[ \t]+ { /* ignore spaces */ }

"\n" { return END; }

. {
    printf(
        "Error at line %d: unrecognized symbol \"%s\"\n",
        yylloc.first_line,
        yytext);
    exit(0);
}

%%