parser: schaut fertig aus... muss nur noch getestet werden :D
[uebersetzerbau-ss10.git] / parser / scanner.lex
index 8b1f859dfb2e4e41ecedbf7d66723056da012e03..6a2de5d61508b3d82fd97131c81ccf349f1b608a 100644 (file)
@@ -3,14 +3,14 @@
        #include <string.h>
        #include "parser.h"
 
-KEYWORD func|end|struct|var|if|then|else|while|do|return|or|not
-SPECIAL_CHAR \;|\.|\(|\)|\,|\:=|\-|\+|\*|>=|=
-IDENTIFIER [[:alpha:]_][[:alnum:]_]*
-NUMBER_HEX [0-9][0-9A-Fa-f]*H
+KEYWORD struct|end|method|var|if|then|else|while|do|return|not|or|this
+SPECIAL_CHAR \;|\(|\)|\:=|\.|\-|\*|\<|\=|\.
+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 \*\)
+COMMENT_START \/\*
+COMMENT_END    \*\/
 
 %x COMMENT
 %option yylineno
@@ -20,20 +20,16 @@ COMMENT_END \*\)
 
 <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");
+       fprintf(stderr, "Kommentar nicht geschlossen\n");
        exit(1);
 }
 
-<COMMENT>{WHITESPACE} /* ignore */
-
-<COMMENT>. /* ignore everything inside comment */
+<COMMENT>(.|\n) /* alles im kommentar wird ignoriert */
 
-func return(FUNC);
-end return(END);
 struct return(STRUCT);
+end return(END);
+method return(METHOD);
 var return(VAR);
 if return(IF);
 then return(THEN);
@@ -41,16 +37,16 @@ else return(ELSE);
 while return(WHILE);
 do return(DO);
 return return(RETURN);
-or return(OR);
 not return(NOT);
+or return(OR);
+this return(THIS);
 
-{IDENTIFIER} return(ID);
+{IDENTIFIER} return(IDENT);
 
 {NUMBER_DEC} return(NUM);
 {NUMBER_HEX} return(NUM);
 
 \:= return(ASSIGN);
->= return(GREATER);
 {SPECIAL_CHAR} return(yytext[0]);
 
 {WHITESPACE} /* ignore */