| char rcsid_nonterminal[] = "$Id$"; |
| |
| #include "b.h" |
| #include <stdio.h> |
| #include <string.h> |
| |
| NonTerminal start; |
| NonTerminalNum max_nonterminal = 1; |
| NonTerminalNum last_user_nonterminal; |
| List nonterminals; |
| |
| NonTerminal |
| newNonTerminal(name) char *name; |
| { |
| NonTerminal nt; |
| |
| nt = (NonTerminal) zalloc(sizeof(struct nonterminal)); |
| assert(nt); |
| if (max_nonterminal == 1) { |
| start = nt; |
| } |
| nt->name = name; |
| nt->num = max_nonterminal++; |
| nonterminals = newList(nt, nonterminals); |
| |
| return nt; |
| } |
| |
| int |
| nonTerminalName(buf, i) char *buf; int i; |
| { |
| List l; |
| |
| for (l = nonterminals; l; l = l->next) { |
| NonTerminal nt = (NonTerminal) l->x; |
| if (nt->num == i) { |
| strcpy(buf, nt->name); |
| return 1; |
| } |
| } |
| strcpy(buf, "(Unknown NonTerminal)"); |
| return 0; |
| } |
| |
| void |
| dumpNonTerminal(n) NonTerminal n; |
| { |
| printf("%s(%d)", n->name, n->num); |
| } |