%{ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "y.tab.h" extern int lineno; extern void warning(char *s, char *t); %} ws [ \t]+ opencomment #.*$ id [a-zA-Z\_\.-/][a-zA-Z\_\.0-9/]* number (-?[0-9]+)|-?([0-9]*\.[0-9]+) gi_ \{ _ig \} ri_ \( _ir \) quote \" plus \+ mult \* colon \: newline \n sep ; komma , %% (global|GLOBAL|Global) { return GLOBAL; } (all|ALL|All) { return ALL; } (area|AREA|Area) { return AREAS; } (series|SERIES|Series) { return SER; } (sw|SW|sweep|SWEEP|Sweep) { return SWE; } (if|IF|If) { return IFWORD; } "=" { return EQ; } "%" { return MOD; } "<" { return SM; } ">" { return LG; } (iter) { return ITERWORD; } "/*" { int c1 = 0, c2 = yyinput(); /*use input() with gcc; use yyinput() with g++*/ for (;;) { if (c2 == EOF) break; if ((c1 == '*') && (c2 == '/')) break; c1 = c2; c2 = yyinput(); } } "[" { int c1 = yyinput(); for (;;) { if (c1 == EOF) break; if (c1 == ']') break; c1 = yyinput(); } } {ws} ; {opencomment} { printf("COMMENT: %s\n",yytext); } {sep} { return SEP; } {komma} { return KOMMA; } {gi_} { return GI_; } {_ig} { return _IG; } {ri_} { return RI_; } {_ir} { return _IR; } {quote} { return QUOTE; } {plus} { return PLUS; } {mult} { return MULT; } {colon} { return COLON; } {newline} { lineno++; } {number} { yylval.string = strdup(yytext); return NUMBER; } {id} { yylval.string = strdup(yytext); return ID; } . { printf("\nnot in lex table:%c\n", yytext[0]); return yytext[0]; } %%