doc: paulchen beispiele {code{a,b},gesamt} entpackt (jedes mal entpacken nervt langsa...
[uebersetzerbau-ss10.git] / aus_sammelwut / paulchen / ublu / ss08 / abgabe / gesamt / .svn / text-base / scanner.lex.svn-base
diff --git a/aus_sammelwut/paulchen/ublu/ss08/abgabe/gesamt/.svn/text-base/scanner.lex.svn-base b/aus_sammelwut/paulchen/ublu/ss08/abgabe/gesamt/.svn/text-base/scanner.lex.svn-base
new file mode 100644 (file)
index 0000000..5cf6520
--- /dev/null
@@ -0,0 +1,67 @@
+       #include <stdio.h>
+       #include <stdlib.h>
+       #include <string.h>
+       #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>{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); @{ @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); }
+
+%%
+
+