Esempio n. 1
0
 def _token_nud_star(self, token):
     left = ast.identity()
     if self._current_token() == 'rbracket':
         right = ast.identity()
     else:
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
     return ast.value_projection(left, right)
Esempio n. 2
0
 def _token_nud_star(self, token):
     left = ast.identity()
     if self._current_token() == 'rbracket':
         right = ast.identity()
     else:
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
     return ast.value_projection(left, right)
Esempio n. 3
0
 def _token_nud_lbracket(self, token):
     if self._current_token() in ['number', 'colon']:
         right = self._parse_index_expression()
         # We could optimize this and remove the identity() node.
         # We don't really need an index_expression node, we can
         # just use emit an index node here if we're not dealing
         # with a slice.
         return self._project_if_slice(ast.identity(), right)
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
Esempio n. 4
0
 def _token_nud_lbracket(self, token):
     if self._current_token() in ['number', 'colon']:
         right = self._parse_index_expression()
         # We could optimize this and remove the identity() node.
         # We don't really need an index_expression node, we can
         # just use emit an index node here if we're not dealing
         # with a slice.
         return self._project_if_slice(ast.identity(), right)
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
Esempio n. 5
0
 def _token_led_filter(self, left):
     # Filters are projections.
     condition = self._expression(0)
     self._match('rbracket')
     if self._current_token() == 'flatten':
         right = ast.identity()
     else:
         right = self._parse_projection_rhs(self.BINDING_POWER['filter'])
     return ast.filter_projection(left, right, condition)
Esempio n. 6
0
 def _token_led_filter(self, left):
     # Filters are projections.
     condition = self._expression(0)
     self._match('rbracket')
     if self._current_token() == 'flatten':
         right = ast.identity()
     else:
         right = self._parse_projection_rhs(self.BINDING_POWER['filter'])
     return ast.filter_projection(left, right, condition)
Esempio n. 7
0
 def _token_nud_lbracket(self, token):
     if self._current_token() in ['number', 'colon']:
         return self._parse_index_expression()
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
Esempio n. 8
0
 def _token_nud_lbracket(self, token):
     if self._current_token() in ['number', 'colon']:
         return self._parse_index_expression()
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
 def _token_nud_lbracket(self, token):
     if self._current_token() == 'number':
         node = ast.index(self._lookahead_token(0)['value'])
         self._advance()
         self._match('rbracket')
         return node
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
 def _token_nud_lbracket(self, token):
     if self._current_token() == 'number':
         node = ast.index(self._lookahead_token(0)['value'])
         self._advance()
         self._match('rbracket')
         return node
     elif self._current_token() == 'star' and \
             self._lookahead(1) == 'rbracket':
         self._advance()
         self._advance()
         right = self._parse_projection_rhs(self.BINDING_POWER['star'])
         return ast.projection(ast.identity(), right)
     else:
         return self._parse_multi_select_list()
Esempio n. 11
0
 def _parse_projection_rhs(self, binding_power):
     # Parse the right hand side of the projection.
     if self.BINDING_POWER[self._current_token()] < self._PROJECTION_STOP:
         # BP of 10 are all the tokens that stop a projection.
         right = ast.identity()
     elif self._current_token() == 'lbracket':
         right = self._expression(binding_power)
     elif self._current_token() == 'filter':
         right = self._expression(binding_power)
     elif self._current_token() == 'dot':
         self._match('dot')
         right = self._parse_dot_rhs(binding_power)
     else:
         self._raise_parse_error_for_token(self._lookahead_token(0),
                                           'syntax error')
     return right
Esempio n. 12
0
 def _parse_projection_rhs(self, binding_power):
     # Parse the right hand side of the projection.
     if self.BINDING_POWER[self._current_token()] < 10:
         # BP of 10 are all the tokens that stop a projection.
         right = ast.identity()
     elif self._current_token() == 'lbracket':
         right = self._expression(binding_power)
     elif self._current_token() == 'filter':
         right = self._expression(binding_power)
     elif self._current_token() == 'dot':
         self._match('dot')
         right = self._parse_dot_rhs(binding_power)
     else:
         t = self._lookahead_token(0)
         lex_position = t['start']
         actual_value = t['value']
         actual_type = t['type']
         raise exceptions.ParseError(lex_position, actual_value,
                                     actual_type, 'syntax error')
     return right
Esempio n. 13
0
 def _parse_projection_rhs(self, binding_power):
     # Parse the right hand side of the projection.
     if self.BINDING_POWER[self._current_token()] < 10:
         # BP of 10 are all the tokens that stop a projection.
         right = ast.identity()
     elif self._current_token() == 'lbracket':
         right = self._expression(binding_power)
     elif self._current_token() == 'filter':
         right = self._expression(binding_power)
     elif self._current_token() == 'dot':
         self._match('dot')
         right = self._parse_dot_rhs(binding_power)
     else:
         t = self._lookahead_token(0)
         lex_position = t['start']
         actual_value = t['value']
         actual_type = t['type']
         raise exceptions.ParseError(lex_position, actual_value,
                                     actual_type, 'syntax error')
     return right
Esempio n. 14
0
 def _token_nud_flatten(self, token):
     left = ast.flatten(ast.identity())
     right = self._parse_projection_rhs(
         self.BINDING_POWER['flatten'])
     return ast.projection(left, right)
Esempio n. 15
0
 def _token_nud_filter(self, token):
     return self._token_led_filter(ast.identity())
Esempio n. 16
0
 def _token_nud_flatten(self, token):
     left = ast.flatten(ast.identity())
     right = self._parse_projection_rhs(
         self.BINDING_POWER['flatten'])
     return ast.projection(left, right)
Esempio n. 17
0
 def _token_nud_filter(self, token):
     return self._token_led_filter(ast.identity())