32 |
unsigned int nritems = 0; |
unsigned int nritems = 0; |
33 |
|
|
34 |
rule_t *rules = NULL; |
rule_t *rules = NULL; |
35 |
int nrules = 0; |
rule_number_t nrules = 0; |
36 |
|
|
37 |
symbol_t **symbols = NULL; |
symbol_t **symbols = NULL; |
38 |
int nsyms = 0; |
int nsyms = 0; |
121 |
ritem_longest_rhs (void) |
ritem_longest_rhs (void) |
122 |
{ |
{ |
123 |
int max = 0; |
int max = 0; |
124 |
int i; |
rule_number_t r; |
125 |
|
|
126 |
for (i = 1; i < nrules + 1; ++i) |
for (r = 1; r < nrules + 1; ++r) |
127 |
{ |
{ |
128 |
int length = rule_rhs_length (&rules[i]); |
int length = rule_rhs_length (&rules[r]); |
129 |
if (length > max) |
if (length > max) |
130 |
max = length; |
max = length; |
131 |
} |
} |
148 |
|
|
149 |
void |
void |
150 |
grammar_rules_partial_print (FILE *out, const char *title, |
grammar_rules_partial_print (FILE *out, const char *title, |
151 |
int begin, int end) |
rule_number_t begin, rule_number_t end) |
152 |
{ |
{ |
153 |
int r; |
int r; |
154 |
symbol_t *last_lhs = NULL; |
symbol_t *last_lhs = NULL; |
195 |
void |
void |
196 |
grammar_dump (FILE *out, const char *title) |
grammar_dump (FILE *out, const char *title) |
197 |
{ |
{ |
|
int i; |
|
|
item_number_t *r; |
|
|
|
|
198 |
fprintf (out, "%s\n\n", title); |
fprintf (out, "%s\n\n", title); |
199 |
fprintf (out, |
fprintf (out, |
200 |
"ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n", |
"ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n", |
201 |
ntokens, nvars, nsyms, nrules, nritems); |
ntokens, nvars, nsyms, nrules, nritems); |
202 |
|
|
203 |
|
|
204 |
fprintf (out, "Variables\n---------\n\n"); |
fprintf (out, "Variables\n---------\n\n"); |
205 |
fprintf (out, "Value Sprec Sassoc Tag\n"); |
{ |
206 |
for (i = ntokens; i < nsyms; i++) |
symbol_number_t i; |
207 |
fprintf (out, "%5d %5d %5d %s\n", |
fprintf (out, "Value Sprec Sassoc Tag\n"); |
208 |
i, |
|
209 |
symbols[i]->prec, symbols[i]->assoc, |
for (i = ntokens; i < nsyms; i++) |
210 |
symbol_tag_get (symbols[i])); |
fprintf (out, "%5d %5d %5d %s\n", |
211 |
fprintf (out, "\n\n"); |
i, |
212 |
|
symbols[i]->prec, symbols[i]->assoc, |
213 |
|
symbol_tag_get (symbols[i])); |
214 |
|
fprintf (out, "\n\n"); |
215 |
|
} |
216 |
|
|
217 |
fprintf (out, "Rules\n-----\n\n"); |
fprintf (out, "Rules\n-----\n\n"); |
218 |
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); |
{ |
219 |
for (i = 1; i < nrules + nuseless_productions + 1; i++) |
rule_number_t i; |
220 |
{ |
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); |
221 |
int rhs_count = 0; |
for (i = 1; i < nrules + nuseless_productions + 1; i++) |
222 |
/* Find the last RHS index in ritems. */ |
{ |
223 |
for (r = rules[i].rhs; *r >= 0; ++r) |
rule_t *rule = &rules[i]; |
224 |
++rhs_count; |
item_number_t *r = NULL; |
225 |
fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->", |
int rhs_count = 0; |
226 |
i - 1, |
/* Find the last RHS index in ritems. */ |
227 |
rules[i].prec ? rules[i].prec->prec : 0, |
for (r = rule->rhs; *r >= 0; ++r) |
228 |
rules[i].prec ? rules[i].prec->assoc : 0, |
++rhs_count; |
229 |
rules[i].useful, |
fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->", |
230 |
rules[i].rhs - ritem, |
i - 1, |
231 |
rules[i].rhs - ritem + rhs_count - 1, |
rule->prec ? rule->prec->prec : 0, |
232 |
rules[i].lhs->number); |
rule->prec ? rule->prec->assoc : 0, |
233 |
/* Dumped the RHS. */ |
rule->useful, |
234 |
for (r = rules[i].rhs; *r >= 0; r++) |
rule->rhs - ritem, |
235 |
fprintf (out, " %3d", *r); |
rule->rhs - ritem + rhs_count - 1, |
236 |
fprintf (out, " [%d]\n", -(*r) - 1); |
rule->lhs->number); |
237 |
} |
/* Dumped the RHS. */ |
238 |
|
for (r = rule->rhs; *r >= 0; r++) |
239 |
|
fprintf (out, " %3d", *r); |
240 |
|
fprintf (out, " [%d]\n", -(*r) - 1); |
241 |
|
} |
242 |
|
} |
243 |
fprintf (out, "\n\n"); |
fprintf (out, "\n\n"); |
244 |
|
|
245 |
fprintf (out, "Rules interpreted\n-----------------\n\n"); |
fprintf (out, "Rules interpreted\n-----------------\n\n"); |
246 |
for (i = 1; i < nrules + nuseless_productions + 1; i++) |
{ |
247 |
{ |
rule_number_t r; |
248 |
fprintf (out, "%-5d ", i); |
for (r = 1; r < nrules + nuseless_productions + 1; r++) |
249 |
rule_print (&rules[i], out); |
{ |
250 |
} |
fprintf (out, "%-5d ", r); |
251 |
|
rule_print (&rules[r], out); |
252 |
|
} |
253 |
|
} |
254 |
fprintf (out, "\n\n"); |
fprintf (out, "\n\n"); |
255 |
} |
} |
256 |
|
|