comparison mercurial/parser.py @ 13176:895f54a79c6e

templater: use the parser.py parser to extend the templater syntax
author Matt Mackall <mpm@selenic.com>
date Mon, 20 Dec 2010 12:09:00 -0600
parents 05af334bac05
children e798e430c5e5
comparison
equal deleted inserted replaced
13175:09cde75e0613 13176:895f54a79c6e
20 class parser(object): 20 class parser(object):
21 def __init__(self, tokenizer, elements, methods=None): 21 def __init__(self, tokenizer, elements, methods=None):
22 self._tokenizer = tokenizer 22 self._tokenizer = tokenizer
23 self._elements = elements 23 self._elements = elements
24 self._methods = methods 24 self._methods = methods
25 self.current = None
25 def _advance(self): 26 def _advance(self):
26 'advance the tokenizer' 27 'advance the tokenizer'
27 t = self.current 28 t = self.current
28 try: 29 try:
29 self.current = self._iter.next() 30 self.current = self._iter.next()
74 self._match(infix[2], pos) 75 self._match(infix[2], pos)
75 return expr 76 return expr
76 def parse(self, message): 77 def parse(self, message):
77 'generate a parse tree from a message' 78 'generate a parse tree from a message'
78 self._iter = self._tokenizer(message) 79 self._iter = self._tokenizer(message)
79 self.current = self._iter.next() 80 self._advance()
80 return self._parse() 81 return self._parse()
81 def eval(self, tree): 82 def eval(self, tree):
82 'recursively evaluate a parse tree using node methods' 83 'recursively evaluate a parse tree using node methods'
83 if not isinstance(tree, tuple): 84 if not isinstance(tree, tuple):
84 return tree 85 return tree