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 <libintl.h>
35 :
36 : #include <libeu.h>
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 4 : "%prefix" { return kPREFIX; }
62 4 : "%suffix" { return kSUFFIX; }
63 4 :
64 4 : "%synonym" { return kSYNONYM; }
65 10 :
66 188 : {NUMBER} { i386_lval.num = strtoul (yytext, NULL, 10);
67 188 : return kNUMBER; }
68 :
69 4 : "%%" { BEGIN (MAIN); return kPERCPERC; }
70 2 :
71 13145 :
72 13145 : <MAIN>"0" { return '0'; }
73 : <MAIN>"1" { return '1'; }
74 13839 :
75 21426 : <INITIAL,MAIN>"{"{ID2}"}" { i386_lval.str = xstrndup (yytext + 1,
76 7587 : yyleng - 2);
77 7587 : return kBITFIELD; }
78 :
79 36 : <MAIN>"INVALID" { i386_lval.str = (void *) -1l;
80 36 : return kID; }
81 :
82 3174 : <MAIN>{ID} { i386_lval.str = xstrndup (yytext, yyleng);
83 3174 : return kID; }
84 :
85 4317 : <MAIN>"," { return ','; }
86 4317 :
87 1501 : <MAIN>":" { return ':'; }
88 1501 :
89 0 : <INITIAL,MAIN>^"\n" { /* IGNORE */ }
90 :
91 0 : <INITIAL,MAIN>"\n" { return '\n'; }
92 :
93 1613 : <INITIAL,MAIN>^"#" { eat_to_eol (); }
94 120 :
95 218 : {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 0 :
104 0 : %%
105 0 :
106 : static void
107 : eat_to_eol (void)
108 : {
109 : while (1)
110 : {
111 1502 : int c = input ();
112 :
113 1502 : if (c == EOF || c == '\n')
114 : break;
115 : }
116 : }
117 :
118 : static void
119 0 : invalid_char (int ch)
120 : {
121 0 : error (0, 0, (isascii (ch)
122 : ? gettext ("invalid character '%c' at line %d; ignored")
123 : : gettext ("invalid character '\\%o' at line %d; ignored")),
124 : ch, yylineno);
125 0 : }
126 :
127 : // Local Variables:
128 : // mode: C
129 : // End:
|