#include #include #include #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 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); {NUMBER_DEC} return(NUM); {NUMBER_HEX} return(NUM); \:= return(ASSIGN); >= return(GREATER); {SPECIAL_CHAR} return(yytext[0]); {WHITESPACE} /* ignore */ . { fprintf(stderr, "Lexical error on line %i\n", yylineno); exit(1); } %%