1 /* 2 * This file is part of flex. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * Neither the name of the University nor the names of its contributors 15 * may be used to endorse or promote products derived from this software 16 * without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE. 22 */ 23 24 %{ 25 /* A template scanner file to build "scanner.c". */ 26 #include <stdio.h> 27 #include <stdlib.h> 28 #include "config.h" 29 30 #define NUMBER 200 31 #define WORD 201 32 33 %} 34 35 %option 8bit prefix="test" 36 %option nounput nomain nodefault noyywrap noinput 37 %option warn reentrant 38 39 40 %% 41 42 [[:space:]]+ { } 43 [[:digit:]]+ { printf("NUMBER "); fflush(stdout);} 44 [[:alpha:]]+ { printf("WORD "); fflush(stdout);} 45 . { 46 fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", 47 yytext[0]); 48 yyterminate(); 49 } 50 51 <<EOF>> { printf("<<EOF>>\n"); yyterminate();} 52 53 %% 54 55 56 #define INPUT_STRING_1 "1234 foo bar" 57 #define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" 58 59 int main(void); 60 61 int 62 main () 63 { 64 char * buf; 65 int len; 66 YY_BUFFER_STATE state; 67 yyscan_t scanner=NULL; 68 69 70 /* Scan a good string. */ 71 printf("Testing: yy_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); 72 yylex_init(&scanner); 73 state = yy_scan_string ( INPUT_STRING_1 ,scanner); 74 yylex(scanner); 75 yy_delete_buffer(state, scanner); 76 yylex_destroy(scanner); 77 78 /* Scan only the first 12 chars of a string. */ 79 printf("Testing: yy_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); 80 yylex_init(&scanner); 81 state = yy_scan_bytes ( INPUT_STRING_2, 12 ,scanner); 82 yylex(scanner); 83 yy_delete_buffer(state,scanner); 84 yylex_destroy(scanner); 85 86 /* Scan directly from a buffer. 87 We make a copy, since the buffer will be modified by flex.*/ 88 printf("Testing: yy_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); 89 len = strlen(INPUT_STRING_1) + 2; 90 buf = (char*)malloc( len ); 91 strcpy( buf, INPUT_STRING_1); 92 buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ 93 buf[ len -1 ] =0; 94 95 yylex_init(&scanner); 96 state = yy_scan_buffer( buf, len ,scanner); 97 yylex(scanner); 98 yy_delete_buffer(state,scanner); 99 yylex_destroy(scanner); 100 101 printf("TEST RETURNING OK.\n"); 102 return 0; 103 } 104