#include <string.h>
#include "parser.h"
-KEYWORD func|end|struct|var|if|then|else|while|do|return|or|not
-IDENTIFIER [[:alpha:]_][[:alnum:]_]*
-NUMBER_HEX [0-9][0-9A-Fa-f]*H
-NUMBER_DEC [0-9]+
-WHITESPACE [\t\n\r ]
-COMMENT_START \(\*
-COMMENT_END \*\)
+KEYWORD struct|end|method|var|if|then|else|while|do|return|not|or|this
+IDENTIFIER [a-zA-Z_][0-9a-zA-Z_]*
+NUMBER_HEX 0x[0-9A-Fa-f]+
+NUMBER_DEC [0-9]+
+WHITESPACE [\t\n\r ]
+COMMENT_START \/\*
+COMMENT_END \*\/
%x COMMENT
%option yylineno
%%
-
-{COMMENT_START} BEGIN(COMMENT);
-
-<COMMENT>{COMMENT_END} BEGIN(INITIAL);
-
-<COMMENT>{COMMENT_START} fprintf(stderr, "Possibly nested comment on line %i\n", yylineno);
-
-<COMMENT><<EOF>> { fprintf(stderr, "Unterminated comment.\n"); exit(1); }
-
-<COMMENT>{WHITESPACE} /* ignore */
-
-<COMMENT>. /* ignore everything inside comment */
-
-func return(FUNC);
-end return(END);
-struct return(STRUCT);
-var return(VAR);
-if return(IF);
-then return(THEN);
-else return(ELSE);
-while return(WHILE);
-do return(DO);
-return return(RETURN);
-or return(OR);
-not return(NOT);
-
-{IDENTIFIER} return(ID); @{ @ID.name@=strdup(yytext); @}
-
-{NUMBER_DEC} return(NUM);
-{NUMBER_HEX} return(NUM);
-
-\:= return(ASSIGN);
->= return(GREATER);
-\; return(';');
-\. return('.');
-\( return('(');
-\) return(')');
-\, return(',');
-\- return('-');
-\+ return('+');
-\* return('*');
-= return('=');
-
-{WHITESPACE} /* ignore */
-
-. { fprintf(stderr, "Lexical error on line %i\n", yylineno); exit(1); }
+{COMMENT_START} BEGIN(COMMENT);
+
+<COMMENT>{COMMENT_END} BEGIN(INITIAL);
+
+<COMMENT><<EOF>> {
+ fprintf(stderr, "Kommentar nicht geschlossen\n");
+ exit(1);
+}
+
+<COMMENT>(.|\n) /* alles im kommentar wird ignoriert */
+
+struct return(STRUCT);
+end return(END);
+method return(METHOD);
+var return(VAR);
+if return(IF);
+then return(THEN);
+else return(ELSE);
+while return(WHILE);
+do return(DO);
+return return(RETURN);
+not return(NOT);
+or return(OR);
+this return(THIS);
+
+{IDENTIFIER} return(IDENT); @{ @IDENT.name@ = strdup(yytext); @}
+
+{NUMBER_DEC} return(NUM);
+{NUMBER_HEX} return(NUM);
+
+\:= return(ASSIGN);
+\; return(';');
+\( return('(');
+\) return(')');
+\. return('.');
+\- return('-');
+\* return('*');
+\< return('<');
+\= return('=');
+\, return(',');
+
+{WHITESPACE} /* ignore */
+
+. {
+ fprintf(stderr, "Lexical error on line %i\n", yylineno);
+ exit(1);
+}
%%
-