]> gcc.gnu.org Git - gcc.git/blob - gcc/bi-parser.y
pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are loaded "statically".
[gcc.git] / gcc / bi-parser.y
1 /* Bytecode definition file parser.
2 Copyright (C) 1993 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING. If not, write to
18 the Free Software Foundation, 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21
22 %{
23
24 #include <stdio.h>
25 #include "hconfig.h"
26 #include "bi-defs.h"
27
28 extern char yytext[];
29 extern int yyleng;
30
31
32 /* Chain of all defs built by the parser. */
33 struct def *defs;
34 int ndefs;
35
36 static struct node *makenode ();
37 static struct variation *makevar ();
38 static struct def *makedef ();
39
40 void yyerror ();
41
42 %}
43
44 %union
45 {
46 char *string;
47 struct def *def;
48 struct variation *variation;
49 struct node *node;
50 }
51
52 %token <string> DEFOP STRING
53 %type <string> opt_string
54 %type <def> defs def
55 %type <variation> variations variation
56 %type <node> list items item
57
58 %%
59
60 top:
61 defs
62 { defs = $1; }
63 ;
64
65 defs:
66 def
67 | defs def
68 { $2->next = $1; $$ = $2; }
69 ;
70
71 def:
72 DEFOP '(' STRING ',' opt_string ',' '(' variations ')' ')'
73 { $$ = makedef ($3, $5, $8); }
74 ;
75
76 variations:
77 variation
78 | variations ',' variation
79 { $3->next = $1; $$ = $3; }
80 ;
81
82 variation:
83 '(' opt_string ')'
84 { $$ = makevar ($2, (struct node *) NULL, (struct node *) NULL, (struct node *) NULL); }
85 | '(' opt_string ',' list ')'
86 { $$ = makevar ($2, $4, (struct node *) NULL, (struct node *) NULL); }
87 | '(' opt_string ',' list ',' list ')'
88 { $$ = makevar ($2, $4, $6, (struct node *) NULL); }
89 | '(' opt_string ',' list ',' list ',' list ')'
90 { $$ = makevar ($2, $4, $6, $8); }
91 ;
92
93 opt_string:
94 /* empty */ { $$ = ""; }
95 | STRING { $$ = $1; }
96 ;
97
98 list:
99 '(' items ')'
100 { $$ = $2; }
101 | /* empty */
102 { $$ = NULL; }
103 ;
104
105 items:
106 item
107 /* Note right recursion. */
108 | item ',' items
109 { $1->next = $3; $$ = $1; }
110 ;
111
112 item:
113 STRING
114 { $$ = makenode ($1); }
115 ;
116
117 %%
118
119 static struct node *
120 makenode (s)
121 char *s;
122 {
123 struct node *n;
124
125 n = (struct node *) malloc (sizeof (struct node));
126 n->text = s;
127 n->next = NULL;
128 return n;
129 }
130
131 static struct variation *
132 makevar (name, inputs, outputs, literals)
133 char *name;
134 struct node *inputs, *outputs, *literals;
135 {
136 struct variation *v;
137
138 v = (struct variation *) malloc (sizeof (struct variation));
139 v->name = name;
140 v->code = ndefs++;
141 v->inputs = inputs;
142 v->outputs = outputs;
143 v->literals = literals;
144 v->next = NULL;
145 return v;
146 }
147
148 static struct def *
149 makedef (name, template, vars)
150 char *name, *template;
151 struct variation *vars;
152 {
153 struct def *d;
154
155 d = (struct def *) malloc (sizeof (struct def));
156 d->basename = name;
157 d->template = template;
158 d->variations = vars;
159 d->next = NULL;
160 return d;
161 }
162
163 void
164 yyerror (s)
165 char *s;
166 {
167 fprintf (stderr, "syntax error in input\n");
168 exit (FATAL_EXIT_CODE);
169 }
This page took 0.042104 seconds and 5 git commands to generate.