9337331211e5445c0242997703665de43eecaf46
[ccc.git] / scan.l
1 %option noinput
2 %option nounput
3 %{
4
5 #include <stdio.h>
6 #define YY_USER_ACTION \
7 yylloc.first_line = yylloc.last_line; \
8 yylloc.first_column = yylloc.last_column; \
9 for(int i = 0; yytext[i] != '\0'; i++) { \
10 if(yytext[i] == '\n') { \
11 yylloc.last_line++; \
12 yylloc.last_column = 0; \
13 } \
14 else { \
15 yylloc.last_column++; \
16 } \
17 }
18
19 #include "ast.h"
20 #include "y.tab.h"
21
22 %}
23
24 %start IN_COMMENT
25
26 %%
27
28 <INITIAL>{
29 \/\* BEGIN(IN_COMMENT);
30 [ \n\t] ;
31 \/\/.*\n? ;
32 if return IF;
33 else return ELSE;
34 while return WHILE;
35 var return VAR;
36 true { yylval.expr = expr_bool(true); return BOOL; }
37 false { yylval.expr = expr_bool(false); return BOOL; }
38 return return RETURN;
39 Int return TINT;
40 Bool return TBOOL;
41 Char return TCHAR;
42 Void return TVOID;
43 -> return ARROW;
44 = return ASSIGN;
45 ! return INVERSE;
46 \|\| return BINOR;
47 && return BINAND;
48 == return EQ;
49 != return NEQ;
50 \<= return GEQ;
51 \< return GE;
52 >= return LEQ;
53 > return LE;
54 : return CONS;
55 \+ return PLUS;
56 - return MINUS;
57 \* return TIMES;
58 \/ return DIVIDE;
59 % return MODULO;
60 \^ return POWER;
61 \( return BOPEN;
62 \) return BCLOSE;
63 \{ return COPEN;
64 \} return CCLOSE;
65 \; return SEMICOLON;
66 \[ return SOPEN;
67 \] return SCLOSE;
68 \[\] return NIL;
69 \. return DOT;
70 , return COMMA;
71 \"([^\\"]|\\[\"0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])*\" {
72 yylval.expr = expr_string(trimquotes(yytext)); return STRING; }
73 '([^\\']|\\['0\\abtnvfr]|\\x[0-9a-fA-F][0-9a-fA-F])' {
74 yylval.expr = expr_char(trimquotes(yytext)); return CHAR; }
75 [0-9]+ {
76 yylval.expr = expr_int(atoi(yytext)); return INTEGER; }
77 [_a-zA-Z][_a-zA-Z0-9]* {
78 yylval.ident = safe_strdup(yytext); return IDENT; }
79 }
80 <IN_COMMENT>{
81 \*\/ BEGIN(INITIAL);
82 . ;
83 }
84
85 %%