Sha256: 2cae58501c68d70c0385317dbce74c281e90552d19ba1b359500d684fdeb8871

Contents?: true

Size: 1.18 KB

Versions: 2

Compression:

Stored size: 1.18 KB

Contents

require 'gherkin3/token_scanner'
require 'gherkin3/token_matcher'
require 'gherkin3/ast_builder'
require 'gherkin3/parser'

module Cucumber
  module Gherkin
    class StepsParser
      def initialize(builder, language)
        @builder = builder
        @language = language
      end
      def parse(text)
        ast_builder = ::Gherkin3::AstBuilder.new
        token_matcher = ::Gherkin3::TokenMatcher.new
        token_matcher.send(:change_dialect, @language, nil) unless @language == 'en'
        context = ::Gherkin3::ParserContext.new(
          ::Gherkin3::TokenScanner.new(text),
          token_matcher,
          [],
          []
          )
        parser = ::Gherkin3::Parser.new(ast_builder)

        parser.start_rule(context, :ScenarioDefinition)
        parser.start_rule(context, :Scenario)
        scenario = ast_builder.current_node
        state = 12
        token = nil
        begin
          token = parser.read_token(context)
          state = parser.match_token(state, token, context)
        end until(token.eof?)

        raise CompositeParserException.new(context.errors) if context.errors.any?

        @builder.steps(ast_builder.get_steps(scenario))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cucumber-2.2.0 lib/cucumber/gherkin/steps_parser.rb
cucumber-2.1.0 lib/cucumber/gherkin/steps_parser.rb