/[bison]/bison/src/derives.c
ViewVC logotype

Diff of /bison/src/derives.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.38 by eggert, Wed Dec 11 06:26:06 2002 UTC revision 1.39 by eggert, Fri Dec 13 04:50:32 2002 UTC
# Line 50  print_derives (void) Line 50  print_derives (void)
50      {      {
51        rule **rp;        rule **rp;
52        fprintf (stderr, "\t%s derives\n", symbols[i]->tag);        fprintf (stderr, "\t%s derives\n", symbols[i]->tag);
53        for (rp = derives[i]; *rp; ++rp)        for (rp = derives[i - ntokens]; *rp; ++rp)
54          {          {
55            fprintf (stderr, "\t\t%3d ", (*rp)->user_number);            fprintf (stderr, "\t\t%3d ", (*rp)->user_number);
56            rule_rhs_print (*rp, stderr);            rule_rhs_print (*rp, stderr);
# Line 68  derives_compute (void) Line 68  derives_compute (void)
68    int r;    int r;
69    rule **q;    rule **q;
70    
71    /* DSET[NTERM] -- A linked list of the numbers of the rules whose    /* DSET[NTERM - NTOKENS] -- A linked list of the numbers of the rules
72       LHS is NTERM.  */       whose LHS is NTERM.  */
73    rule_list **dset = XCALLOC (rule_list *, nvars) - ntokens;    rule_list **dset = CALLOC (dset, nvars);
74    
75    /* DELTS[RULE] -- There are NRULES rule number to attach to nterms.    /* DELTS[RULE] -- There are NRULES rule number to attach to nterms.
76       Instead of performing NRULES allocations for each, have an array       Instead of performing NRULES allocations for each, have an array
77       indexed by rule numbers.  */       indexed by rule numbers.  */
78    rule_list *delts = XCALLOC (rule_list, nrules);    rule_list *delts = CALLOC (delts, nrules);
79    
80    for (r = nrules - 1; r >= 0; --r)    for (r = nrules - 1; r >= 0; --r)
81      {      {
82        symbol_number lhs = rules[r].lhs->number;        symbol_number lhs = rules[r].lhs->number;
83        rule_list *p = &delts[r];        rule_list *p = &delts[r];
84        /* A new LHS is found.  */        /* A new LHS is found.  */
85        p->next = dset[lhs];        p->next = dset[lhs - ntokens];
86        p->value = &rules[r];        p->value = &rules[r];
87        dset[lhs] = p;        dset[lhs - ntokens] = p;
88      }      }
89    
90    /* DSET contains what we need under the form of a linked list.  Make    /* DSET contains what we need under the form of a linked list.  Make
91       it a single array.  */       it a single array.  */
92    
93    derives = XCALLOC (rule **, nvars) - ntokens;    CALLOC (derives, nvars);
94    q = XCALLOC (rule *, nvars + int_of_rule_number (nrules));    CALLOC (q, nvars + nrules);
95    
96    for (i = ntokens; i < nsyms; i++)    for (i = ntokens; i < nsyms; i++)
97      {      {
98        rule_list *p = dset[i];        rule_list *p = dset[i - ntokens];
99        derives[i] = q;        derives[i - ntokens] = q;
100        while (p)        while (p)
101          {          {
102            *q++ = p->value;            *q++ = p->value;
# Line 108  derives_compute (void) Line 108  derives_compute (void)
108    if (trace_flag & trace_sets)    if (trace_flag & trace_sets)
109      print_derives ();      print_derives ();
110    
111    free (dset + ntokens);    free (dset);
112    free (delts);    free (delts);
113  }  }
114    
# Line 116  derives_compute (void) Line 116  derives_compute (void)
116  void  void
117  derives_free (void)  derives_free (void)
118  {  {
119    XFREE (derives[ntokens]);    free (derives[0]);
120    XFREE (derives + ntokens);    free (derives);
121  }  }

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26