def parse
      begin
        @parser.parse(@source)
        @feature = @builder.ast
        return nil if @feature.nil? # Nothing matched
        
        # The parser used the following keywords when parsing the feature
        # @feature.language = @parser.i18n_language.get_code_keywords.map {|word| word }
        
      rescue Gherkin::ParserError => e
        e.message.insert(0, "#{@file}: ")
        warn e
      end
      
      self
    end
def parse
      begin
        @parser.parse(@source)
        @feature = @builder.ast
        return nil if @feature.nil? # Nothing matched
        
        # The parser used the following keywords when parsing the feature
        # @feature.language = @parser.i18n_language.get_code_keywords.map {|word| word }
        
      rescue Gherkin::ParserError => e
        e.message.insert(0, "#{@file}: ")
        warn e
      end
      
      self
    end
Each found feature found is creates a new FeatureParser

 This logic was copied from the logic found in Cucumber to create the builder
 and then set up the formatter and parser. The difference is really the
 custom Cucumber::Parser::CityBuilder that is being used to parse the elements
 of the feature into YARD::CodeObjects.

 @param [<String>] source containing the string conents of the feauture file
 @param [<String>] file the filename that contains the source


 When parse is called, the gherkin parser is executed and all the feature
 elements that are found are sent to the various methods in the
 Cucumber::Parser::CityBuilder. The result of which is the feature element
 that contains all the scenarios, steps, etc. associated with that feature.

 @see Cucumber::Parser::CityBuilder