57 lines · 1.0 KB · C
RawDownload
 /* 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;		}	}}