xref: /original-bsd/usr.bin/mklocale/lex.l (revision ac773626)
1 %{
2 /*-
3  * Copyright (c) 1993 The Regents of the University of California.
4  * All rights reserved.
5  *
6  * This code is derived from software contributed to Berkeley by
7  * Paul Borman at Krystal Technologies.
8  *
9  * %sccs.include.redist.c%
10  */
11 
12 #ifndef lint
13 static char sccsid[] = "@(#)lex.l	5.1 (Berkeley) 05/30/93";
14 #endif /* not lint */
15 
16 #include <ctype.h>
17 #include <stdio.h>
18 #include <stdlib.h>
19 
20 #include "ldef.h"
21 #include "y.tab.h"
22 %}
23 
24 ODIGIT	[0-7]
25 DIGIT	[0-9]
26 XDIGIT	[0-9a-fA-F]
27 W	[\t\n\r ]
28 
29 %%
30 \'.\'				{ yylval.rune = yytext[1];
31 				  return(RUNE); }
32 
33 '\\a'				{ yylval.rune = '\a';
34 				  return(RUNE); }
35 '\\b'				{ yylval.rune = '\b';
36 				  return(RUNE); }
37 '\\f'				{ yylval.rune = '\f';
38 				  return(RUNE); }
39 '\\n'				{ yylval.rune = '\n';
40 				  return(RUNE); }
41 '\\r'				{ yylval.rune = '\r';
42 				  return(RUNE); }
43 '\\t'				{ yylval.rune = '\t';
44 				  return(RUNE); }
45 '\\v'				{ yylval.rune = '\v';
46 				  return(RUNE); }
47 
48 0x{XDIGIT}+			{ yylval.rune = strtol(yytext, 0, 16);
49 				  return(RUNE); }
50 0{ODIGIT}+			{ yylval.rune = strtol(yytext, 0, 8);
51 				  return(RUNE); }
52 {DIGIT}+			{ yylval.rune = strtol(yytext, 0, 10);
53 				  return(RUNE); }
54 
55 
56 MAPLOWER			{ return(MAPLOWER); }
57 MAPUPPER			{ return(MAPUPPER); }
58 TODIGIT				{ return(DIGITMAP); }
59 INVALID				{ return(INVALID); }
60 
61 ALPHA				{ yylval.i = _A|_R|_G; return(LIST); }
62 CONTROL				{ yylval.i = _C; return(LIST); }
63 DIGIT				{ yylval.i = _D|_R|_G; return(LIST); }
64 GRAPH				{ yylval.i = _G|_R; return(LIST); }
65 LOWER				{ yylval.i = _L|_R|_G; return(LIST); }
66 PUNCT				{ yylval.i = _P|_R|_G; return(LIST); }
67 SPACE				{ yylval.i = _S; return(LIST); }
68 UPPER				{ yylval.i = _U|_R|_G; return(LIST); }
69 XDIGIT				{ yylval.i = _X|_R|_G; return(LIST); }
70 BLANK				{ yylval.i = _B; return(LIST); }
71 PRINT				{ yylval.i = _R; return(LIST); }
72 IDEOGRAM			{ yylval.i = _I|_R|_G; return(LIST); }
73 SPECIAL				{ yylval.i = _T|_R|_G; return(LIST); }
74 PHONOGRAM			{ yylval.i = _Q|_R|_G; return(LIST); }
75 
76 VARIABLE[\t ]			{ static char vbuf[1024];
77 				  char *v = vbuf;
78 				  while ((*v = input()) && *v != '\n')
79 					++v;
80                                   if (*v) {
81 					unput(*v);
82 					*v = 0;
83 				  }
84 				  yylval.str = vbuf;
85 				  return(VARIABLE);
86 				}
87 
88 ENCODING			{ return(ENCODING); }
89 
90 \".*\"				{ char *e = yytext + 1;
91 				  yylval.str = e;
92 				  while (*e && *e != '"')
93 					++e;
94 				  *e = 0;
95 				  return(STRING); }
96 
97 \<|\(|\[			{ return(LBRK); }
98 
99 \>|\)|\]			{ return(RBRK); }
100 
101 \-				{ return(THRU); }
102 \.\.\.				{ return(THRU); }
103 
104 \:				{ return(':'); }
105 
106 {W}+				;
107 
108 ^\#.*\n				;
109 \/\*				{ char lc = 0;
110 				  do {
111 				    while ((lc) != '*')
112 					if ((lc = input()) == 0)
113 					    break;
114 				  } while((lc = input()) != '/');
115 				}
116 
117 \\$				;
118 .				{ printf("Lex is skipping '%s'\n", yytext); }
119 %%
120 
121 #if	!defined(yywrap)
122 yywrap()
123 {
124 	return(1);
125 }
126 #endif
127