gin/config_parser.py
def parse_statement(self):
    """Parse a single statement.

    Returns:
      Either a `BindingStatement`, `ImportStatement`, `IncludeStatement`, or
      `None` if no more statements can be parsed (EOF reached).
    """
    self._skip_whitespace_and_comments()
    if self._current_token.kind == tokenize.ENDMARKER:
      return None

    # Save off location, but ignore char_num for any statement-level errors.
    stmt_loc = self._current_location(ignore_char_num=True)
    binding_key_or_keyword = self._parse_selector()
    statement = None
    if self._current_token.value != '=':
      if binding_key_or_keyword == 'import':
        module = self._parse_selector(scoped=False)
        statement = ImportStatement(module, stmt_loc)
      elif binding_key_or_keyword == 'include':
        str_loc = self._current_location()
        success, filename = self._maybe_parse_basic_type()
        if not success or not isinstance(filename, str):
          self._raise_syntax_error('Expected file path as string.', str_loc)
        statement = IncludeStatement(filename, stmt_loc)
      else:
        self._raise_syntax_error("Expected '='.")
    else:  # We saw an '='.
      self._advance_one_token()
      value = self.parse_value()
      scope, selector, arg_name = parse_binding_key(binding_key_or_keyword)
      statement = BindingStatement(scope, selector, arg_name, value, stmt_loc)

    assert statement, 'Internal parsing error.'

    if (self._current_token.kind != tokenize.NEWLINE and
        self._current_token.kind != tokenize.ENDMARKER):
      self._raise_syntax_error('Expected newline.')
    elif self._current_token.kind == tokenize.NEWLINE:
      self._advance_one_token()

    return statement
def parse_statement(self):
    self._skip_whitespace_and_comments()
    if self._current_token.kind == tokenize.ENDMARKER:
      return None

    # Save off location, but ignore char_num for any statement-level errors.
    stmt_loc = self._current_location(ignore_char_num=True)
    binding_key_or_keyword = self._parse_selector()
    statement = None
    if self._current_token.value != '=':
      if binding_key_or_keyword == 'import':
        module = self._parse_selector(scoped=False)
        statement = ImportStatement(module, stmt_loc)
      elif binding_key_or_keyword == 'include':
        str_loc = self._current_location()
        success, filename = self._maybe_parse_basic_type()
        if not success or not isinstance(filename, str):
          self._raise_syntax_error('Expected file path as string.', str_loc)
        statement = IncludeStatement(filename, stmt_loc)
      else:
        self._raise_syntax_error("Expected '='.")
    else:  # We saw an '='.
      self._advance_one_token()
      value = self.parse_value()
      scope, selector, arg_name = parse_binding_key(binding_key_or_keyword)
      statement = BindingStatement(scope, selector, arg_name, value, stmt_loc)

    assert statement, 'Internal parsing error.'

    if (self._current_token.kind != tokenize.NEWLINE and
        self._current_token.kind != tokenize.ENDMARKER):
      self._raise_syntax_error('Expected newline.')
    elif self._current_token.kind == tokenize.NEWLINE:
      self._advance_one_token()

    return statement
def parse_statement ( self ) : self . _skip_whitespace_and_comments ( ) if self . _current_token . kind == tokenize . ENDMARKER : return None # Save off location, but ignore char_num for any statement-level errors. stmt_loc = self . _current_location ( ignore_char_num = True ) binding_key_or_keyword = self . _parse_selector ( ) statement = None if self . _current_token . value != '=' : if binding_key_or_keyword == 'import' : module = self . _parse_selector ( scoped = False ) statement = ImportStatement ( module , stmt_loc ) elif binding_key_or_keyword == 'include' : str_loc = self . _current_location ( ) success , filename = self . _maybe_parse_basic_type ( ) if not success or not isinstance ( filename , str ) : self . _raise_syntax_error ( 'Expected file path as string.' , str_loc ) statement = IncludeStatement ( filename , stmt_loc ) else : self . _raise_syntax_error ( "Expected '='." ) else : # We saw an '='. self . _advance_one_token ( ) value = self . parse_value ( ) scope , selector , arg_name = parse_binding_key ( binding_key_or_keyword ) statement = BindingStatement ( scope , selector , arg_name , value , stmt_loc ) assert statement , 'Internal parsing error.' if ( self . _current_token . kind != tokenize . NEWLINE and self . _current_token . kind != tokenize . ENDMARKER ) : self . _raise_syntax_error ( 'Expected newline.' ) elif self . _current_token . kind == tokenize . NEWLINE : self . _advance_one_token ( ) return statement
Parse a single statement.

    Returns:
      Either a `BindingStatement`, `ImportStatement`, `IncludeStatement`, or
      `None` if no more statements can be parsed (EOF reached).
Parse a single statement .