mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			41 lines
		
	
	
	
		
			981 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
	
		
			981 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import itertools | ||
|  | 
 | ||
|  | def generate_tokens(tokens): | ||
|  |     numbers = itertools.count(0) | ||
|  |     for line in tokens: | ||
|  |         line = line.strip() | ||
|  | 
 | ||
|  |         if not line: | ||
|  |             continue | ||
|  |         if line.strip().startswith('#'): | ||
|  |             continue | ||
|  | 
 | ||
|  |         name = line.split()[0] | ||
|  |         yield (name, next(numbers)) | ||
|  | 
 | ||
|  |     yield ('N_TOKENS', next(numbers)) | ||
|  |     yield ('NT_OFFSET', 256) | ||
|  | 
 | ||
|  | def generate_opmap(tokens): | ||
|  |     for line in tokens: | ||
|  |         line = line.strip() | ||
|  | 
 | ||
|  |         if not line: | ||
|  |             continue | ||
|  |         if line.strip().startswith('#'): | ||
|  |             continue | ||
|  | 
 | ||
|  |         pieces = line.split() | ||
|  | 
 | ||
|  |         if len(pieces) != 2: | ||
|  |             continue | ||
|  | 
 | ||
|  |         name, op = pieces | ||
|  |         yield (op.strip("'"), name) | ||
|  | 
 | ||
|  |     # Yield independently <>. This is needed so it does not collide | ||
|  |     # with the token generation in "generate_tokens" because if this | ||
|  |     # symbol is included in Grammar/Tokens, it will collide with != | ||
|  |     # as it has the same name (NOTEQUAL). | ||
|  |     yield ('<>', 'NOTEQUAL') |