/* route_sim.l by Brett Tjaden */ %{ #include #include #include #include "route_sim.tab.h++" #define YY_SKIP_YYWRAP 1 int yywrap(); void process_name(); int line=1; %} digit [0-9] number {digit}|{digit}{digit}|{digit}{digit}{digit} wspace [ \t] newline [\n] NAME [a-zA-Z][a-zA-Z0-9]* ADDRESS {number}"."{number}"."{number}"."{number} %% {newline} {++line;} "#".*\n {++line;} {wspace} "SUBNET" {return(SUBNET);} "NETMASK" {return(NETMASK);} "HOST" {return(HOST);} "INTERFACE" {return(INTERFACE);} "TABLE" {return(TABLE);} "ROUTE" {return(ROUTE);} "TEST" {return(TEST);} "->" {return(ARROW);} {NAME} {process_name();return(NAME);} {ADDRESS} {process_name();return(ADDRESS);} . {fprintf(stderr,"Lexical Error in line %d of input file\n",line); exit(-1);} %% void process_name() { yylval.string=(char *)malloc((strlen(yytext)*sizeof(char))+sizeof(char)); if (yylval.string == NULL) { fprintf(stderr,"Error: malloc failed in process_name\n"); exit(-1); } else strcpy(yylval.string,yytext); } int yywrap() {return(1);}