%{ #include <string.h> #include <math.h> #include <stdio.h> static int lineno=1; %} digit [0-9] id [a-zA-Z_][A-Za-z0-9_]* comment [#].*[\n] white [ \r\t] newline [\n] int {digit}+ float {int}"."{int} num [\+\-]?({float}|{int}) value {int} string \"[^\"]*\" %% if { return IF;} else { return ELSE;} while { return WHILE;} delay { return DELAY;} wait { return WAIT;} var { return VAR;} signal { return PSIGNAL;} press { return PRESS;} release { return RELEASE;} halt { return PHALT;} thread { return PTHREAD;} {comment} { lineno++;} {white} {} {newline} { lineno++;} {id} { yytext[strlen(yytext)-1]='\0'; strcpy(yylval.string,yytext); return ID; } {string} { yytext[strlen(yytext)-1]='\0'; strcpy(yylval.string,yytext+1); return STRING; } {value} { strcpy(yylval.string,yytext); return INT; } . { return yytext[0];} %% int yywrap(void) { return 1; } void yyerror(char *s) { printf("Parse error(line %d):" , lineno); printf("%s\n", s); }