|  |  | @@ -84,12 +84,11 @@ class RuleNode(object): | 
		
	
		
			
			|  |  |  | class Parser(object): | 
		
	
		
			
			|  |  |  | """Parser wrapper.""" | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def __init__(self, rules, start): | 
		
	
		
			
			|  |  |  | def __init__(self, rules): | 
		
	
		
			
			|  |  |  | super(Parser, self).__init__() | 
		
	
		
			
			|  |  |  | self.orig_rules = {rule: rule for rule in rules} | 
		
	
		
			
			|  |  |  | rules = [self._to_rule(rule) for rule in rules] | 
		
	
		
			
			|  |  |  | self.grammar = to_cnf(Grammar(rules)) | 
		
	
		
			
			|  |  |  | self.start = NT(start[0]) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def _to_rule(self, lark_rule): | 
		
	
		
			
			|  |  |  | """Converts a lark rule, (lhs, rhs, callback, options), to a Rule.""" | 
		
	
	
		
			
				|  |  | @@ -100,13 +99,16 @@ class Parser(object): | 
		
	
		
			
			|  |  |  | weight=lark_rule.options.priority if lark_rule.options and lark_rule.options.priority else 0, | 
		
	
		
			
			|  |  |  | alias=lark_rule) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def parse(self, tokenized):  # pylint: disable=invalid-name | 
		
	
		
			
			|  |  |  | def parse(self, tokenized, start):  # pylint: disable=invalid-name | 
		
	
		
			
			|  |  |  | """Parses input, which is a list of tokens.""" | 
		
	
		
			
			|  |  |  | assert start | 
		
	
		
			
			|  |  |  | start = NT(start) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | table, trees = _parse(tokenized, self.grammar) | 
		
	
		
			
			|  |  |  | # Check if the parse succeeded. | 
		
	
		
			
			|  |  |  | if all(r.lhs != self.start for r in table[(0, len(tokenized) - 1)]): | 
		
	
		
			
			|  |  |  | if all(r.lhs != start for r in table[(0, len(tokenized) - 1)]): | 
		
	
		
			
			|  |  |  | raise ParseError('Parsing failed.') | 
		
	
		
			
			|  |  |  | parse = trees[(0, len(tokenized) - 1)][self.start] | 
		
	
		
			
			|  |  |  | parse = trees[(0, len(tokenized) - 1)][start] | 
		
	
		
			
			|  |  |  | return self._to_tree(revert_cnf(parse)) | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | def _to_tree(self, rule_node): | 
		
	
	
		
			
				|  |  | 
 |