X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=blobdiff_plain;f=gesamt_arm64%2Fscanner.lex;fp=gesamt_arm64%2Fscanner.lex;h=92f6df7a82a53fcd24edd60ae6b80e54f8073f58;hp=0000000000000000000000000000000000000000;hb=30fddf13814e2f0b621aae4d3ec0453abfb7e46e;hpb=97bf6d78677024d70acf0de60d60f70c29286232 diff --git a/gesamt_arm64/scanner.lex b/gesamt_arm64/scanner.lex new file mode 100644 index 0000000..92f6df7 --- /dev/null +++ b/gesamt_arm64/scanner.lex @@ -0,0 +1,67 @@ + #include + #include + #include + #include "parser.h" + +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_END} BEGIN(INITIAL); + +<> { + fprintf(stderr, "Kommentar nicht geschlossen\n"); + exit(1); +} + +(.|\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); @{ @NUM.val@ = strtol(yytext, (char **)NULL, 10); @} +{NUMBER_HEX} return(NUM); @{ @NUM.val@ = strtol(yytext, (char **)NULL, 16); @} + +\:= return(ASSIGN); +\; return(';'); +\( return('('); +\) return(')'); +\. return('.'); +\- return('-'); +\* return('*'); +\< return('<'); +\= return('='); +\, return(','); + +{WHITESPACE} /* ignore */ + +. { + fprintf(stderr, "Lexical error on line %i\n", yylineno); + exit(1); +} + +%% +