%{ #define YY_INPUT(buf,result,max_size) \ { int digit ; \ int c = getc( yyin ) ; \ result = c == EOF ? 0 : 1 ; \ if( c == '%' ) { \ c = getc( yyin ) ; \ digit = c >= 'A' ? (( c & 0xdf ) - 'A' ) + 10 : c - '0' ; \ digit *= 16 ; \ c = getc( yyin ) ; \ digit += c >= 'A' ? (( c & 0xdf ) - 'A' ) + 10 : c - '0' ; \ buf[0] = (char) digit ; \ } \ else if( c == '+' ) \ buf[0] = ' ' ; \ else \ buf[0] = (char) c ; \ } %} WS [ \t]* ARGS1 {WS}target{WS},{WS}names{WS}\[{WS}n{WS}\]{WS} ARGS2 {WS}names{WS}\[{WS}n{WS}\]{WS},{WS}target{WS} ARGS {ARGS1}|{ARGS2} COND1 {WS}strcmp{WS}\({ARGS}\){WS}=={WS}0{WS} COND2 {WS}0{WS}=={WS}strcmp{WS}\({ARGS}\){WS} COND3 {WS}!{WS}strcmp{WS}\({ARGS}\){WS} COND {COND1}|{COND2}|{COND3} %% answer1={WS}if{WS}\({COND}\){WS} { send_file( "ans5-7.right" ) ; return( 0 ) ; } [^\r]* { send_file( "ans5-7.wrong" ) ; return( 0 ) ; } %% #include main() { yylex() ; } send_file( s ) char *s ; { FILE *fp ; char buf[81] ; printf( "Content-type: text/html\n\n" ) ; fp = fopen( s, "r" ) ; if( fp ) { while( fgets( buf, 80, fp )) { printf( "%s", buf ) ; } fclose( fp ) ; } }