diff options
author | pacien | 2018-02-20 23:40:23 +0100 |
---|---|---|
committer | pacien | 2018-02-20 23:40:23 +0100 |
commit | 66f66d2363e41274589ccad098269e379e348632 (patch) | |
tree | 5f66fac4c92e946ee087e641618d6d22c3f1c0ab /src/tpc.lex | |
parent | 5a30c608fd311c8ce05760335d88208982efc4a5 (diff) | |
download | tpc-compiler-66f66d2363e41274589ccad098269e379e348632.tar.gz |
Import from TD11
Diffstat (limited to 'src/tpc.lex')
-rw-r--r-- | src/tpc.lex | 50 |
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 | |||
9 | int 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; } | ||
25 | int { strcpy(yylval.type, yytext); return TYPE; } | ||
26 | float { strcpy(yylval.type, yytext); return TYPE; } | ||
27 | double { strcpy(yylval.type, yytext); return TYPE; } | ||
28 | char { strcpy(yylval.type, yytext); return TYPE; } | ||
29 | void { return VOID; } | ||
30 | const { return CONST; } | ||
31 | if { return IF;} | ||
32 | else { return ELSE;} | ||
33 | while { return WHILE; } | ||
34 | return { 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 | |||