| 
									
										
										
										
											1991-02-19 12:39:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | /* Grammar subroutines needed by parser */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1990-12-20 15:06:42 +00:00
										 |  |  | #include "pgenheaders.h"
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | #include "assert.h"
 | 
					
						
							|  |  |  | #include "grammar.h"
 | 
					
						
							|  |  |  | #include "token.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Return the DFA for the given type */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dfa * | 
					
						
							| 
									
										
										
										
											2000-07-22 19:20:54 +00:00
										 |  |  | PyGrammar_FindDFA(grammar *g, register int type) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	register dfa *d; | 
					
						
							| 
									
										
										
										
											1994-09-09 11:11:39 +00:00
										 |  |  | #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; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	for (i = g->g_ndfas, d = g->g_dfa; --i >= 0; d++) { | 
					
						
							|  |  |  | 		if (d->d_type == type) | 
					
						
							|  |  |  | 			return d; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	assert(0); | 
					
						
							|  |  |  | 	/* NOTREACHED */ | 
					
						
							| 
									
										
										
										
											1994-09-09 11:11:39 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | char * | 
					
						
							| 
									
										
										
										
											2000-07-22 19:20:54 +00:00
										 |  |  | PyGrammar_LabelRepr(label *lb) | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	static char buf[100]; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if (lb->lb_type == ENDMARKER) | 
					
						
							|  |  |  | 		return "EMPTY"; | 
					
						
							|  |  |  | 	else if (ISNONTERMINAL(lb->lb_type)) { | 
					
						
							|  |  |  | 		if (lb->lb_str == NULL) { | 
					
						
							|  |  |  | 			sprintf(buf, "NT%d", lb->lb_type); | 
					
						
							|  |  |  | 			return buf; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			return lb->lb_str; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else { | 
					
						
							|  |  |  | 		if (lb->lb_str == NULL) | 
					
						
							| 
									
										
										
										
											1997-04-29 21:03:06 +00:00
										 |  |  | 			return _PyParser_TokenNames[lb->lb_type]; | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 		else { | 
					
						
							|  |  |  | 			sprintf(buf, "%.32s(%.32s)", | 
					
						
							| 
									
										
										
										
											1997-04-29 21:03:06 +00:00
										 |  |  | 				_PyParser_TokenNames[lb->lb_type], lb->lb_str); | 
					
						
							| 
									
										
										
										
											1990-10-14 12:07:46 +00:00
										 |  |  | 			return buf; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |