text: 
  /* Grammar subroutines needed by parser */
  
  #include "Python.h"
  #include "pgenheaders.h"
  #include "grammar.h"
  #include "token.h"
  
  /* Return the DFA for the given type */
  
  dfa *
  PyGrammar_FindDFA(grammar *g, register int type)
  {
  	register dfa *d;
  #if 1
  	/* Massive speed-up */
  	d = &g->g_dfa[type - NT_OFFSET];
  	assert(d->d_type == type);
  	return d;
  #else
  	/* Old, slow version */
  	register int i;
  	
  	for (i = g->g_ndfas, d = g->g_dfa; --i >= 0; d++) {
  		if (d->d_type == type)
  			return d;
  	}
  	assert(0);
  	/* NOTREACHED */
  #endif
  }
  
  char *
  PyGrammar_LabelRepr(label *lb)
  {
  	static char buf[100];
  	
  	if (lb->lb_type == ENDMARKER)
  		return "EMPTY";
  	else if (ISNONTERMINAL(lb->lb_type)) {
  		if (lb->lb_str == NULL) {
  			PyOS_snprintf(buf, sizeof(buf), "NT%d", lb->lb_type);
  			return buf;
  		}
  		else
  			return lb->lb_str;
  	}
  	else {
  		if (lb->lb_str == NULL)
  			return _PyParser_TokenNames[lb->lb_type];
  		else {
  			PyOS_snprintf(buf, sizeof(buf), "%.32s(%.32s)",
  				_PyParser_TokenNames[lb->lb_type], lb->lb_str);
  			return buf;
  		}
  	}
  }
  