BSD 4_4 release
[unix-history] / usr / src / usr.bin / mklocale / lex.l
CommitLineData
bc816cc4
KB
1%{
2/*-
ad787160
C
3 * Copyright (c) 1993
4 * The Regents of the University of California. All rights reserved.
bc816cc4
KB
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Paul Borman at Krystal Technologies.
8 *
ad787160
C
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by the University of
20 * California, Berkeley and its contributors.
21 * 4. Neither the name of the University nor the names of its contributors
22 * may be used to endorse or promote products derived from this software
23 * without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
bc816cc4
KB
36 */
37
38#ifndef lint
ad787160 39static char sccsid[] = "@(#)lex.l 8.1 (Berkeley) 6/6/93";
bc816cc4
KB
40#endif /* not lint */
41
42#include <ctype.h>
43#include <stdio.h>
44#include <stdlib.h>
45
46#include "ldef.h"
47#include "y.tab.h"
48%}
49
50ODIGIT [0-7]
51DIGIT [0-9]
52XDIGIT [0-9a-fA-F]
53W [\t\n\r ]
54
55%%
56\'.\' { yylval.rune = yytext[1];
57 return(RUNE); }
58
59'\\a' { yylval.rune = '\a';
60 return(RUNE); }
61'\\b' { yylval.rune = '\b';
62 return(RUNE); }
63'\\f' { yylval.rune = '\f';
64 return(RUNE); }
65'\\n' { yylval.rune = '\n';
66 return(RUNE); }
67'\\r' { yylval.rune = '\r';
68 return(RUNE); }
69'\\t' { yylval.rune = '\t';
70 return(RUNE); }
71'\\v' { yylval.rune = '\v';
72 return(RUNE); }
73
740x{XDIGIT}+ { yylval.rune = strtol(yytext, 0, 16);
75 return(RUNE); }
760{ODIGIT}+ { yylval.rune = strtol(yytext, 0, 8);
77 return(RUNE); }
78{DIGIT}+ { yylval.rune = strtol(yytext, 0, 10);
79 return(RUNE); }
80
81
82MAPLOWER { return(MAPLOWER); }
83MAPUPPER { return(MAPUPPER); }
84TODIGIT { return(DIGITMAP); }
85INVALID { return(INVALID); }
86
87ALPHA { yylval.i = _A|_R|_G; return(LIST); }
88CONTROL { yylval.i = _C; return(LIST); }
89DIGIT { yylval.i = _D|_R|_G; return(LIST); }
90GRAPH { yylval.i = _G|_R; return(LIST); }
91LOWER { yylval.i = _L|_R|_G; return(LIST); }
92PUNCT { yylval.i = _P|_R|_G; return(LIST); }
93SPACE { yylval.i = _S; return(LIST); }
94UPPER { yylval.i = _U|_R|_G; return(LIST); }
95XDIGIT { yylval.i = _X|_R|_G; return(LIST); }
96BLANK { yylval.i = _B; return(LIST); }
97PRINT { yylval.i = _R; return(LIST); }
98IDEOGRAM { yylval.i = _I|_R|_G; return(LIST); }
99SPECIAL { yylval.i = _T|_R|_G; return(LIST); }
100PHONOGRAM { yylval.i = _Q|_R|_G; return(LIST); }
101
102VARIABLE[\t ] { static char vbuf[1024];
103 char *v = vbuf;
104 while ((*v = input()) && *v != '\n')
105 ++v;
106 if (*v) {
107 unput(*v);
108 *v = 0;
109 }
110 yylval.str = vbuf;
111 return(VARIABLE);
112 }
113
114ENCODING { return(ENCODING); }
115
116\".*\" { char *e = yytext + 1;
117 yylval.str = e;
118 while (*e && *e != '"')
119 ++e;
120 *e = 0;
121 return(STRING); }
122
123\<|\(|\[ { return(LBRK); }
124
125\>|\)|\] { return(RBRK); }
126
127\- { return(THRU); }
128\.\.\. { return(THRU); }
129
130\: { return(':'); }
131
132{W}+ ;
133
134^\#.*\n ;
135\/\* { char lc = 0;
136 do {
137 while ((lc) != '*')
138 if ((lc = input()) == 0)
139 break;
140 } while((lc = input()) != '/');
141 }
142
143\\$ ;
144. { printf("Lex is skipping '%s'\n", yytext); }
145%%
146
147#if !defined(yywrap)
148yywrap()
149{
150 return(1);
151}
152#endif