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