1*7304104dSAndroid Build Coastguard Worker %{
2*7304104dSAndroid Build Coastguard Worker /* Copyright (C) 2004, 2005, 2007, 2008 Red Hat, Inc.
3*7304104dSAndroid Build Coastguard Worker Written by Ulrich Drepper <[email protected]>, 2004.
4*7304104dSAndroid Build Coastguard Worker
5*7304104dSAndroid Build Coastguard Worker This file is free software; you can redistribute it and/or modify
6*7304104dSAndroid Build Coastguard Worker it under the terms of either
7*7304104dSAndroid Build Coastguard Worker
8*7304104dSAndroid Build Coastguard Worker * the GNU Lesser General Public License as published by the Free
9*7304104dSAndroid Build Coastguard Worker Software Foundation; either version 3 of the License, or (at
10*7304104dSAndroid Build Coastguard Worker your option) any later version
11*7304104dSAndroid Build Coastguard Worker
12*7304104dSAndroid Build Coastguard Worker or
13*7304104dSAndroid Build Coastguard Worker
14*7304104dSAndroid Build Coastguard Worker * the GNU General Public License as published by the Free
15*7304104dSAndroid Build Coastguard Worker Software Foundation; either version 2 of the License, or (at
16*7304104dSAndroid Build Coastguard Worker your option) any later version
17*7304104dSAndroid Build Coastguard Worker
18*7304104dSAndroid Build Coastguard Worker or both in parallel, as here.
19*7304104dSAndroid Build Coastguard Worker
20*7304104dSAndroid Build Coastguard Worker elfutils is distributed in the hope that it will be useful, but
21*7304104dSAndroid Build Coastguard Worker WITHOUT ANY WARRANTY; without even the implied warranty of
22*7304104dSAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23*7304104dSAndroid Build Coastguard Worker General Public License for more details.
24*7304104dSAndroid Build Coastguard Worker
25*7304104dSAndroid Build Coastguard Worker You should have received copies of the GNU General Public License and
26*7304104dSAndroid Build Coastguard Worker the GNU Lesser General Public License along with this program. If
27*7304104dSAndroid Build Coastguard Worker not, see <http://www.gnu.org/licenses/>. */
28*7304104dSAndroid Build Coastguard Worker
29*7304104dSAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
30*7304104dSAndroid Build Coastguard Worker # include <config.h>
31*7304104dSAndroid Build Coastguard Worker #endif
32*7304104dSAndroid Build Coastguard Worker
33*7304104dSAndroid Build Coastguard Worker #include <ctype.h>
34*7304104dSAndroid Build Coastguard Worker
35*7304104dSAndroid Build Coastguard Worker #include <libeu.h>
36*7304104dSAndroid Build Coastguard Worker #include "system.h"
37*7304104dSAndroid Build Coastguard Worker #include "i386_parse.h"
38*7304104dSAndroid Build Coastguard Worker
39*7304104dSAndroid Build Coastguard Worker
40*7304104dSAndroid Build Coastguard Worker static void eat_to_eol (void);
41*7304104dSAndroid Build Coastguard Worker static void invalid_char (int ch);
42*7304104dSAndroid Build Coastguard Worker %}
43*7304104dSAndroid Build Coastguard Worker
44*7304104dSAndroid Build Coastguard Worker ID [a-zA-Z_][a-zA-Z0-9_/]*
45*7304104dSAndroid Build Coastguard Worker ID2 [a-zA-Z0-9_:/]*
46*7304104dSAndroid Build Coastguard Worker NUMBER [0-9]+
47*7304104dSAndroid Build Coastguard Worker WHITE [[:space:]]+
48*7304104dSAndroid Build Coastguard Worker
49*7304104dSAndroid Build Coastguard Worker %option yylineno
50*7304104dSAndroid Build Coastguard Worker %option never-interactive
51*7304104dSAndroid Build Coastguard Worker %option noyywrap
52*7304104dSAndroid Build Coastguard Worker
53*7304104dSAndroid Build Coastguard Worker
54*7304104dSAndroid Build Coastguard Worker %x MAIN
55*7304104dSAndroid Build Coastguard Worker
56*7304104dSAndroid Build Coastguard Worker %%
57*7304104dSAndroid Build Coastguard Worker
58*7304104dSAndroid Build Coastguard Worker "%mask" { return kMASK; }
59*7304104dSAndroid Build Coastguard Worker
60*7304104dSAndroid Build Coastguard Worker "%prefix" { return kPREFIX; }
61*7304104dSAndroid Build Coastguard Worker "%suffix" { return kSUFFIX; }
62*7304104dSAndroid Build Coastguard Worker
63*7304104dSAndroid Build Coastguard Worker "%synonym" { return kSYNONYM; }
64*7304104dSAndroid Build Coastguard Worker
65*7304104dSAndroid Build Coastguard Worker {NUMBER} { i386_lval.num = strtoul (yytext, NULL, 10);
66*7304104dSAndroid Build Coastguard Worker return kNUMBER; }
67*7304104dSAndroid Build Coastguard Worker
68*7304104dSAndroid Build Coastguard Worker "%%" { BEGIN (MAIN); return kPERCPERC; }
69*7304104dSAndroid Build Coastguard Worker
70*7304104dSAndroid Build Coastguard Worker
71*7304104dSAndroid Build Coastguard Worker <MAIN>"0" { return '0'; }
72*7304104dSAndroid Build Coastguard Worker <MAIN>"1" { return '1'; }
73*7304104dSAndroid Build Coastguard Worker
74*7304104dSAndroid Build Coastguard Worker <INITIAL,MAIN>"{"{ID2}"}" { i386_lval.str = xstrndup (yytext + 1,
75*7304104dSAndroid Build Coastguard Worker yyleng - 2);
76*7304104dSAndroid Build Coastguard Worker return kBITFIELD; }
77*7304104dSAndroid Build Coastguard Worker
78*7304104dSAndroid Build Coastguard Worker <MAIN>"INVALID" { i386_lval.str = (void *) -1l;
79*7304104dSAndroid Build Coastguard Worker return kID; }
80*7304104dSAndroid Build Coastguard Worker
81*7304104dSAndroid Build Coastguard Worker <MAIN>{ID} { i386_lval.str = xstrndup (yytext, yyleng);
82*7304104dSAndroid Build Coastguard Worker return kID; }
83*7304104dSAndroid Build Coastguard Worker
84*7304104dSAndroid Build Coastguard Worker <MAIN>"," { return ','; }
85*7304104dSAndroid Build Coastguard Worker
86*7304104dSAndroid Build Coastguard Worker <MAIN>":" { return ':'; }
87*7304104dSAndroid Build Coastguard Worker
88*7304104dSAndroid Build Coastguard Worker <INITIAL,MAIN>^"\n" { /* IGNORE */ }
89*7304104dSAndroid Build Coastguard Worker
90*7304104dSAndroid Build Coastguard Worker <INITIAL,MAIN>"\n" { return '\n'; }
91*7304104dSAndroid Build Coastguard Worker
92*7304104dSAndroid Build Coastguard Worker <INITIAL,MAIN>^"#" { eat_to_eol (); }
93*7304104dSAndroid Build Coastguard Worker
94*7304104dSAndroid Build Coastguard Worker {WHITE} { /* IGNORE */ }
95*7304104dSAndroid Build Coastguard Worker
96*7304104dSAndroid Build Coastguard Worker <MAIN>{WHITE} { return kSPACE; }
97*7304104dSAndroid Build Coastguard Worker
98*7304104dSAndroid Build Coastguard Worker <MAIN>. { i386_lval.ch = *yytext; return kCHAR; }
99*7304104dSAndroid Build Coastguard Worker
100*7304104dSAndroid Build Coastguard Worker . { invalid_char (*yytext); }
101*7304104dSAndroid Build Coastguard Worker
102*7304104dSAndroid Build Coastguard Worker
103*7304104dSAndroid Build Coastguard Worker %%
104*7304104dSAndroid Build Coastguard Worker
105*7304104dSAndroid Build Coastguard Worker static void
106*7304104dSAndroid Build Coastguard Worker eat_to_eol (void)
107*7304104dSAndroid Build Coastguard Worker {
108*7304104dSAndroid Build Coastguard Worker while (1)
109*7304104dSAndroid Build Coastguard Worker {
110*7304104dSAndroid Build Coastguard Worker int c = input ();
111*7304104dSAndroid Build Coastguard Worker
112*7304104dSAndroid Build Coastguard Worker if (c == EOF || c == '\n')
113*7304104dSAndroid Build Coastguard Worker break;
114*7304104dSAndroid Build Coastguard Worker }
115*7304104dSAndroid Build Coastguard Worker }
116*7304104dSAndroid Build Coastguard Worker
117*7304104dSAndroid Build Coastguard Worker static void
invalid_char(int ch)118*7304104dSAndroid Build Coastguard Worker invalid_char (int ch)
119*7304104dSAndroid Build Coastguard Worker {
120*7304104dSAndroid Build Coastguard Worker error (0, 0, (isascii (ch)
121*7304104dSAndroid Build Coastguard Worker ? _("invalid character '%c' at line %d; ignored")
122*7304104dSAndroid Build Coastguard Worker : _("invalid character '\\%o' at line %d; ignored")),
123*7304104dSAndroid Build Coastguard Worker ch, yylineno);
124*7304104dSAndroid Build Coastguard Worker }
125*7304104dSAndroid Build Coastguard Worker
126*7304104dSAndroid Build Coastguard Worker // Local Variables:
127*7304104dSAndroid Build Coastguard Worker // mode: C
128*7304104dSAndroid Build Coastguard Worker // End:
129