X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=aus_sammelwut%2Fpaulchen%2Fublu%2Fss08%2Fabgabe%2Fcodeb%2Fscanner.lex;fp=aus_sammelwut%2Fpaulchen%2Fublu%2Fss08%2Fabgabe%2Fcodeb%2Fscanner.lex;h=5cf6520deedf0e0f1412db549c87e23269888ae1;hb=f6171150f9e60240b256808fc31613530b21db6c;hp=0000000000000000000000000000000000000000;hpb=b82da83a0ad2014c11113818eee6bd5fb5f3445c;p=uebersetzerbau-ss10.git diff --git a/aus_sammelwut/paulchen/ublu/ss08/abgabe/codeb/scanner.lex b/aus_sammelwut/paulchen/ublu/ss08/abgabe/codeb/scanner.lex new file mode 100644 index 0000000..5cf6520 --- /dev/null +++ b/aus_sammelwut/paulchen/ublu/ss08/abgabe/codeb/scanner.lex @@ -0,0 +1,67 @@ + #include + #include + #include + #include "parser.h" + #include "tree.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 \*\) + +%x COMMENT +%option yylineno +%% + +{COMMENT_START} BEGIN(COMMENT); + +{COMMENT_END} BEGIN(INITIAL); + +{COMMENT_START} fprintf(stderr, "Possibly nested comment on line %i\n", yylineno); + +<> { fprintf(stderr, "Unterminated comment.\n"); exit(1); } + +{WHITESPACE} /* ignore */ + +. /* 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); @{ @NUM.value@=strtol(yytext,(char **)NULL,10); @} +{NUMBER_HEX} return(NUM); @{ yytext[strlen(yytext)-1]='\0'; @NUM.value@=strtol(yytext,(char **)NULL,16); @} + +\:= 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); } + +%% + +