Home | History | Annotate | Line # | Download | only in tests
      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
     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 (void)
     63 {
     64     char * buf;
     65     size_t len;
     66     YY_BUFFER_STATE state;
     67 
     68 
     69     /* Scan a good string. */
     70     printf("Testing: test_scan_string(%s): ",INPUT_STRING_1); fflush(stdout);
     71     state = test_scan_string ( INPUT_STRING_1 );
     72     testlex();
     73     yy_delete_buffer(state);
     74 
     75     /* Scan only the first 12 chars of a string. */
     76     printf("Testing: test_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout);
     77     state = test_scan_bytes  ( INPUT_STRING_2, 12 );
     78     testlex();
     79     test_delete_buffer(state);
     80 
     81     /* Scan directly from a buffer.
     82        We make a copy, since the buffer will be modified by flex.*/
     83     printf("Testing: test_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout);
     84     len = strlen(INPUT_STRING_1) + 2;
     85     buf = malloc(len);
     86     strcpy( buf, INPUT_STRING_1);
     87     buf[ len -2 ]  = 0; /* Flex requires two NUL bytes at end of buffer. */
     88     buf[ len -1 ] =0;
     89 
     90     state = test_scan_buffer( buf, len );
     91     testlex();
     92     test_delete_buffer(state);
     93 
     94     printf("TEST RETURNING OK.\n");
     95     return 0;
     96 }
     97