aboutsummaryrefslogtreecommitdiff
path: root/src/tpc.lex
diff options
context:
space:
mode:
Diffstat (limited to 'src/tpc.lex')
-rw-r--r--src/tpc.lex50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/tpc.lex b/src/tpc.lex
new file mode 100644
index 0000000..eaeea89
--- /dev/null
+++ b/src/tpc.lex
@@ -0,0 +1,50 @@
1%{
2/**
3 * UPEM / Compilation / Projet
4 * Pacien TRAN-GIRARD, Adam NAILI
5 */
6
7#include "tpc.tab.h"
8
9int lineno = 1;
10%}
11
12%option noinput nounput noyywrap
13%x COMMENT
14
15%%
16[ \t\r]+ ;
17\n { lineno++;}
18"/*" { BEGIN COMMENT;}
19&& { return AND; }
20"||" { return OR; }
21"*"|"/"|% { yylval.divstar=yytext[0]; return DIVSTAR; }
22"+"|- { yylval.addsub=yytext[0]; return ADDSUB; }
23"<"|"<="|">"|>= { strcpy(yylval.comp, yytext); return ORDER; }
24==|!= { strcpy(yylval.comp, yytext); return EQ; }
25int { strcpy(yylval.type, yytext); return TYPE; }
26float { strcpy(yylval.type, yytext); return TYPE; }
27double { strcpy(yylval.type, yytext); return TYPE; }
28char { strcpy(yylval.type, yytext); return TYPE; }
29void { return VOID; }
30const { return CONST; }
31if { return IF;}
32else { return ELSE;}
33while { return WHILE; }
34return { return RETURN; }
35[a-zA-Z_][a-zA-Z0-9_]* { strcpy(yylval.ident, yytext); return IDENT; }
36[0-9]+ { sscanf(yytext, "%d", &(yylval.num)); return NUM; }
37'\\?.' { if (strlen(yytext)==3)
38 yylval.caractere=yytext[1];
39 else switch(yytext[2]) {
40 case 'n': yylval.caractere='\n'; break;
41 case 't': yylval.caractere='\t'; break;
42 case '\'': yylval.caractere='\''; break;
43 }
44 return CARACTERE; }
45. { return yytext[0];}
46<COMMENT>"*/" { BEGIN INITIAL;}
47<COMMENT>\n { lineno++;}
48<COMMENT>. ;
49%%
50