ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/vendor/flex/2.5.39/yylex.c
Revision: 7076
Committed: Thu Jul 9 12:38:31 2015 UTC (8 years, 9 months ago) by laffer1
Content type: text/plain
File size: 4078 byte(s)
Log Message:
flex 2.5.39

File Contents

# Content
1 /* yylex - scanner front-end for flex */
2
3 /* Copyright (c) 1990 The Regents of the University of California. */
4 /* All rights reserved. */
5
6 /* This code is derived from software contributed to Berkeley by */
7 /* Vern Paxson. */
8
9 /* The United States Government has rights in this work pursuant */
10 /* to contract no. DE-AC03-76SF00098 between the United States */
11 /* Department of Energy and the University of California. */
12
13 /* This file is part of flex. */
14
15 /* Redistribution and use in source and binary forms, with or without */
16 /* modification, are permitted provided that the following conditions */
17 /* are met: */
18
19 /* 1. Redistributions of source code must retain the above copyright */
20 /* notice, this list of conditions and the following disclaimer. */
21 /* 2. Redistributions in binary form must reproduce the above copyright */
22 /* notice, this list of conditions and the following disclaimer in the */
23 /* documentation and/or other materials provided with the distribution. */
24
25 /* Neither the name of the University nor the names of its contributors */
26 /* may be used to endorse or promote products derived from this software */
27 /* without specific prior written permission. */
28
29 /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
30 /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
31 /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
32 /* PURPOSE. */
33
34 #include <ctype.h>
35 #include "flexdef.h"
36 #include "parse.h"
37
38
39 /* yylex - scan for a regular expression token */
40
41 int yylex ()
42 {
43 int toktype;
44 static int beglin = false;
45 extern char *yytext;
46
47 if (eofseen)
48 toktype = EOF;
49 else
50 toktype = flexscan ();
51
52 if (toktype == EOF || toktype == 0) {
53 eofseen = 1;
54
55 if (sectnum == 1) {
56 synerr (_("premature EOF"));
57 sectnum = 2;
58 toktype = SECTEND;
59 }
60
61 else
62 toktype = 0;
63 }
64
65 if (trace) {
66 if (beglin) {
67 fprintf (stderr, "%d\t", num_rules + 1);
68 beglin = 0;
69 }
70
71 switch (toktype) {
72 case '<':
73 case '>':
74 case '^':
75 case '$':
76 case '"':
77 case '[':
78 case ']':
79 case '{':
80 case '}':
81 case '|':
82 case '(':
83 case ')':
84 case '-':
85 case '/':
86 case '\\':
87 case '?':
88 case '.':
89 case '*':
90 case '+':
91 case ',':
92 (void) putc (toktype, stderr);
93 break;
94
95 case '\n':
96 (void) putc ('\n', stderr);
97
98 if (sectnum == 2)
99 beglin = 1;
100
101 break;
102
103 case SCDECL:
104 fputs ("%s", stderr);
105 break;
106
107 case XSCDECL:
108 fputs ("%x", stderr);
109 break;
110
111 case SECTEND:
112 fputs ("%%\n", stderr);
113
114 /* We set beglin to be true so we'll start
115 * writing out numbers as we echo rules.
116 * flexscan() has already assigned sectnum.
117 */
118 if (sectnum == 2)
119 beglin = 1;
120
121 break;
122
123 case NAME:
124 fprintf (stderr, "'%s'", nmstr);
125 break;
126
127 case CHAR:
128 switch (yylval) {
129 case '<':
130 case '>':
131 case '^':
132 case '$':
133 case '"':
134 case '[':
135 case ']':
136 case '{':
137 case '}':
138 case '|':
139 case '(':
140 case ')':
141 case '-':
142 case '/':
143 case '\\':
144 case '?':
145 case '.':
146 case '*':
147 case '+':
148 case ',':
149 fprintf (stderr, "\\%c", yylval);
150 break;
151
152 default:
153 if (!isascii (yylval) || !isprint (yylval))
154 fprintf (stderr,
155 "\\%.3o",
156 (unsigned int) yylval);
157 else
158 (void) putc (yylval, stderr);
159 break;
160 }
161
162 break;
163
164 case NUMBER:
165 fprintf (stderr, "%d", yylval);
166 break;
167
168 case PREVCCL:
169 fprintf (stderr, "[%d]", yylval);
170 break;
171
172 case EOF_OP:
173 fprintf (stderr, "<<EOF>>");
174 break;
175
176 case OPTION_OP:
177 fprintf (stderr, "%s ", yytext);
178 break;
179
180 case OPT_OUTFILE:
181 case OPT_PREFIX:
182 case CCE_ALNUM:
183 case CCE_ALPHA:
184 case CCE_BLANK:
185 case CCE_CNTRL:
186 case CCE_DIGIT:
187 case CCE_GRAPH:
188 case CCE_LOWER:
189 case CCE_PRINT:
190 case CCE_PUNCT:
191 case CCE_SPACE:
192 case CCE_UPPER:
193 case CCE_XDIGIT:
194 fprintf (stderr, "%s", yytext);
195 break;
196
197 case 0:
198 fprintf (stderr, _("End Marker\n"));
199 break;
200
201 default:
202 fprintf (stderr,
203 _
204 ("*Something Weird* - tok: %d val: %d\n"),
205 toktype, yylval);
206 break;
207 }
208 }
209
210 return toktype;
211 }