rescan_r.direct.l revision 1.1.1.2
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%}
29
30%option 8bit prefix="test"
31%option nounput nomain noyywrap noinput reentrant
32%option warn stack never-interactive
33%x STATE_1
34
35%%
36
37<INITIAL>{
380              yy_push_state (STATE_1, yyscanner);
39.|\n           return 1;
40}
41<STATE_1>{
421              yy_pop_state(yyscanner);
43.|\n           return yy_top_state(yyscanner) + 1;
44}
45
46%%
47
48int
49main (int argc, char* const argv[])
50{
51    FILE* fp;
52    int i;
53    yyscan_t  yyscanner;
54
55    (void)argc;
56
57    if ((fp = fopen(argv[1],"r")) == NULL){
58        perror("Failed to open input file.");
59        return 1;
60    }
61
62    printf("Test 1: Reusing same scanner.\n");
63    testlex_init( &yyscanner );
64    testset_out ( stdout, yyscanner);
65
66    for (i=0; i <  4; ++i){
67
68        rewind(fp);
69        testset_in  ( fp, yyscanner);
70
71        while( testlex(yyscanner) )
72            ;
73    }
74    testlex_destroy( yyscanner );
75    printf("Test 1 OK\n\n");
76
77    printf("Test 2: Rescanning with new scanner each time.\n");
78
79    memset(&yyscanner,0,sizeof(yyscanner)); // Just to be clean about it.
80
81    for (i=0; i < 4; ++i){
82        yyscan_t  s;
83        testlex_init( &s );
84        testset_out ( stdout, s);
85        rewind(fp);
86        testset_in  ( fp, s);
87
88        while( testlex(s) )
89            ;
90        testlex_destroy( s );
91    }
92    printf("Test 2 OK\n\n");
93
94
95    printf("TEST RETURNING OK.\n");
96    return 0;
97}
98