Lines Matching refs:self
170 def __init__(self, string): argument
171 self.input = string
172 self.cur = 0
174 def IsDone(self): argument
175 return self.cur == len(self.input)
177 def ConsumeWhitespace(self): argument
178 while not self.IsDone() and self.input[self.cur] in ' \t\n':
179 self.cur += 1
181 def Parse(self): argument
199 result = self._ParseAllowTrailing()
200 self.ConsumeWhitespace()
201 if not self.IsDone():
203 self.input[self.cur:])
206 def ParseArgs(self): argument
213 self.ConsumeWhitespace()
214 while not self.IsDone():
215 ident = self._ParseIdent()
216 self.ConsumeWhitespace()
217 if self.input[self.cur] != '=':
218 raise GNException("Unexpected token: " + self.input[self.cur:])
219 self.cur += 1
220 self.ConsumeWhitespace()
221 val = self._ParseAllowTrailing()
222 self.ConsumeWhitespace()
227 def _ParseAllowTrailing(self): argument
229 self.ConsumeWhitespace()
230 if self.IsDone():
233 next_char = self.input[self.cur]
235 return self.ParseList()
237 return self.ParseNumber()
239 return self.ParseString()
240 elif self._ConstantFollows('true'):
242 elif self._ConstantFollows('false'):
245 raise GNException("Unexpected token: " + self.input[self.cur:])
247 def _ParseIdent(self): argument
250 next_char = self.input[self.cur]
252 raise GNException("Expected an identifier: " + self.input[self.cur:])
255 self.cur += 1
257 next_char = self.input[self.cur]
260 self.cur += 1
261 next_char = self.input[self.cur]
265 def ParseNumber(self): argument
266 self.ConsumeWhitespace()
267 if self.IsDone():
270 begin = self.cur
273 if not self.IsDone() and _IsDigitOrMinus(self.input[self.cur]):
274 self.cur += 1
275 while not self.IsDone() and self.input[self.cur].isdigit():
276 self.cur += 1
278 number_string = self.input[begin:self.cur]
283 def ParseString(self): argument
284 self.ConsumeWhitespace()
285 if self.IsDone():
288 if self.input[self.cur] != '"':
290 self.input[self.cur:])
291 self.cur += 1 # Skip over quote.
293 begin = self.cur
294 while not self.IsDone() and self.input[self.cur] != '"':
295 if self.input[self.cur] == '\\':
296 self.cur += 1 # Skip over the backslash.
297 if self.IsDone():
299 self.input)
300 self.cur += 1
302 if self.IsDone():
303 raise GNException('Unterminated string:\n ' + self.input[begin:])
305 end = self.cur
306 self.cur += 1 # Consume trailing ".
308 return UnescapeGNString(self.input[begin:end])
310 def ParseList(self): argument
311 self.ConsumeWhitespace()
312 if self.IsDone():
316 if self.input[self.cur] != '[':
318 self.input[self.cur:])
319 self.cur += 1
320 self.ConsumeWhitespace()
321 if self.IsDone():
322 raise GNException("Unterminated list:\n " + self.input)
326 while not self.IsDone():
327 if self.input[self.cur] == ']':
328 self.cur += 1 # Skip over ']'.
334 list_result += [self._ParseAllowTrailing()]
335 self.ConsumeWhitespace()
336 if self.IsDone():
340 previous_had_trailing_comma = self.input[self.cur] == ','
343 self.cur += 1
344 self.ConsumeWhitespace()
346 raise GNException("Unterminated list:\n " + self.input)
348 def _ConstantFollows(self, constant): argument
353 end = self.cur + len(constant)
354 if end > len(self.input):
356 if self.input[self.cur:end] == constant:
357 self.cur = end