etc/services - sync with NetBSD-8
[minix.git] / external / bsd / flex / dist / yylex.c
blobb5b79882cb4678eec5f6c7b766f9f076198e1229
1 /* $NetBSD: yylex.c,v 1.4 2014/10/30 18:44:05 christos Exp $ */
3 /* yylex - scanner front-end for flex */
5 /* Copyright (c) 1990 The Regents of the University of California. */
6 /* All rights reserved. */
8 /* This code is derived from software contributed to Berkeley by */
9 /* Vern Paxson. */
11 /* The United States Government has rights in this work pursuant */
12 /* to contract no. DE-AC03-76SF00098 between the United States */
13 /* Department of Energy and the University of California. */
15 /* This file is part of flex. */
17 /* Redistribution and use in source and binary forms, with or without */
18 /* modification, are permitted provided that the following conditions */
19 /* are met: */
21 /* 1. Redistributions of source code must retain the above copyright */
22 /* notice, this list of conditions and the following disclaimer. */
23 /* 2. Redistributions in binary form must reproduce the above copyright */
24 /* notice, this list of conditions and the following disclaimer in the */
25 /* documentation and/or other materials provided with the distribution. */
27 /* Neither the name of the University nor the names of its contributors */
28 /* may be used to endorse or promote products derived from this software */
29 /* without specific prior written permission. */
31 /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
32 /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
33 /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
34 /* PURPOSE. */
35 #include "flexdef.h"
36 __RCSID("$NetBSD: yylex.c,v 1.4 2014/10/30 18:44:05 christos Exp $");
38 #include <ctype.h>
39 #include "parse.h"
42 /* yylex - scan for a regular expression token */
44 extern char *yytext;
45 int yylex ()
47 int toktype;
48 static int beglin = false;
50 if (eofseen)
51 toktype = EOF;
52 else
53 toktype = flexscan ();
55 if (toktype == EOF || toktype == 0) {
56 eofseen = 1;
58 if (sectnum == 1) {
59 synerr (_("premature EOF"));
60 sectnum = 2;
61 toktype = SECTEND;
64 else
65 toktype = 0;
68 if (trace) {
69 if (beglin) {
70 fprintf (stderr, "%d\t", num_rules + 1);
71 beglin = 0;
74 switch (toktype) {
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 case '*':
93 case '+':
94 case ',':
95 (void) putc (toktype, stderr);
96 break;
98 case '\n':
99 (void) putc ('\n', stderr);
101 if (sectnum == 2)
102 beglin = 1;
104 break;
106 case SCDECL:
107 fputs ("%s", stderr);
108 break;
110 case XSCDECL:
111 fputs ("%x", stderr);
112 break;
114 case SECTEND:
115 fputs ("%%\n", stderr);
117 /* We set beglin to be true so we'll start
118 * writing out numbers as we echo rules.
119 * flexscan() has already assigned sectnum.
121 if (sectnum == 2)
122 beglin = 1;
124 break;
126 case NAME:
127 fprintf (stderr, "'%s'", nmstr);
128 break;
130 case CHAR:
131 switch (yylval) {
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 case '*':
150 case '+':
151 case ',':
152 fprintf (stderr, "\\%c", yylval);
153 break;
155 default:
156 if (!isascii (yylval) || !isprint (yylval))
157 fprintf (stderr,
158 "\\%.3o",
159 (unsigned int) yylval);
160 else
161 (void) putc (yylval, stderr);
162 break;
165 break;
167 case NUMBER:
168 fprintf (stderr, "%d", yylval);
169 break;
171 case PREVCCL:
172 fprintf (stderr, "[%d]", yylval);
173 break;
175 case EOF_OP:
176 fprintf (stderr, "<<EOF>>");
177 break;
179 case OPTION_OP:
180 fprintf (stderr, "%s ", yytext);
181 break;
183 case OPT_OUTFILE:
184 case OPT_PREFIX:
185 case CCE_ALNUM:
186 case CCE_ALPHA:
187 case CCE_BLANK:
188 case CCE_CNTRL:
189 case CCE_DIGIT:
190 case CCE_GRAPH:
191 case CCE_LOWER:
192 case CCE_PRINT:
193 case CCE_PUNCT:
194 case CCE_SPACE:
195 case CCE_UPPER:
196 case CCE_XDIGIT:
197 fprintf (stderr, "%s", yytext);
198 break;
200 case 0:
201 fprintf (stderr, _("End Marker\n"));
202 break;
204 default:
205 fprintf (stderr,
207 ("*Something Weird* - tok: %d val: %d\n"),
208 toktype, yylval);
209 break;
213 return toktype;