#include #include #include #include "parser.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); {NUMBER_HEX} return(NUM); \:= 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); } %%