%{ #define YY_NO_INPUT #include #include #include "SDDAS_types.h" #include "symtab.h" #include "vidf.y.tab.h" int vidf_lineno = 1; %} %option nounput %s COMMENT %% \n { vidf_lineno++; } [ \t]+ ; /* ignore whitespace */ -?(([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) | -?[0-9]+[eE][-+]?[0-9]+ { yylval.pval = malloc (sizeof (SDDAS_FLOAT)); *((SDDAS_FLOAT *) yylval.pval) = atof (yytext); return Y_FLOAT_NUM; } -?[0-9]+ { yylval.pval = malloc (sizeof (SDDAS_INT)); *((SDDAS_INT *) yylval.pval) = atoi (yytext); return Y_INT_NUM; } 0x[0-9A-Fa-f]+ { yylval.pval = malloc (sizeof (SDDAS_INT)); *((SDDAS_INT *) yylval.pval) = strtol (yytext, (char **)NULL, 0); return Y_INT_NUM; } \"[^"\n]*["\n] | \'[^'\n]*['\n] { *(yytext + yyleng - 1) = '\0'; /* remove the last quote */ yylval.sval = strdup (yytext + 1); /* remove the first one */ return Y_QUOTED_STRING; } \/\*.*\*\/ ; \/\* { BEGIN COMMENT; } . ; \*\/ { BEGIN 0; } VIDF | vidf { yylval.ival = Y_VIDF; return Y_VIDF; } STRUCT | struct { yylval.ival = Y_STRUCT; return Y_STRUCT; } INT | int { yylval.ival = Y_INT; return Y_INT; } FLOAT | float { yylval.ival = Y_FLOAT; return Y_FLOAT; } CHAR | char { yylval.ival = Y_CHAR; return Y_CHAR; } STRING | string { yylval.ival = Y_STRING; return Y_STRING; } [a-zA-Z][a-zA-Z0-9_]* { yylval.sval = (void *) strdup (yytext); return Y_NAME; } \* | . { return yytext [0]; } %% int yyerror (char *msg) { extern char GLOBAL_VIDFFileName [255]; static char ErrorPrinted; static char FileName [100]; if (strcmp (FileName, GLOBAL_VIDFFileName) != 0) ErrorPrinted = 0; if (!ErrorPrinted) { printf ("\nError in %s: Line %d : %s at '%s'\n", GLOBAL_VIDFFileName, vidf_lineno, msg, yytext); printf ("\nFix VIDF before continuing...\n\n"); strcpy (FileName, GLOBAL_VIDFFileName); ErrorPrinted = 1; } return -1; }