symbian-qemu-0.9.1-12/python-2.6.1/Parser/grammar1.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 /* Grammar subroutines needed by parser */
       
     3 
       
     4 #include "Python.h"
       
     5 #include "pgenheaders.h"
       
     6 #include "grammar.h"
       
     7 #include "token.h"
       
     8 
       
     9 /* Return the DFA for the given type */
       
    10 
       
    11 dfa *
       
    12 PyGrammar_FindDFA(grammar *g, register int type)
       
    13 {
       
    14 	register dfa *d;
       
    15 #if 1
       
    16 	/* Massive speed-up */
       
    17 	d = &g->g_dfa[type - NT_OFFSET];
       
    18 	assert(d->d_type == type);
       
    19 	return d;
       
    20 #else
       
    21 	/* Old, slow version */
       
    22 	register int i;
       
    23 	
       
    24 	for (i = g->g_ndfas, d = g->g_dfa; --i >= 0; d++) {
       
    25 		if (d->d_type == type)
       
    26 			return d;
       
    27 	}
       
    28 	assert(0);
       
    29 	/* NOTREACHED */
       
    30 #endif
       
    31 }
       
    32 
       
    33 char *
       
    34 PyGrammar_LabelRepr(label *lb)
       
    35 {
       
    36 	static char buf[100];
       
    37 	
       
    38 	if (lb->lb_type == ENDMARKER)
       
    39 		return "EMPTY";
       
    40 	else if (ISNONTERMINAL(lb->lb_type)) {
       
    41 		if (lb->lb_str == NULL) {
       
    42 			PyOS_snprintf(buf, sizeof(buf), "NT%d", lb->lb_type);
       
    43 			return buf;
       
    44 		}
       
    45 		else
       
    46 			return lb->lb_str;
       
    47 	}
       
    48 	else {
       
    49 		if (lb->lb_str == NULL)
       
    50 			return _PyParser_TokenNames[lb->lb_type];
       
    51 		else {
       
    52 			PyOS_snprintf(buf, sizeof(buf), "%.32s(%.32s)",
       
    53 				_PyParser_TokenNames[lb->lb_type], lb->lb_str);
       
    54 			return buf;
       
    55 		}
       
    56 	}
       
    57 }