arm64: codea/abgabe_aa.0
[uebersetzerbau-ss10.git] / parser / scanner.lex
1         #include <stdio.h>
2         #include <stdlib.h>
3         #include <string.h>
4         #include "parser.h"
5
6 KEYWORD struct|end|method|var|if|then|else|while|do|return|not|or|this
7 SPECIAL_CHAR \;|\(|\)|\:=|\.|\-|\*|\<|\=|\,
8 IDENTIFIER [a-zA-Z_][0-9a-zA-Z_]*
9 NUMBER_HEX 0x[0-9A-Fa-f]+
10 NUMBER_DEC [0-9]+
11 WHITESPACE [\t\n\r ]
12 COMMENT_START \/\*
13 COMMENT_END     \*\/
14
15 %x COMMENT
16 %option yylineno
17 %%
18
19 {COMMENT_START} BEGIN(COMMENT);
20
21 <COMMENT>{COMMENT_END} BEGIN(INITIAL);
22
23 <COMMENT><<EOF>> {
24         fprintf(stderr, "Kommentar nicht geschlossen\n");
25         exit(1);
26 }
27
28 <COMMENT>(.|\n) /* alles im kommentar wird ignoriert */
29
30 struct return(STRUCT);
31 end return(END);
32 method return(METHOD);
33 var return(VAR);
34 if return(IF);
35 then return(THEN);
36 else return(ELSE);
37 while return(WHILE);
38 do return(DO);
39 return return(RETURN);
40 not return(NOT);
41 or return(OR);
42 this return(THIS);
43
44 {IDENTIFIER} return(IDENT);
45
46 {NUMBER_DEC} return(NUM);
47 {NUMBER_HEX} return(NUM);
48
49 {SPECIAL_CHAR} return(*yytext);
50
51 {WHITESPACE} /* ignore */
52
53 . {
54                 fprintf(stderr, "Lexical error on line %i\n", yylineno);
55                 exit(1);
56 }
57
58 %%
59