def _parse_parameters(self):
""" Parses parameter list """
# Check and skip over '('
t = self._next_token()
if t.type != TokenType.OP or t.value != '(':
raise ParseError("Expected '(' of parameter list, got '%s'" % (t.value,))
parameters = []
while self._tokens_left():
# Check for ')' that would end parameter list
t = self._peek_token()
if t.type == TokenType.OP and t.value == ')':
self._next_token()
return parameters
# Parse one parameter
parameters.append(self._parse_parameter())
# Check if next token is either ')' or ','
t = self._peek_token()
while t.type == TokenType.NEWLINE or t.value == "\n":
self._next_token()
if not self._tokens_left():
raise ParseError("Expected ',' or end of parameter list after parameter '%s'" % (parameters[-1],))
t = self._peek_token()
if t.type == TokenType.OP and t.value == ')':
pass
elif t.type == TokenType.OP and t.value == ',':
self._next_token()
else:
raise ParseError("Expected ',' or end of parameter list after parameter '%s'" % (parameters[-1],))
# Code shouldn't reach here, unless there is not closing ')' in parameter list
raise ParseError("Unmatched parenthesis")
评论列表
文章目录