git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			706 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			706 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| class Parser(object):
 | |
|     def __init__(self, tokens):
 | |
|         self.tokens = tokens
 | |
|         self.i = 0
 | |
| 
 | |
|     def prev(self):
 | |
|         return self.tokens[self.i - 1]
 | |
| 
 | |
|     def curr(self):
 | |
|         return self.tokens[self.i]
 | |
| 
 | |
|     def consume(self):
 | |
|         if not self.exhausted():
 | |
|             self.i += 1
 | |
|             return self.prev()
 | |
| 
 | |
|     def match(self, xs):
 | |
|         if not self.exhausted() and self.curr() in xs:
 | |
|             self.consume()
 | |
|             return True
 | |
|         return False
 | |
| 
 | |
|     def expect(self, xs):
 | |
|         if not self.match(xs):
 | |
|             raise Exception("Expected token \"{}\" but received \"{}\"".format(xs, self.curr()))
 | |
| 
 | |
|     def exhausted(self):
 | |
|         return self.i >= len(self.tokens)
 |