From 972432ebe8881de08da32994f56687995f9efc11 Mon Sep 17 00:00:00 2001 From: Robert Kruczek Date: Fri, 15 May 2026 20:47:30 +0200 Subject: [PATCH] Allow steps to contain both DataTable and DocString --- README.md | 6 +- c/gherkin.berp | 4 +- c/include/pickle_step.h | 6 + c/include/rule_type.h | 4 +- c/include/step.h | 7 + c/src/ast_builder.c | 17 +- c/src/ast_printer.c | 16 +- c/src/compiler.c | 57 +- c/src/parser.c | 1688 ++- c/src/pickle_printer.c | 13 +- c/src/pickle_step.c | 34 +- c/src/step.c | 34 +- .../gherkin/cucumber/gherkin/parser.hpp | 2248 ++-- .../gherkin/cucumber/gherkin/rule_type.hpp | 2 + .../cucumber/gherkin/pickle_compiler.cpp | 25 +- dart/lib/src/ast/GherkinDocumentBuilder.dart | 13 +- dart/lib/src/ast/Step.dart | 14 +- dart/lib/src/pickles/PickleCompiler.dart | 15 +- dotnet/Gherkin/Ast/Step.cs | 24 +- dotnet/Gherkin/AstBuilder.cs | 21 +- .../CucumberMessages/AstMessagesConverter.cs | 22 +- .../Pickles/PickleCompiler.cs | 21 +- dotnet/Gherkin/Parser.cs | 9174 +++++++++-------- elixir/lib/gherkin/ast_builder/ast_builder.ex | 4 +- elixir/lib/gherkin/parser.ex | 2480 +++-- .../pickle_compiler/pickle_compiler.ex | 19 +- gherkin.berp | 4 +- go/astbuilder.go | 9 +- go/parser.go | 1812 +++- go/pickles.go | 14 +- .../main/java/io/cucumber/gherkin/Parser.java | 2212 ++-- .../io/cucumber/gherkin/PickleCompiler.java | 10 +- javascript/src/Parser.ts | 1770 +++- javascript/src/pickles/compile.ts | 16 +- perl/lib/Gherkin/Generated/Parser.pm | 2182 +++- php/src-generated/Parser.php | 1724 +++- php/src-generated/Parser/RuleType.php | 4 +- php/src/PickleCompiler.php | 13 +- python/src/gherkin/ast_builder.py | 12 +- python/src/gherkin/parser.py | 1736 +++- python/src/gherkin/pickles/compiler.py | 20 +- ruby/lib/gherkin/parser.rb | 1736 +++- ruby/lib/gherkin/pickles/compiler.rb | 14 +- testdata/bad/repeated_step_docstring.feature | 10 + ...eated_step_docstring.feature.errors.ndjson | 3 + .../step_with_datatable_and_docstring.feature | 17 + ...datatable_and_docstring.feature.ast.ndjson | 1 + ...table_and_docstring.feature.pickles.ndjson | 2 + ...atable_and_docstring.feature.source.ndjson | 1 + ...ith_datatable_and_docstring.feature.tokens | 18 + 50 files changed, 19869 insertions(+), 9439 deletions(-) create mode 100644 testdata/bad/repeated_step_docstring.feature create mode 100644 testdata/bad/repeated_step_docstring.feature.errors.ndjson create mode 100644 testdata/good/step_with_datatable_and_docstring.feature create mode 100644 testdata/good/step_with_datatable_and_docstring.feature.ast.ndjson create mode 100644 testdata/good/step_with_datatable_and_docstring.feature.pickles.ndjson create mode 100644 testdata/good/step_with_datatable_and_docstring.feature.source.ndjson create mode 100644 testdata/good/step_with_datatable_and_docstring.feature.tokens diff --git a/README.md b/README.md index b694d3a40..c9eeed5df 100644 --- a/README.md +++ b/README.md @@ -247,9 +247,8 @@ classDiagram TableRow "0..*" --* "1" Examples: rows Background "1" *-- "0..*" Step: steps Step "0..*" --* "1" ScenarioDefinition: steps - StepArgument "0..1" --* "1" Step: stepArgument - DataTable --|> StepArgument - StepArgument <|-- DocString + DataTable "0..1" --* "1" Step: dataTable + DocString "0..1" --* "1" Step: docString TableRow "0..*" --* "1" DataTable: rows TableRow "1" *-- "0..*" TableCell: cells class ScenarioDefinition { @@ -305,6 +304,7 @@ Every class represents a node in the AST. Every node has a `Location` that descr the line number and column number in the input file. These numbers are 1-indexed. All fields on nodes are strings (except for `Location.line` and `Location.column`). +A step may have at most one `DataTable` and at most one `DocString`. The implementation is simple objects without behaviour, only data. It's up to the implementation to decide whether to use classes or just basic collections, diff --git a/c/gherkin.berp b/c/gherkin.berp index 1b97fce01..dfe2f974d 100644 --- a/c/gherkin.berp +++ b/c/gherkin.berp @@ -25,7 +25,9 @@ Examples! := #ExamplesLine DescriptionHelper ExamplesTable? ExamplesTable! := #TableRow #TableRow* Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) +StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) +DataTableAndMaybeDocString := DataTable DocString? +DocStringAndMaybeDataTable := DocString DataTable? DataTable! := #TableRow+ DocString! := #DocStringSeparator #Other* #DocStringSeparator diff --git a/c/include/pickle_step.h b/c/include/pickle_step.h index fbd8bc609..2f4c42094 100644 --- a/c/include/pickle_step.h +++ b/c/include/pickle_step.h @@ -5,6 +5,8 @@ #include "pickle_ast_node_id.h" #include "pickle_argument.h" +#include "pickle_string.h" +#include "pickle_table.h" #include "id_generator.h" #ifdef __cplusplus @@ -24,6 +26,8 @@ typedef struct PickleStep { wchar_t* text; PickleStepType pickle_step_type; const PickleArgument* argument; + const PickleString* doc_string; + const PickleTable* data_table; } PickleStep; typedef struct PickleSteps { @@ -33,6 +37,8 @@ typedef struct PickleSteps { const PickleStep* PickleStep_new(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleArgument* argument); +const PickleStep* PickleStep_new_with_arguments(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleTable* data_table, const PickleString* doc_string); + void PickleStep_delete(const PickleStep* pickle_step); void PickleStep_transfer(PickleStep* to_pickle_step, PickleStep* from_pickle_step); diff --git a/c/include/rule_type.h b/c/include/rule_type.h index 56301ba4d..70bd5be6b 100644 --- a/c/include/rule_type.h +++ b/c/include/rule_type.h @@ -30,7 +30,9 @@ typedef enum RuleType { Rule_Examples, /* Examples! := #ExamplesLine DescriptionHelper ExamplesTable? */ Rule_ExamplesTable, /* ExamplesTable! := #TableRow #TableRow* */ Rule_Step, /* Step! := #StepLine StepArg? */ - Rule_StepArg, /* StepArg := (DataTable | DocString) */ + Rule_StepArg, /* StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) */ + Rule_DataTableAndMaybeDocString, /* DataTableAndMaybeDocString := DataTable DocString? */ + Rule_DocStringAndMaybeDataTable, /* DocStringAndMaybeDataTable := DocString DataTable? */ Rule_DataTable, /* DataTable! := #TableRow+ */ Rule_DocString, /* DocString! := #DocStringSeparator #Other* #DocStringSeparator */ Rule_Tags, /* Tags! := #TagLine+ */ diff --git a/c/include/step.h b/c/include/step.h index 70fb68c91..1218705f0 100644 --- a/c/include/step.h +++ b/c/include/step.h @@ -17,6 +17,9 @@ typedef struct StepArgument { GherkinAstType type; } StepArgument; +typedef struct DataTable DataTable; +typedef struct DocString DocString; + typedef struct Step { item_delete_function step_delete; GherkinAstType type; @@ -26,6 +29,8 @@ typedef struct Step { KeywordType keyword_type; wchar_t* text; const StepArgument* argument; + const DataTable* data_table; + const DocString* doc_string; } Step; typedef struct Steps { @@ -35,6 +40,8 @@ typedef struct Steps { const Step* Step_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const StepArgument* argument); +const Step* Step_new_with_arguments(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const DataTable* data_table, const DocString* doc_string); + void Step_delete(const Step* step); void Step_transfer(Step* to_step, Step* from_step); diff --git a/c/src/ast_builder.c b/c/src/ast_builder.c index 4fa0338de..4c86cd6e3 100644 --- a/c/src/ast_builder.c +++ b/c/src/ast_builder.c @@ -44,7 +44,8 @@ static const ChildDefinitions* get_child_definitions(AstNode* ast_node); static const Steps* get_steps(AstNode* ast_node); -static const StepArgument* get_step_argument(AstNode* ast_node); +static const DataTable* get_step_data_table(AstNode* ast_node); +static const DocString* get_step_doc_string(AstNode* ast_node); static const Examples* get_examples(AstNode* ast_node); @@ -157,7 +158,7 @@ static void* transform_node(AstNode* ast_node, AstBuilder* ast_builder) { switch (ast_node->rule_type) { case Rule_Step: { token = AstNode_get_token(ast_node, Token_StepLine); - const Step* step = Step_new(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_keyword_type, token->matched_text, get_step_argument(ast_node)); + const Step* step = Step_new_with_arguments(token->location, ast_builder->id_generator, token->matched_keyword, token->matched_keyword_type, token->matched_text, get_step_data_table(ast_node), get_step_doc_string(ast_node)); Token_delete(token); AstNode_delete(ast_node); return (void*)step; @@ -303,12 +304,12 @@ static const Steps* get_steps(AstNode* ast_node) { return steps; } -static const StepArgument* get_step_argument(AstNode* ast_node) { - StepArgument* argument = AstNode_get_single(ast_node, Rule_DataTable); - if (!argument) { - argument = AstNode_get_single(ast_node, Rule_DocString); - } - return argument; +static const DataTable* get_step_data_table(AstNode* ast_node) { + return AstNode_get_single(ast_node, Rule_DataTable); +} + +static const DocString* get_step_doc_string(AstNode* ast_node) { + return AstNode_get_single(ast_node, Rule_DocString); } static const Examples* get_examples(AstNode* ast_node) { diff --git a/c/src/ast_printer.c b/c/src/ast_printer.c index 0b866e4d7..87943ed8c 100644 --- a/c/src/ast_printer.c +++ b/c/src/ast_printer.c @@ -132,15 +132,13 @@ static void print_step(FILE* file, const Step* step) { print_keyword_type(file, step->keyword_type); print_text(file, step->text); print_location(file, &step->location); - if (step->argument) { - if (step->argument->type == Gherkin_DataTable) { - fprintf(file, ",\"dataTable\":"); - print_data_table(file, (DataTable*)step->argument); - } - else if (step->argument->type == Gherkin_DocString) { - fprintf(file, ",\"docString\":"); - print_doc_string(file, (DocString*)step->argument); - } + if (step->data_table) { + fprintf(file, ",\"dataTable\":"); + print_data_table(file, step->data_table); + } + if (step->doc_string) { + fprintf(file, ",\"docString\":"); + print_doc_string(file, step->doc_string); } fprintf(file, "}"); } diff --git a/c/src/compiler.c b/c/src/compiler.c index 3e366e048..42556fc0a 100644 --- a/c/src/compiler.c +++ b/c/src/compiler.c @@ -28,7 +28,7 @@ typedef struct ReplacementItem { static void compile_scenario_container(Compiler* compiler, const ChildDefinitions* child_definitions, const Tags* feature_tags, const Tags* rule_tags, const wchar_t* uri, const wchar_t* language, int context_background_step_count, const Steps* context_background_steps); -static const PickleArgument* create_pickle_argument(const StepArgument* step_argument, const TableRow* example_header, const TableRow* body_row); +static const PickleString* create_pickle_string(const DocString* doc_string, const TableRow* example_header, const TableRow* body_row); static const PickleTable* create_pickle_table(DataTable* data_table, const TableRow* example_header, const TableRow* body_row); @@ -190,35 +190,31 @@ static void compile_scenario_container(Compiler* compiler, const ChildDefinition } } -static const PickleArgument* create_pickle_argument(const StepArgument* step_argument, const TableRow* example_header, const TableRow* body_row) { - const PickleArgument* argument = 0; - if (step_argument) { - if (step_argument->type == Gherkin_DataTable) { - argument = (const PickleArgument*)create_pickle_table((DataTable*)step_argument, example_header, body_row); - } - else if (step_argument->type == Gherkin_DocString) { - const DocString* doc_string = (DocString*)step_argument; - if (!example_header) { - argument = (const PickleArgument*)PickleString_new(doc_string->content, doc_string->media_type); - } - else { - const wchar_t* expanded_text = create_expanded_text(doc_string->content, example_header, body_row); - const wchar_t* expanded_media_type = 0; - if(doc_string->media_type){ - expanded_media_type = create_expanded_text(doc_string->media_type, example_header, body_row); - } - argument = (const PickleArgument*)PickleString_new(expanded_text, expanded_media_type); - free((void*)expanded_text); - if(expanded_media_type != 0){ - free((void*)expanded_media_type); - } - } - } +static const PickleString* create_pickle_string(const DocString* doc_string, const TableRow* example_header, const TableRow* body_row) { + if (!doc_string) { + return 0; + } + if (!example_header) { + return PickleString_new(doc_string->content, doc_string->media_type); + } + + const wchar_t* expanded_text = create_expanded_text(doc_string->content, example_header, body_row); + const wchar_t* expanded_media_type = 0; + if(doc_string->media_type){ + expanded_media_type = create_expanded_text(doc_string->media_type, example_header, body_row); } - return argument; + const PickleString* pickle_string = PickleString_new(expanded_text, expanded_media_type); + free((void*)expanded_text); + if(expanded_media_type != 0){ + free((void*)expanded_media_type); + } + return pickle_string; } static const PickleTable* create_pickle_table(DataTable* data_table, const TableRow* example_header, const TableRow* body_row) { + if (!data_table) { + return 0; + } PickleRows* rows = (PickleRows*)malloc(sizeof(PickleRows)); rows->row_count = data_table->rows->row_count; rows->pickle_rows = 0; @@ -302,15 +298,18 @@ static void copy_tags(PickleTag* destination_array, const Tags* source) { static void copy_step(IdGenerator* id_generator, KeywordType keyword_type, PickleStep* destination_array, const Step* source_step) { PickleStepType pickle_step_type = convert_to_pickle_step_type(keyword_type); const PickleAstNodeIds* step_ast_node_ids = PickleAstNodeIds_new_single(source_step->id); - const PickleArgument* argument = create_pickle_argument(source_step->argument, 0, 0); - const PickleStep* step = PickleStep_new(step_ast_node_ids, id_generator, source_step->text, pickle_step_type, argument); + const PickleTable* data_table = create_pickle_table((DataTable*)source_step->data_table, 0, 0); + const PickleString* doc_string = create_pickle_string(source_step->doc_string, 0, 0); + const PickleStep* step = PickleStep_new_with_arguments(step_ast_node_ids, id_generator, source_step->text, pickle_step_type, data_table, doc_string); PickleStep_transfer(destination_array, (PickleStep*)step); } static const PickleStep* expand_outline_step(IdGenerator* id_generator, const Step* outline_step, const TableRow* example_header, const TableRow* body_row, const PickleAstNodeIds* ast_node_ids, KeywordType keyword_type) { PickleStepType pickle_step_type = convert_to_pickle_step_type(keyword_type); const wchar_t* expanded_step_text = create_expanded_text(outline_step->text, example_header, body_row); - const PickleStep* expanded_step = PickleStep_new(ast_node_ids, id_generator, expanded_step_text, pickle_step_type, create_pickle_argument(outline_step->argument, example_header, body_row)); + const PickleTable* data_table = create_pickle_table((DataTable*)outline_step->data_table, example_header, body_row); + const PickleString* doc_string = create_pickle_string(outline_step->doc_string, example_header, body_row); + const PickleStep* expanded_step = PickleStep_new_with_arguments(ast_node_ids, id_generator, expanded_step_text, pickle_step_type, data_table, doc_string); free((void*)expanded_step_text); return expanded_step; } diff --git a/c/src/parser.c b/c/src/parser.c index 5c21399dd..8365aec12 100644 --- a/c/src/parser.c +++ b/c/src/parser.c @@ -293,7 +293,7 @@ static bool lookahead_1(ParserContext* context) { static int match_token_at_0(Token* token, ParserContext* context) { if (match_EOF(context, token)) { build(context, token); - return 34; + return 42; } if (match_Language(context, token)) { start_rule(context, Rule_Feature); @@ -393,7 +393,7 @@ static int match_token_at_3(Token* token, ParserContext* context) { end_rule(context, Rule_FeatureHeader); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); @@ -416,7 +416,7 @@ static int match_token_at_3(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -425,21 +425,21 @@ static int match_token_at_3(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_FeatureHeader); start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_FeatureHeader); start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); @@ -462,7 +462,7 @@ static int match_token_at_4(Token* token, ParserContext* context) { end_rule(context, Rule_FeatureHeader); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); @@ -482,7 +482,7 @@ static int match_token_at_4(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -492,7 +492,7 @@ static int match_token_at_4(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -500,7 +500,7 @@ static int match_token_at_4(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -508,7 +508,7 @@ static int match_token_at_4(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); @@ -529,7 +529,7 @@ static int match_token_at_5(Token* token, ParserContext* context) { end_rule(context, Rule_Background); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); @@ -551,7 +551,7 @@ static int match_token_at_5(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -560,21 +560,21 @@ static int match_token_at_5(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Background); start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Background); start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); @@ -597,7 +597,7 @@ static int match_token_at_6(Token* token, ParserContext* context) { end_rule(context, Rule_Background); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); @@ -616,7 +616,7 @@ static int match_token_at_6(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -626,7 +626,7 @@ static int match_token_at_6(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -634,7 +634,7 @@ static int match_token_at_6(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -642,7 +642,7 @@ static int match_token_at_6(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); @@ -664,7 +664,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { end_rule(context, Rule_Background); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { start_rule(context, Rule_DataTable); @@ -674,7 +674,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { if (match_DocStringSeparator(context, token)) { start_rule(context, Rule_DocString); build(context, token); - return 41; + return 52; } if (match_StepLine(context, token)) { end_rule(context, Rule_Step); @@ -689,7 +689,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -699,7 +699,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Step); @@ -707,7 +707,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Step); @@ -715,7 +715,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); @@ -734,7 +734,7 @@ static int match_token_at_7(Token* token, ParserContext* context) { ErrorList_jump_to_global_rescue_env(context->errors); } return 7;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 */ static int match_token_at_8(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DataTable); @@ -742,12 +742,18 @@ static int match_token_at_8(Token* token, ParserContext* context) { end_rule(context, Rule_Background); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); return 8; } + if (match_DocStringSeparator(context, token)) { + end_rule(context, Rule_DataTable); + start_rule(context, Rule_DocString); + build(context, token); + return 9; + } if (match_StepLine(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); @@ -763,7 +769,7 @@ static int match_token_at_8(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -774,7 +780,7 @@ static int match_token_at_8(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DataTable); @@ -783,7 +789,7 @@ static int match_token_at_8(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DataTable); @@ -792,7 +798,7 @@ static int match_token_at_8(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); @@ -803,72 +809,164 @@ static int match_token_at_8(Token* token, ParserContext* context) { return 8; } - /* "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } return 8;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 */ +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 */ static int match_token_at_9(Token* token, ParserContext* context) { - if (match_TagLine(context, token)) { + if (match_DocStringSeparator(context, token)) { + build(context, token); + return 10; + } + if (match_Other(context, token)) { build(context, token); return 9; } + + /* "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 9;} +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_10(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 7; + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } if (match_ScenarioLine(context, token)) { - end_rule(context, Rule_Tags); + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); + build(context, token); + return 12; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 10; + } + if (match_Empty(context, token)) { build(context, token); return 10; } + + /* "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 10;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 */ +static int match_token_at_11(Token* token, ParserContext* context) { + if (match_TagLine(context, token)) { + build(context, token); + return 11; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_Tags); + start_rule(context, Rule_Scenario); + build(context, token); + return 12; + } if (match_Comment(context, token)) { build(context, token); - return 9; + return 11; } if (match_Empty(context, token)) { build(context, token); - return 9; + return 11; } - /* "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ + /* "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ const wchar_t* const expected_tokens = L"#TagLine, #ScenarioLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 9;} + return 11;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 */ -static int match_token_at_10(Token* token, ParserContext* context) { +static int match_token_at_12(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Scenario); end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 10; + return 12; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 11; + return 13; } if (match_StepLine(context, token)) { start_rule(context, Rule_Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -878,7 +976,7 @@ static int match_token_at_10(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -888,13 +986,13 @@ static int match_token_at_10(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Scenario); @@ -902,7 +1000,7 @@ static int match_token_at_10(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Scenario); @@ -910,41 +1008,41 @@ static int match_token_at_10(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 11; + return 13; } - /* "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ + /* "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 10;} + return 12;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_11(Token* token, ParserContext* context) { +static int match_token_at_13(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_Scenario); end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 11; + return 13; } if (match_StepLine(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -952,7 +1050,7 @@ static int match_token_at_11(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -963,7 +1061,7 @@ static int match_token_at_11(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -974,14 +1072,14 @@ static int match_token_at_11(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -990,7 +1088,7 @@ static int match_token_at_11(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -999,46 +1097,46 @@ static int match_token_at_11(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 11; + return 13; } - /* "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 11;} + return 13;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 */ -static int match_token_at_12(Token* token, ParserContext* context) { +static int match_token_at_14(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Step); end_rule(context, Rule_Scenario); end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { start_rule(context, Rule_DataTable); build(context, token); - return 13; + return 15; } if (match_DocStringSeparator(context, token)) { start_rule(context, Rule_DocString); build(context, token); - return 39; + return 49; } if (match_StepLine(context, token)) { end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -1046,7 +1144,7 @@ static int match_token_at_12(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -1057,7 +1155,7 @@ static int match_token_at_12(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -1068,14 +1166,14 @@ static int match_token_at_12(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Step); start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Step); @@ -1084,7 +1182,7 @@ static int match_token_at_12(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Step); @@ -1093,27 +1191,27 @@ static int match_token_at_12(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 12; + return 14; } if (match_Empty(context, token)) { build(context, token); - return 12; + return 14; } - /* "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ + /* "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 12;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_13(Token* token, ParserContext* context) { + return 14;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 */ +static int match_token_at_15(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); @@ -1121,18 +1219,24 @@ static int match_token_at_13(Token* token, ParserContext* context) { end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 13; + return 15; } - if (match_StepLine(context, token)) { + if (match_DocStringSeparator(context, token)) { + end_rule(context, Rule_DataTable); + start_rule(context, Rule_DocString); + build(context, token); + return 16; + } + if (match_StepLine(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -1141,7 +1245,7 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -1153,7 +1257,7 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -1165,7 +1269,7 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_DataTable); @@ -1173,7 +1277,7 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DataTable); @@ -1183,7 +1287,7 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DataTable); @@ -1193,56 +1297,171 @@ static int match_token_at_13(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 15; + } + if (match_Empty(context, token)) { + build(context, token); + return 15; + } + + /* "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 15;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_16(Token* token, ParserContext* context) { + if (match_DocStringSeparator(context, token)) { + build(context, token); + return 17; + } + if (match_Other(context, token)) { + build(context, token); + return 16; + } + + /* "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 16;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_17(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 14; + } + if (match_TagLine(context, token)) { + if (lookahead_1(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 18; + } + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Examples); + build(context, token); return 19; } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 12; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } if (match_Comment(context, token)) { build(context, token); - return 13; + return 17; } if (match_Empty(context, token)) { build(context, token); - return 13; + return 17; } - /* "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 13;} + return 17;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_14(Token* token, ParserContext* context) { +static int match_token_at_18(Token* token, ParserContext* context) { if (match_TagLine(context, token)) { build(context, token); - return 14; + return 18; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Tags); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_Comment(context, token)) { build(context, token); - return 14; + return 18; } if (match_Empty(context, token)) { build(context, token); - return 14; + return 18; } - /* "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ + /* "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ const wchar_t* const expected_tokens = L"#TagLine, #ExamplesLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 14;} + return 18;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 */ -static int match_token_at_15(Token* token, ParserContext* context) { +static int match_token_at_19(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Examples); end_rule(context, Rule_ExamplesDefinition); @@ -1250,21 +1469,21 @@ static int match_token_at_15(Token* token, ParserContext* context) { end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 15; + return 19; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 16; + return 20; } if (match_TableRow(context, token)) { start_rule(context, Rule_ExamplesTable); build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -1273,7 +1492,7 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -1285,7 +1504,7 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -1297,7 +1516,7 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Examples); @@ -1305,7 +1524,7 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Examples); @@ -1315,7 +1534,7 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Examples); @@ -1325,24 +1544,24 @@ static int match_token_at_15(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 16; + return 20; } - /* "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ + /* "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 15;} + return 19;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_16(Token* token, ParserContext* context) { +static int match_token_at_20(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_Examples); @@ -1351,17 +1570,17 @@ static int match_token_at_16(Token* token, ParserContext* context) { end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 16; + return 20; } if (match_TableRow(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_ExamplesTable); build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -1371,7 +1590,7 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -1384,7 +1603,7 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -1397,7 +1616,7 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Description); @@ -1406,7 +1625,7 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -1417,7 +1636,7 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -1428,23 +1647,23 @@ static int match_token_at_16(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 16; + return 20; } - /* "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 16;} + return 20;} /* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 */ -static int match_token_at_17(Token* token, ParserContext* context) { +static int match_token_at_21(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_ExamplesTable); end_rule(context, Rule_Examples); @@ -1453,11 +1672,11 @@ static int match_token_at_17(Token* token, ParserContext* context) { end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -1467,7 +1686,7 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -1480,7 +1699,7 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -1493,7 +1712,7 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -1502,7 +1721,7 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -1513,7 +1732,7 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -1524,76 +1743,76 @@ static int match_token_at_17(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 17; + return 21; } if (match_Empty(context, token)) { build(context, token); - return 17; + return 21; } - /* "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ + /* "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ const wchar_t* const expected_tokens = L"#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 17;} + return 21;} /* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 */ -static int match_token_at_18(Token* token, ParserContext* context) { +static int match_token_at_22(Token* token, ParserContext* context) { if (match_TagLine(context, token)) { build(context, token); - return 18; + return 22; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Tags); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 18; + return 22; } if (match_Empty(context, token)) { build(context, token); - return 18; + return 22; } - /* "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" */ + /* "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" */ const wchar_t* const expected_tokens = L"#TagLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 18;} + return 22;} /* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 */ -static int match_token_at_19(Token* token, ParserContext* context) { +static int match_token_at_23(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_RuleHeader); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 20; + return 24; } if (match_BackgroundLine(context, token)) { end_rule(context, Rule_RuleHeader); start_rule(context, Rule_Background); build(context, token); - return 21; + return 25; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1601,7 +1820,7 @@ static int match_token_at_19(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1611,14 +1830,14 @@ static int match_token_at_19(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_RuleHeader); start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_RuleHeader); @@ -1626,42 +1845,42 @@ static int match_token_at_19(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 20; + return 24; } - /* "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" */ + /* "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 19;} + return 23;} /* GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_20(Token* token, ParserContext* context) { +static int match_token_at_24(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_RuleHeader); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 20; + return 24; } if (match_BackgroundLine(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_RuleHeader); start_rule(context, Rule_Background); build(context, token); - return 21; + return 25; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1670,7 +1889,7 @@ static int match_token_at_20(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1681,7 +1900,7 @@ static int match_token_at_20(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -1689,7 +1908,7 @@ static int match_token_at_20(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -1698,43 +1917,43 @@ static int match_token_at_20(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 20; + return 24; } - /* "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 20;} + return 24;} /* GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 */ -static int match_token_at_21(Token* token, ParserContext* context) { +static int match_token_at_25(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Background); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 21; + return 25; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 22; + return 26; } if (match_StepLine(context, token)) { start_rule(context, Rule_Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1742,7 +1961,7 @@ static int match_token_at_21(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1752,14 +1971,14 @@ static int match_token_at_21(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Background); start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Background); @@ -1767,41 +1986,41 @@ static int match_token_at_21(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 22; + return 26; } - /* "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" */ + /* "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 21;} + return 25;} /* GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_22(Token* token, ParserContext* context) { +static int match_token_at_26(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_Background); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 22; + return 26; } if (match_StepLine(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1810,7 +2029,7 @@ static int match_token_at_22(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1821,7 +2040,7 @@ static int match_token_at_22(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -1829,7 +2048,7 @@ static int match_token_at_22(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -1838,46 +2057,46 @@ static int match_token_at_22(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 22; + return 26; } - /* "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 22;} + return 26;} /* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 */ -static int match_token_at_23(Token* token, ParserContext* context) { +static int match_token_at_27(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Step); end_rule(context, Rule_Background); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { start_rule(context, Rule_DataTable); build(context, token); - return 24; + return 28; } if (match_DocStringSeparator(context, token)) { start_rule(context, Rule_DocString); build(context, token); - return 37; + return 46; } if (match_StepLine(context, token)) { end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1886,7 +2105,7 @@ static int match_token_at_23(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1897,7 +2116,7 @@ static int match_token_at_23(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Step); @@ -1905,7 +2124,7 @@ static int match_token_at_23(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Step); @@ -1914,27 +2133,27 @@ static int match_token_at_23(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 23; + return 27; } if (match_Empty(context, token)) { build(context, token); - return 23; + return 27; } - /* "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" */ + /* "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 23;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_24(Token* token, ParserContext* context) { + return 27;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 */ +static int match_token_at_28(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); @@ -1942,18 +2161,24 @@ static int match_token_at_24(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 24; + return 28; + } + if (match_DocStringSeparator(context, token)) { + end_rule(context, Rule_DataTable); + start_rule(context, Rule_DocString); + build(context, token); + return 29; } if (match_StepLine(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -1963,7 +2188,7 @@ static int match_token_at_24(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -1975,7 +2200,7 @@ static int match_token_at_24(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DataTable); @@ -1984,7 +2209,7 @@ static int match_token_at_24(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DataTable); @@ -1994,84 +2219,179 @@ static int match_token_at_24(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 24; + return 28; } if (match_Empty(context, token)) { build(context, token); - return 24; + return 28; } - /* "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 24;} + return 28;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_29(Token* token, ParserContext* context) { + if (match_DocStringSeparator(context, token)) { + build(context, token); + return 30; + } + if (match_Other(context, token)) { + build(context, token); + return 29; + } + + /* "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 29;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_30(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 27; + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 30; + } + if (match_Empty(context, token)) { + build(context, token); + return 30; + } + + /* "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 30;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_25(Token* token, ParserContext* context) { +static int match_token_at_31(Token* token, ParserContext* context) { if (match_TagLine(context, token)) { build(context, token); - return 25; + return 31; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Tags); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_Comment(context, token)) { build(context, token); - return 25; + return 31; } if (match_Empty(context, token)) { build(context, token); - return 25; + return 31; } - /* "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ + /* "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" */ const wchar_t* const expected_tokens = L"#TagLine, #ScenarioLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 25;} + return 31;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 */ -static int match_token_at_26(Token* token, ParserContext* context) { +static int match_token_at_32(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Scenario); end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 26; + return 32; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 27; + return 33; } if (match_StepLine(context, token)) { start_rule(context, Rule_Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2081,7 +2401,7 @@ static int match_token_at_26(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2092,13 +2412,13 @@ static int match_token_at_26(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Scenario); @@ -2106,7 +2426,7 @@ static int match_token_at_26(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Scenario); @@ -2115,24 +2435,24 @@ static int match_token_at_26(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 27; + return 33; } - /* "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ + /* "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 26;} + return 32;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_27(Token* token, ParserContext* context) { +static int match_token_at_33(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_Scenario); @@ -2140,17 +2460,17 @@ static int match_token_at_27(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 27; + return 33; } if (match_StepLine(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2158,7 +2478,7 @@ static int match_token_at_27(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2169,7 +2489,7 @@ static int match_token_at_27(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2181,14 +2501,14 @@ static int match_token_at_27(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -2197,7 +2517,7 @@ static int match_token_at_27(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -2207,23 +2527,23 @@ static int match_token_at_27(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 27; + return 33; } - /* "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 27;} + return 33;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 */ -static int match_token_at_28(Token* token, ParserContext* context) { +static int match_token_at_34(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Step); end_rule(context, Rule_Scenario); @@ -2231,23 +2551,23 @@ static int match_token_at_28(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { start_rule(context, Rule_DataTable); build(context, token); - return 29; + return 35; } if (match_DocStringSeparator(context, token)) { start_rule(context, Rule_DocString); build(context, token); - return 35; + return 43; } if (match_StepLine(context, token)) { end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2255,7 +2575,7 @@ static int match_token_at_28(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2266,7 +2586,7 @@ static int match_token_at_28(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2278,14 +2598,14 @@ static int match_token_at_28(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Step); start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Step); @@ -2294,7 +2614,7 @@ static int match_token_at_28(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Step); @@ -2304,27 +2624,27 @@ static int match_token_at_28(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 28; + return 34; } if (match_Empty(context, token)) { build(context, token); - return 28; + return 34; } - /* "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ + /* "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 28;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 */ -static int match_token_at_29(Token* token, ParserContext* context) { + return 34;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 */ +static int match_token_at_35(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); @@ -2333,18 +2653,24 @@ static int match_token_at_29(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 29; + return 35; + } + if (match_DocStringSeparator(context, token)) { + end_rule(context, Rule_DataTable); + start_rule(context, Rule_DocString); + build(context, token); + return 36; } if (match_StepLine(context, token)) { end_rule(context, Rule_DataTable); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2353,7 +2679,7 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2365,7 +2691,7 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2378,7 +2704,7 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_DataTable); @@ -2386,7 +2712,7 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DataTable); @@ -2396,7 +2722,7 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DataTable); @@ -2407,56 +2733,174 @@ static int match_token_at_29(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 29; + return 35; } if (match_Empty(context, token)) { build(context, token); - return 29; + return 35; } - /* "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" */ - const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 29;} + return 35;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_36(Token* token, ParserContext* context) { + if (match_DocStringSeparator(context, token)) { + build(context, token); + return 37; + } + if (match_Other(context, token)) { + build(context, token); + return 36; + } + + /* "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 36;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_37(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) { + if (lookahead_1(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 38; + } + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DocString); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 37; + } + if (match_Empty(context, token)) { + build(context, token); + return 37; + } + + /* "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 37;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 */ -static int match_token_at_30(Token* token, ParserContext* context) { +static int match_token_at_38(Token* token, ParserContext* context) { if (match_TagLine(context, token)) { build(context, token); - return 30; + return 38; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Tags); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_Comment(context, token)) { build(context, token); - return 30; + return 38; } if (match_Empty(context, token)) { build(context, token); - return 30; + return 38; } - /* "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ + /* "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" */ const wchar_t* const expected_tokens = L"#TagLine, #ExamplesLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 30;} + return 38;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 */ -static int match_token_at_31(Token* token, ParserContext* context) { +static int match_token_at_39(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Examples); end_rule(context, Rule_ExamplesDefinition); @@ -2465,21 +2909,21 @@ static int match_token_at_31(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 31; + return 39; } if (match_Comment(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 32; + return 40; } if (match_TableRow(context, token)) { start_rule(context, Rule_ExamplesTable); build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2488,7 +2932,7 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2500,7 +2944,7 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2513,7 +2957,7 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Examples); @@ -2521,7 +2965,7 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Examples); @@ -2531,7 +2975,7 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Examples); @@ -2542,24 +2986,24 @@ static int match_token_at_31(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { start_rule(context, Rule_Description); build(context, token); - return 32; + return 40; } - /* "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ + /* "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" */ const wchar_t* const expected_tokens = L"#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 31;} + return 39;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 */ -static int match_token_at_32(Token* token, ParserContext* context) { +static int match_token_at_40(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_Description); end_rule(context, Rule_Examples); @@ -2569,17 +3013,17 @@ static int match_token_at_32(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 32; + return 40; } if (match_TableRow(context, token)) { end_rule(context, Rule_Description); start_rule(context, Rule_ExamplesTable); build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2589,7 +3033,7 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2602,7 +3046,7 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2616,7 +3060,7 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_Description); @@ -2625,7 +3069,7 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_Description); @@ -2636,7 +3080,7 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_Description); @@ -2648,23 +3092,23 @@ static int match_token_at_32(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 32; + return 40; } - /* "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ + /* "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" */ const wchar_t* const expected_tokens = L"#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 32;} + return 40;} /* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 */ -static int match_token_at_33(Token* token, ParserContext* context) { +static int match_token_at_41(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_ExamplesTable); end_rule(context, Rule_Examples); @@ -2674,11 +3118,11 @@ static int match_token_at_33(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2688,7 +3132,7 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2701,7 +3145,7 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2715,7 +3159,7 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -2724,7 +3168,7 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -2735,7 +3179,7 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_ExamplesTable); @@ -2747,46 +3191,46 @@ static int match_token_at_33(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 33; + return 41; } if (match_Empty(context, token)) { build(context, token); - return 33; + return 41; } - /* "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ + /* "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" */ const wchar_t* const expected_tokens = L"#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 33;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_35(Token* token, ParserContext* context) { + return 41;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_43(Token* token, ParserContext* context) { if (match_DocStringSeparator(context, token)) { build(context, token); - return 36; + return 44; } if (match_Other(context, token)) { build(context, token); - return 35; + return 43; } - /* "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ + /* "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" */ const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 35;} -/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_36(Token* token, ParserContext* context) { + return 43;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_44(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); @@ -2795,14 +3239,20 @@ static int match_token_at_36(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) { + end_rule(context, Rule_DocString); + start_rule(context, Rule_DataTable); + build(context, token); + return 45; } if (match_StepLine(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -2811,7 +3261,7 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) { @@ -2823,7 +3273,7 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2836,7 +3286,7 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_DocString); @@ -2844,7 +3294,7 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DocString); @@ -2854,7 +3304,7 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DocString); @@ -2865,46 +3315,149 @@ static int match_token_at_36(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 36; + return 44; } if (match_Empty(context, token)) { build(context, token); - return 36; + return 44; } - /* "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 36;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_37(Token* token, ParserContext* context) { - if (match_DocStringSeparator(context, token)) { + return 44;} +/* GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 */ +static int match_token_at_45(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) { + build(context, token); + return 45; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) { + if (lookahead_1(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Tags); build(context, token); return 38; + } + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 45; + } + if (match_Empty(context, token)) { + build(context, token); + return 45; + } + + /* "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 45;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_46(Token* token, ParserContext* context) { + if (match_DocStringSeparator(context, token)) { + build(context, token); + return 47; } if (match_Other(context, token)) { build(context, token); - return 37; + return 46; } - /* "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ + /* "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" */ const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 37;} -/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_38(Token* token, ParserContext* context) { + return 46;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_47(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); @@ -2912,14 +3465,20 @@ static int match_token_at_38(Token* token, ParserContext* context) { end_rule(context, Rule_Rule); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) { + end_rule(context, Rule_DocString); + start_rule(context, Rule_DataTable); + build(context, token); + return 48; } if (match_StepLine(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { @@ -2929,7 +3488,7 @@ static int match_token_at_38(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { @@ -2941,7 +3500,7 @@ static int match_token_at_38(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DocString); @@ -2950,7 +3509,7 @@ static int match_token_at_38(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DocString); @@ -2960,46 +3519,126 @@ static int match_token_at_38(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 38; + return 47; } if (match_Empty(context, token)) { build(context, token); - return 38; + return 47; } - /* "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 38;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_39(Token* token, ParserContext* context) { + return 47;} +/* GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 */ +static int match_token_at_48(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) { + build(context, token); + return 48; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 27; + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Rule); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 48; + } + if (match_Empty(context, token)) { + build(context, token); + return 48; + } + + /* "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 48;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_49(Token* token, ParserContext* context) { if (match_DocStringSeparator(context, token)) { build(context, token); - return 40; + return 50; } if (match_Other(context, token)) { build(context, token); - return 39; + return 49; } - /* "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ + /* "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" */ const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 39;} -/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_40(Token* token, ParserContext* context) { + return 49;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_50(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); @@ -3007,14 +3646,20 @@ static int match_token_at_40(Token* token, ParserContext* context) { end_rule(context, Rule_ScenarioDefinition); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) { + end_rule(context, Rule_DocString); + start_rule(context, Rule_DataTable); + build(context, token); + return 51; } if (match_StepLine(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); start_rule(context, Rule_Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { if (lookahead_1(context)) { @@ -3023,7 +3668,7 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) { @@ -3035,7 +3680,7 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -3047,7 +3692,7 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { end_rule(context, Rule_DocString); @@ -3055,7 +3700,7 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_ExamplesDefinition); start_rule(context, Rule_Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DocString); @@ -3065,7 +3710,7 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DocString); @@ -3075,53 +3720,159 @@ static int match_token_at_40(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 50; + } + if (match_Empty(context, token)) { + build(context, token); + return 50; + } + + /* "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 50;} +/* GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 */ +static int match_token_at_51(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + end_rule(context, Rule_Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) { + build(context, token); + return 51; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 14; + } + if (match_TagLine(context, token)) { + if (lookahead_1(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 18; + } + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_ExamplesDefinition); + start_rule(context, Rule_Examples); + build(context, token); return 19; } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 12; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Scenario); + end_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } if (match_Comment(context, token)) { build(context, token); - return 40; + return 51; } if (match_Empty(context, token)) { build(context, token); - return 40; + return 51; } - /* "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 40;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 */ -static int match_token_at_41(Token* token, ParserContext* context) { + return 51;} +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 */ +static int match_token_at_52(Token* token, ParserContext* context) { if (match_DocStringSeparator(context, token)) { build(context, token); - return 42; + return 53; } if (match_Other(context, token)) { build(context, token); - return 41; + return 52; } - /* "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" */ + /* "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" */ const wchar_t* const expected_tokens = L"#DocStringSeparator, #Other"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 41;} -/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 */ -static int match_token_at_42(Token* token, ParserContext* context) { + return 52;} +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 */ +static int match_token_at_53(Token* token, ParserContext* context) { if (match_EOF(context, token)) { end_rule(context, Rule_DocString); end_rule(context, Rule_Step); end_rule(context, Rule_Background); end_rule(context, Rule_Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) { + end_rule(context, Rule_DocString); + start_rule(context, Rule_DataTable); + build(context, token); + return 54; } if (match_StepLine(context, token)) { end_rule(context, Rule_DocString); @@ -3138,7 +3889,7 @@ static int match_token_at_42(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { @@ -3149,7 +3900,7 @@ static int match_token_at_42(Token* token, ParserContext* context) { start_rule(context, Rule_RuleHeader); start_rule(context, Rule_Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { end_rule(context, Rule_DocString); @@ -3158,7 +3909,7 @@ static int match_token_at_42(Token* token, ParserContext* context) { start_rule(context, Rule_ScenarioDefinition); start_rule(context, Rule_Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { end_rule(context, Rule_DocString); @@ -3167,25 +3918,102 @@ static int match_token_at_42(Token* token, ParserContext* context) { start_rule(context, Rule_Rule); start_rule(context, Rule_RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 42; + return 53; } if (match_Empty(context, token)) { + build(context, token); + return 53; + } + + /* "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); + Token_delete(token); + if (context->stop_at_first_error) { + ErrorList_jump_to_global_rescue_env(context->errors); + } + return 53;} +/* GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 */ +static int match_token_at_54(Token* token, ParserContext* context) { + if (match_EOF(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + end_rule(context, Rule_Feature); build(context, token); return 42; } + if (match_TableRow(context, token)) { + build(context, token); + return 54; + } + if (match_StepLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + start_rule(context, Rule_Step); + build(context, token); + return 7; + } + if (match_TagLine(context, token)) { + if (lookahead_0(context)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + start_rule(context, Rule_Tags); + build(context, token); + return 22; + } + if (match_ScenarioLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_ScenarioDefinition); + start_rule(context, Rule_Scenario); + build(context, token); + return 12; + } + if (match_RuleLine(context, token)) { + end_rule(context, Rule_DataTable); + end_rule(context, Rule_Step); + end_rule(context, Rule_Background); + start_rule(context, Rule_Rule); + start_rule(context, Rule_RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) { + build(context, token); + return 54; + } + if (match_Empty(context, token)) { + build(context, token); + return 54; + } - /* "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" */ - const wchar_t* const expected_tokens = L"#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + /* "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" */ + const wchar_t* const expected_tokens = L"#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; Token_is_eof(token) ? ErrorList_add_unexpected_eof_error(context->errors, token, expected_tokens) : ErrorList_add_unexpected_token_error(context->errors, token, expected_tokens); Token_delete(token); if (context->stop_at_first_error) { ErrorList_jump_to_global_rescue_env(context->errors); } - return 42;} + return 54;} static int match_token(int state, Token* token, ParserContext* context) { switch (state) { case 0: @@ -3256,6 +4084,8 @@ static int match_token(int state, Token* token, ParserContext* context) { return match_token_at_32(token, context); case 33: return match_token_at_33(token, context); + case 34: + return match_token_at_34(token, context); case 35: return match_token_at_35(token, context); case 36: @@ -3270,8 +4100,30 @@ static int match_token(int state, Token* token, ParserContext* context) { return match_token_at_40(token, context); case 41: return match_token_at_41(token, context); - case 42: - return match_token_at_42(token, context); + case 43: + return match_token_at_43(token, context); + case 44: + return match_token_at_44(token, context); + case 45: + return match_token_at_45(token, context); + case 46: + return match_token_at_46(token, context); + case 47: + return match_token_at_47(token, context); + case 48: + return match_token_at_48(token, context); + case 49: + return match_token_at_49(token, context); + case 50: + return match_token_at_50(token, context); + case 51: + return match_token_at_51(token, context); + case 52: + return match_token_at_52(token, context); + case 53: + return match_token_at_53(token, context); + case 54: + return match_token_at_54(token, context); default: ErrorList_add_invalid_operation_error(context->errors, state); ErrorList_jump_to_global_rescue_env(context->errors); diff --git a/c/src/pickle_printer.c b/c/src/pickle_printer.c index 877c86c85..5fa3da813 100644 --- a/c/src/pickle_printer.c +++ b/c/src/pickle_printer.c @@ -128,13 +128,16 @@ static void print_pickle_step(FILE* file, const PickleStep* step) { fprintf(file, "{"); print_id(file, step->id); print_ast_node_ids(file, step->ast_node_ids); - if (step->argument) { + if (step->doc_string || step->data_table) { fprintf(file, ",\"argument\":{"); - if (step->argument->type == Argument_String) { - print_pickle_string(file, (const PickleString*)step->argument); + if (step->doc_string) { + print_pickle_string(file, step->doc_string); } - if (step->argument->type == Argument_Table) { - print_pickle_table(file, (const PickleTable*)step->argument); + if (step->data_table) { + if (step->doc_string) { + fprintf(file, ","); + } + print_pickle_table(file, step->data_table); } fprintf(file, "}"); } diff --git a/c/src/pickle_step.c b/c/src/pickle_step.c index d012108bf..4b977db27 100644 --- a/c/src/pickle_step.c +++ b/c/src/pickle_step.c @@ -7,6 +7,20 @@ static void delete_pickle_step_content(const PickleStep* pickle_step); const PickleStep* PickleStep_new(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleArgument* argument) { + const PickleTable* data_table = 0; + const PickleString* doc_string = 0; + if (argument) { + if (argument->type == Argument_Table) { + data_table = (const PickleTable*)argument; + } + else if (argument->type == Argument_String) { + doc_string = (const PickleString*)argument; + } + } + return PickleStep_new_with_arguments(ast_node_ids, id_generator, text, pickle_step_type, data_table, doc_string); +} + +const PickleStep* PickleStep_new_with_arguments(const PickleAstNodeIds* ast_node_ids, IdGenerator* id_generator, const wchar_t* text, const PickleStepType pickle_step_type, const PickleTable* data_table, const PickleString* doc_string) { PickleStep* pickle_step = (PickleStep*)malloc(sizeof(PickleStep)); pickle_step->ast_node_ids = ast_node_ids; pickle_step->id = id_generator->new_id(id_generator); @@ -15,7 +29,9 @@ const PickleStep* PickleStep_new(const PickleAstNodeIds* ast_node_ids, IdGenerat pickle_step->text = StringUtilities_copy_string(text); } pickle_step->pickle_step_type = pickle_step_type; - pickle_step->argument = argument; + pickle_step->argument = data_table ? (const PickleArgument*)data_table : (const PickleArgument*)doc_string; + pickle_step->data_table = data_table; + pickle_step->doc_string = doc_string; return pickle_step; } @@ -37,6 +53,10 @@ void PickleStep_transfer(PickleStep* to_pickle_step, PickleStep* from_pickle_ste to_pickle_step->pickle_step_type = from_pickle_step->pickle_step_type; to_pickle_step->argument = from_pickle_step->argument; from_pickle_step->argument = 0; + to_pickle_step->data_table = from_pickle_step->data_table; + from_pickle_step->data_table = 0; + to_pickle_step->doc_string = from_pickle_step->doc_string; + from_pickle_step->doc_string = 0; PickleStep_delete(from_pickle_step); } @@ -64,12 +84,10 @@ static void delete_pickle_step_content(const PickleStep* pickle_step) { if (pickle_step->text) { free((void*)pickle_step->text); } - if (pickle_step->argument) { - if (pickle_step->argument->type == Argument_String) { - PickleString_delete((const PickleString*)pickle_step->argument); - } - else if (pickle_step->argument->type == Argument_Table) { - PickleTable_delete((const PickleTable*)pickle_step->argument); - } + if (pickle_step->doc_string) { + PickleString_delete(pickle_step->doc_string); + } + if (pickle_step->data_table) { + PickleTable_delete(pickle_step->data_table); } } diff --git a/c/src/step.c b/c/src/step.c index f89b0f48f..f19295aba 100644 --- a/c/src/step.c +++ b/c/src/step.c @@ -7,6 +7,20 @@ static void delete_step_content(const Step* step); const Step* Step_new(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const StepArgument* argument) { + const DataTable* data_table = 0; + const DocString* doc_string = 0; + if (argument) { + if (argument->type == Gherkin_DataTable) { + data_table = (const DataTable*)argument; + } + else if (argument->type == Gherkin_DocString) { + doc_string = (const DocString*)argument; + } + } + return Step_new_with_arguments(location, id_generator, keyword, keyword_type, text, data_table, doc_string); +} + +const Step* Step_new_with_arguments(Location location, IdGenerator* id_generator, const wchar_t* keyword, const KeywordType keyword_type, const wchar_t* text, const DataTable* data_table, const DocString* doc_string) { Step* step = (Step*)malloc(sizeof(Step)); step->step_delete = (item_delete_function)Step_delete; step->type = Gherkin_Step; @@ -20,7 +34,9 @@ const Step* Step_new(Location location, IdGenerator* id_generator, const wchar_t if (text) { step->text = StringUtilities_copy_string(text); } - step->argument = argument; + step->argument = data_table ? (const StepArgument*)data_table : (const StepArgument*)doc_string; + step->data_table = data_table; + step->doc_string = doc_string; return step; } @@ -45,6 +61,10 @@ void Step_transfer(Step* to_step, Step* from_step) { from_step->text = 0; to_step->argument = from_step->argument; from_step->argument = 0; + to_step->data_table = from_step->data_table; + from_step->data_table = 0; + to_step->doc_string = from_step->doc_string; + from_step->doc_string = 0; Step_delete(from_step); } @@ -72,12 +92,10 @@ static void delete_step_content(const Step* step) { if (step->text) { free((void*)step->text); } - if (step->argument) { - if (step->argument->type == Gherkin_DataTable) { - DataTable_delete((DataTable*)step->argument); - } - else if (step->argument->type == Gherkin_DocString) { - DocString_delete((DocString*)step->argument); - } + if (step->data_table) { + DataTable_delete((DataTable*)step->data_table); + } + if (step->doc_string) { + DocString_delete((DocString*)step->doc_string); } } diff --git a/cpp/include/gherkin/cucumber/gherkin/parser.hpp b/cpp/include/gherkin/cucumber/gherkin/parser.hpp index 53ae4c5cc..d88f3cdd4 100644 --- a/cpp/include/gherkin/cucumber/gherkin/parser.hpp +++ b/cpp/include/gherkin/cucumber/gherkin/parser.hpp @@ -396,7 +396,7 @@ class parser : public parser_base { if (match_e_o_f(context, token)) { build(context, token); - return 34; + return 42; } if (match_language(context, token)) { start_rule(context, rule_type::feature); @@ -541,7 +541,7 @@ class parser : public parser_base end_rule(context, rule_type::feature_header); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); @@ -564,7 +564,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -573,21 +573,21 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::feature_header); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::feature_header); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); @@ -625,7 +625,7 @@ class parser : public parser_base end_rule(context, rule_type::feature_header); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); @@ -645,7 +645,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -655,7 +655,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -663,7 +663,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -671,7 +671,7 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); @@ -707,7 +707,7 @@ class parser : public parser_base end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); @@ -729,7 +729,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -738,21 +738,21 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::background); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); @@ -790,7 +790,7 @@ class parser : public parser_base end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); @@ -809,7 +809,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -819,7 +819,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -827,7 +827,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -835,7 +835,7 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); @@ -872,7 +872,7 @@ class parser : public parser_base end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { start_rule(context, rule_type::data_table); @@ -882,7 +882,7 @@ class parser : public parser_base if (match_doc_string_separator(context, token)) { start_rule(context, rule_type::doc_string); build(context, token); - return 41; + return 52; } if (match_step_line(context, token)) { end_rule(context, rule_type::step); @@ -897,7 +897,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -907,7 +907,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::step); @@ -915,7 +915,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::step); @@ -923,7 +923,7 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); @@ -956,7 +956,7 @@ class parser : public parser_base return 7; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 std::size_t match_token_at_8(token& token, context_type& context) { if (match_e_o_f(context, token)) { @@ -965,12 +965,18 @@ class parser : public parser_base end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); return 8; } + if (match_doc_string_separator(context, token)) { + end_rule(context, rule_type::data_table); + start_rule(context, rule_type::doc_string); + build(context, token); + return 9; + } if (match_step_line(context, token)) { end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); @@ -986,7 +992,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -997,7 +1003,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::data_table); @@ -1006,7 +1012,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::data_table); @@ -1015,7 +1021,7 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); @@ -1026,8 +1032,8 @@ class parser : public parser_base return 8; } - std::string state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -1048,29 +1054,151 @@ class parser : public parser_base return 8; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 std::size_t match_token_at_9(token& token, context_type& context) { - if (match_tag_line(context, token)) { + if (match_doc_string_separator(context, token)) { + build(context, token); + return 10; + } + if (match_other(context, token)) { build(context, token); return 9; } + + std::string state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 9; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_10(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 7; + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 11; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } if (match_scenario_line(context, token)) { - end_rule(context, rule_type::tags); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); + build(context, token); + return 12; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 10; + } + if (match_empty(context, token)) { build(context, token); return 10; } + + std::string state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 10; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + std::size_t match_token_at_11(token& token, context_type& context) + { + if (match_tag_line(context, token)) { + build(context, token); + return 11; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::tags); + start_rule(context, rule_type::scenario); + build(context, token); + return 12; + } if (match_comment(context, token)) { build(context, token); - return 9; + return 11; } if (match_empty(context, token)) { build(context, token); - return 9; + return 11; } - std::string state_comment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + std::string state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; std::string expected_tokens = "#TagLine, #ScenarioLine, #Comment, #Empty"; auto ep = @@ -1089,39 +1217,39 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 9; + return 11; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - std::size_t match_token_at_10(token& token, context_type& context) + std::size_t match_token_at_12(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); - return 10; + return 12; } if (match_comment(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 11; + return 13; } if (match_step_line(context, token)) { start_rule(context, rule_type::step); build(context, token); - return 12; + return 14; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1131,7 +1259,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1141,13 +1269,13 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::scenario); @@ -1155,7 +1283,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::scenario); @@ -1163,15 +1291,15 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 11; + return 13; } - std::string state_comment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + std::string state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; std::string expected_tokens = "#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -1190,11 +1318,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 10; + return 12; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_11(token& token, context_type& context) + std::size_t match_token_at_13(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::description); @@ -1202,17 +1330,17 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); - return 11; + return 13; } if (match_step_line(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::step); build(context, token); - return 12; + return 14; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1220,7 +1348,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1231,7 +1359,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1242,14 +1370,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -1258,7 +1386,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -1267,14 +1395,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 11; + return 13; } - std::string state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -1293,11 +1421,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 11; + return 13; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - std::size_t match_token_at_12(token& token, context_type& context) + std::size_t match_token_at_14(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::step); @@ -1305,23 +1433,23 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { start_rule(context, rule_type::data_table); build(context, token); - return 13; + return 15; } if (match_doc_string_separator(context, token)) { start_rule(context, rule_type::doc_string); build(context, token); - return 39; + return 49; } if (match_step_line(context, token)) { end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 12; + return 14; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1329,7 +1457,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1340,7 +1468,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1351,14 +1479,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::step); start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::step); @@ -1367,7 +1495,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::step); @@ -1376,18 +1504,18 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 12; + return 14; } if (match_empty(context, token)) { build(context, token); - return 12; + return 14; } - std::string state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + std::string state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = @@ -1406,11 +1534,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 12; + return 14; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - std::size_t match_token_at_13(token& token, context_type& context) + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + std::size_t match_token_at_15(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::data_table); @@ -1419,18 +1547,24 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); - return 13; + return 15; + } + if (match_doc_string_separator(context, token)) { + end_rule(context, rule_type::data_table); + start_rule(context, rule_type::doc_string); + build(context, token); + return 16; } if (match_step_line(context, token)) { end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 12; + return 14; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1439,7 +1573,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1451,7 +1585,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1463,7 +1597,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::data_table); @@ -1471,7 +1605,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::data_table); @@ -1481,7 +1615,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::data_table); @@ -1491,19 +1625,164 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 15; + } + if (match_empty(context, token)) { + build(context, token); + return 15; + } + + std::string state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 15; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_16(token& token, context_type& context) + { + if (match_doc_string_separator(context, token)) { + build(context, token); + return 17; + } + if (match_other(context, token)) { + build(context, token); + return 16; + } + + std::string state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 16; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_17(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 14; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 18; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 11; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); return 19; } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 12; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } if (match_comment(context, token)) { build(context, token); - return 13; + return 17; } if (match_empty(context, token)) { build(context, token); - return 13; + return 17; } - std::string state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -1521,32 +1800,32 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 13; + return 17; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - std::size_t match_token_at_14(token& token, context_type& context) + std::size_t match_token_at_18(token& token, context_type& context) { if (match_tag_line(context, token)) { build(context, token); - return 14; + return 18; } if (match_examples_line(context, token)) { end_rule(context, rule_type::tags); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_comment(context, token)) { build(context, token); - return 14; + return 18; } if (match_empty(context, token)) { build(context, token); - return 14; + return 18; } - std::string state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + std::string state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; std::string expected_tokens = "#TagLine, #ExamplesLine, #Comment, #Empty"; auto ep = @@ -1565,11 +1844,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 14; + return 18; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - std::size_t match_token_at_15(token& token, context_type& context) + std::size_t match_token_at_19(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::examples); @@ -1578,21 +1857,21 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); - return 15; + return 19; } if (match_comment(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 16; + return 20; } if (match_table_row(context, token)) { start_rule(context, rule_type::examples_table); build(context, token); - return 17; + return 21; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1601,7 +1880,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1613,7 +1892,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1625,7 +1904,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::examples); @@ -1633,7 +1912,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::examples); @@ -1643,7 +1922,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::examples); @@ -1653,15 +1932,15 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 16; + return 20; } - std::string state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + std::string state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; std::string expected_tokens = "#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -1680,11 +1959,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 15; + return 19; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_16(token& token, context_type& context) + std::size_t match_token_at_20(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::description); @@ -1694,17 +1973,17 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); - return 16; + return 20; } if (match_table_row(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::examples_table); build(context, token); - return 17; + return 21; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1714,7 +1993,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1727,7 +2006,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1740,7 +2019,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::description); @@ -1749,7 +2028,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -1760,7 +2039,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -1771,14 +2050,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 16; + return 20; } - std::string state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -1797,11 +2076,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 16; + return 20; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - std::size_t match_token_at_17(token& token, context_type& context) + std::size_t match_token_at_21(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::examples_table); @@ -1811,11 +2090,11 @@ class parser : public parser_base end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); - return 17; + return 21; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -1825,7 +2104,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 14; + return 18; } } if (match_tag_line(context, token)) { @@ -1838,7 +2117,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { @@ -1851,7 +2130,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -1860,7 +2139,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 15; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -1871,7 +2150,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -1882,18 +2161,18 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 17; + return 21; } if (match_empty(context, token)) { build(context, token); - return 17; + return 21; } - std::string state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + std::string state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; std::string expected_tokens = "#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = @@ -1912,31 +2191,31 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 17; + return 21; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - std::size_t match_token_at_18(token& token, context_type& context) + std::size_t match_token_at_22(token& token, context_type& context) { if (match_tag_line(context, token)) { build(context, token); - return 18; + return 22; } if (match_rule_line(context, token)) { end_rule(context, rule_type::tags); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 18; + return 22; } if (match_empty(context, token)) { build(context, token); - return 18; + return 22; } - std::string state_comment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; + std::string state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; std::string expected_tokens = "#TagLine, #RuleLine, #Comment, #Empty"; auto ep = @@ -1955,33 +2234,33 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 18; + return 22; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - std::size_t match_token_at_19(token& token, context_type& context) + std::size_t match_token_at_23(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::rule_header); end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 20; + return 24; } if (match_background_line(context, token)) { end_rule(context, rule_type::rule_header); start_rule(context, rule_type::background); build(context, token); - return 21; + return 25; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -1989,7 +2268,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -1999,14 +2278,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::rule_header); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::rule_header); @@ -2014,15 +2293,15 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 20; + return 24; } - std::string state_comment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; + std::string state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; std::string expected_tokens = "#EOF, #Empty, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -2041,11 +2320,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 19; + return 23; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_20(token& token, context_type& context) + std::size_t match_token_at_24(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::description); @@ -2053,18 +2332,18 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); - return 20; + return 24; } if (match_background_line(context, token)) { end_rule(context, rule_type::description); end_rule(context, rule_type::rule_header); start_rule(context, rule_type::background); build(context, token); - return 21; + return 25; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -2073,7 +2352,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2084,7 +2363,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -2092,7 +2371,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -2101,14 +2380,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 20; + return 24; } - std::string state_comment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #BackgroundLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -2127,32 +2406,32 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 20; + return 24; } // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - std::size_t match_token_at_21(token& token, context_type& context) + std::size_t match_token_at_25(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::background); end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_empty(context, token)) { build(context, token); - return 21; + return 25; } if (match_comment(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 22; + return 26; } if (match_step_line(context, token)) { start_rule(context, rule_type::step); build(context, token); - return 23; + return 27; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -2160,7 +2439,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2170,14 +2449,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::background); @@ -2185,15 +2464,15 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 22; + return 26; } - std::string state_comment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; + std::string state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; std::string expected_tokens = "#EOF, #Empty, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -2212,11 +2491,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 21; + return 25; } // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_22(token& token, context_type& context) + std::size_t match_token_at_26(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::description); @@ -2224,17 +2503,17 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); - return 22; + return 26; } if (match_step_line(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::step); build(context, token); - return 23; + return 27; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -2243,7 +2522,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2254,7 +2533,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -2262,7 +2541,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -2271,14 +2550,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 22; + return 26; } - std::string state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -2297,11 +2576,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 22; + return 26; } // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - std::size_t match_token_at_23(token& token, context_type& context) + std::size_t match_token_at_27(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::step); @@ -2309,23 +2588,23 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { start_rule(context, rule_type::data_table); build(context, token); - return 24; + return 28; } if (match_doc_string_separator(context, token)) { start_rule(context, rule_type::doc_string); build(context, token); - return 37; + return 46; } if (match_step_line(context, token)) { end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 23; + return 27; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -2334,7 +2613,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2345,7 +2624,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::step); @@ -2353,7 +2632,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::step); @@ -2362,18 +2641,18 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 23; + return 27; } if (match_empty(context, token)) { build(context, token); - return 23; + return 27; } - std::string state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; + std::string state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = @@ -2392,11 +2671,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 23; + return 27; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - std::size_t match_token_at_24(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + std::size_t match_token_at_28(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::data_table); @@ -2405,18 +2684,24 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); - return 24; + return 28; + } + if (match_doc_string_separator(context, token)) { + end_rule(context, rule_type::data_table); + start_rule(context, rule_type::doc_string); + build(context, token); + return 29; } if (match_step_line(context, token)) { end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 23; + return 27; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { @@ -2426,7 +2711,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2438,7 +2723,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::data_table); @@ -2447,7 +2732,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::data_table); @@ -2457,19 +2742,19 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 24; + return 28; } if (match_empty(context, token)) { build(context, token); - return 24; + return 28; } - std::string state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -2487,33 +2772,23 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 24; + return 28; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - std::size_t match_token_at_25(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_29(token& token, context_type& context) { - if (match_tag_line(context, token)) { - build(context, token); - return 25; - } - if (match_scenario_line(context, token)) { - end_rule(context, rule_type::tags); - start_rule(context, rule_type::scenario); - build(context, token); - return 26; - } - if (match_comment(context, token)) { + if (match_doc_string_separator(context, token)) { build(context, token); - return 25; + return 30; } - if (match_empty(context, token)) { + if (match_other(context, token)) { build(context, token); - return 25; + return 29; } - std::string state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - std::string expected_tokens = "#TagLine, #ScenarioLine, #Comment, #Empty"; + std::string state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; auto ep = token.is_eof() @@ -2531,93 +2806,80 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 25; + return 29; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - std::size_t match_token_at_26(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_30(token& token, context_type& context) { if (match_e_o_f(context, token)) { - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; - } - if (match_empty(context, token)) { - build(context, token); - return 26; - } - if (match_comment(context, token)) { - start_rule(context, rule_type::description); - build(context, token); - return 27; + return 42; } if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 28; - } - if (match_tag_line(context, token)) { - if (lookahead_1(context, token)) { - start_rule(context, rule_type::examples_definition); - start_rule(context, rule_type::tags); - build(context, token); - return 30; - } + return 27; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); end_rule(context, rule_type::rule); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; - } - if (match_examples_line(context, token)) { - start_rule(context, rule_type::examples_definition); - start_rule(context, rule_type::examples); - build(context, token); - return 31; + return 22; } if (match_scenario_line(context, token)) { - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); end_rule(context, rule_type::rule); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } - if (match_other(context, token)) { - start_rule(context, rule_type::description); + if (match_comment(context, token)) { build(context, token); - return 27; + return 30; + } + if (match_empty(context, token)) { + build(context, token); + return 30; } - std::string state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - std::string expected_tokens = "#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; + std::string state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -2635,49 +2897,197 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 26; + return 30; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_27(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + std::size_t match_token_at_31(token& token, context_type& context) { - if (match_e_o_f(context, token)) { - end_rule(context, rule_type::description); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); - end_rule(context, rule_type::rule); - end_rule(context, rule_type::feature); + if (match_tag_line(context, token)) { build(context, token); - return 34; + return 31; } - if (match_comment(context, token)) { + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::tags); + start_rule(context, rule_type::scenario); build(context, token); - return 27; + return 32; } - if (match_step_line(context, token)) { - end_rule(context, rule_type::description); - start_rule(context, rule_type::step); + if (match_comment(context, token)) { build(context, token); - return 28; + return 31; } - if (match_tag_line(context, token)) { - if (lookahead_1(context, token)) { - end_rule(context, rule_type::description); - start_rule(context, rule_type::examples_definition); - start_rule(context, rule_type::tags); - build(context, token); - return 30; - } + if (match_empty(context, token)) { + build(context, token); + return 31; } - if (match_tag_line(context, token)) { - if (lookahead_0(context, token)) { + + std::string state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + std::string expected_tokens = "#TagLine, #ScenarioLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 31; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 + std::size_t match_token_at_32(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_empty(context, token)) { + build(context, token); + return 32; + } + if (match_comment(context, token)) { + start_rule(context, rule_type::description); + build(context, token); + return 33; + } + if (match_step_line(context, token)) { + start_rule(context, rule_type::step); + build(context, token); + return 34; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 38; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_examples_line(context, token)) { + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); + return 39; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_other(context, token)) { + start_rule(context, rule_type::description); + build(context, token); + return 33; + } + + std::string state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + std::string expected_tokens = "#EOF, #Empty, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 32; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + std::size_t match_token_at_33(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::description); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_comment(context, token)) { + build(context, token); + return 33; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::description); + start_rule(context, rule_type::step); + build(context, token); + return 34; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::description); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 38; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { end_rule(context, rule_type::description); end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2689,14 +3099,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -2705,7 +3115,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -2715,14 +3125,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 27; + return 33; } - std::string state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -2741,11 +3151,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 27; + return 33; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - std::size_t match_token_at_28(token& token, context_type& context) + std::size_t match_token_at_34(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::step); @@ -2754,23 +3164,23 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { start_rule(context, rule_type::data_table); build(context, token); - return 29; + return 35; } if (match_doc_string_separator(context, token)) { start_rule(context, rule_type::doc_string); build(context, token); - return 35; + return 43; } if (match_step_line(context, token)) { end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 28; + return 34; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -2778,7 +3188,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 38; } } if (match_tag_line(context, token)) { @@ -2789,7 +3199,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2801,14 +3211,14 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::step); start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::step); @@ -2817,7 +3227,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::step); @@ -2827,18 +3237,18 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 28; + return 34; } if (match_empty(context, token)) { build(context, token); - return 28; + return 34; } - std::string state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + std::string state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = @@ -2857,11 +3267,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 28; + return 34; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - std::size_t match_token_at_29(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + std::size_t match_token_at_35(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::data_table); @@ -2871,18 +3281,24 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); - return 29; + return 35; + } + if (match_doc_string_separator(context, token)) { + end_rule(context, rule_type::data_table); + start_rule(context, rule_type::doc_string); + build(context, token); + return 36; } if (match_step_line(context, token)) { end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 28; + return 34; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -2891,7 +3307,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 38; } } if (match_tag_line(context, token)) { @@ -2903,7 +3319,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -2916,7 +3332,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::data_table); @@ -2924,7 +3340,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::data_table); @@ -2934,7 +3350,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::data_table); @@ -2945,19 +3361,19 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 29; + return 35; } if (match_empty(context, token)) { build(context, token); - return 29; + return 35; } - std::string state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -2975,33 +3391,23 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 29; + return 35; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - std::size_t match_token_at_30(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_36(token& token, context_type& context) { - if (match_tag_line(context, token)) { - build(context, token); - return 30; - } - if (match_examples_line(context, token)) { - end_rule(context, rule_type::tags); - start_rule(context, rule_type::examples); - build(context, token); - return 31; - } - if (match_comment(context, token)) { + if (match_doc_string_separator(context, token)) { build(context, token); - return 30; + return 37; } - if (match_empty(context, token)) { + if (match_other(context, token)) { build(context, token); - return 30; + return 36; } - std::string state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - std::string expected_tokens = "#TagLine, #ExamplesLine, #Comment, #Empty"; + std::string state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; auto ep = token.is_eof() @@ -3019,35 +3425,193 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 30; + return 36; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - std::size_t match_token_at_31(token& token, context_type& context) + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_37(token& token, context_type& context) { if (match_e_o_f(context, token)) { - end_rule(context, rule_type::examples); - end_rule(context, rule_type::examples_definition); + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; - } - if (match_empty(context, token)) { - build(context, token); - return 31; + return 42; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 34; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 38; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); + return 39; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 37; + } + if (match_empty(context, token)) { + build(context, token); + return 37; + } + + std::string state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 37; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + std::size_t match_token_at_38(token& token, context_type& context) + { + if (match_tag_line(context, token)) { + build(context, token); + return 38; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::tags); + start_rule(context, rule_type::examples); + build(context, token); + return 39; + } + if (match_comment(context, token)) { + build(context, token); + return 38; + } + if (match_empty(context, token)) { + build(context, token); + return 38; + } + + std::string state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + std::string expected_tokens = "#TagLine, #ExamplesLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 38; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 + std::size_t match_token_at_39(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::examples); + end_rule(context, rule_type::examples_definition); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_empty(context, token)) { + build(context, token); + return 39; } if (match_comment(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 32; + return 40; } if (match_table_row(context, token)) { start_rule(context, rule_type::examples_table); build(context, token); - return 33; + return 41; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -3056,7 +3620,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 38; } } if (match_tag_line(context, token)) { @@ -3068,7 +3632,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -3081,7 +3645,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::examples); @@ -3089,7 +3653,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::examples); @@ -3099,7 +3663,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::examples); @@ -3110,15 +3674,15 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { start_rule(context, rule_type::description); build(context, token); - return 32; + return 40; } - std::string state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + std::string state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; std::string expected_tokens = "#EOF, #Empty, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -3137,11 +3701,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 31; + return 39; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - std::size_t match_token_at_32(token& token, context_type& context) + std::size_t match_token_at_40(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::description); @@ -3152,17 +3716,17 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_comment(context, token)) { build(context, token); - return 32; + return 40; } if (match_table_row(context, token)) { end_rule(context, rule_type::description); start_rule(context, rule_type::examples_table); build(context, token); - return 33; + return 41; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -3172,7 +3736,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 38; } } if (match_tag_line(context, token)) { @@ -3185,7 +3749,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -3199,7 +3763,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::description); @@ -3208,7 +3772,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::description); @@ -3219,7 +3783,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::description); @@ -3231,14 +3795,14 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_other(context, token)) { build(context, token); - return 32; + return 40; } - std::string state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + std::string state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; std::string expected_tokens = "#EOF, #Comment, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Other"; auto ep = @@ -3257,11 +3821,11 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 32; + return 40; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - std::size_t match_token_at_33(token& token, context_type& context) + std::size_t match_token_at_41(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::examples_table); @@ -3272,11 +3836,11 @@ class parser : public parser_base end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; } if (match_table_row(context, token)) { build(context, token); - return 33; + return 41; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -3286,7 +3850,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 38; } } if (match_tag_line(context, token)) { @@ -3299,7 +3863,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 31; } } if (match_tag_line(context, token)) { @@ -3313,7 +3877,7 @@ class parser : public parser_base start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -3322,7 +3886,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 39; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -3333,7 +3897,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 32; } if (match_rule_line(context, token)) { end_rule(context, rule_type::examples_table); @@ -3345,19 +3909,517 @@ class parser : public parser_base start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 41; + } + if (match_empty(context, token)) { + build(context, token); + return 41; + } + + std::string state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 41; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_43(token& token, context_type& context) + { + if (match_doc_string_separator(context, token)) { + build(context, token); + return 44; + } + if (match_other(context, token)) { + build(context, token); + return 43; + } + + std::string state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 43; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_44(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_table_row(context, token)) { + end_rule(context, rule_type::doc_string); + start_rule(context, rule_type::data_table); + build(context, token); + return 45; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 34; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 38; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); + return 39; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 44; + } + if (match_empty(context, token)) { + build(context, token); + return 44; + } + + std::string state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 44; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + std::size_t match_token_at_45(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_table_row(context, token)) { + build(context, token); + return 45; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 34; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 38; + } + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); + return 39; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 45; + } + if (match_empty(context, token)) { + build(context, token); + return 45; + } + + std::string state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 45; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_46(token& token, context_type& context) + { + if (match_doc_string_separator(context, token)) { + build(context, token); + return 47; + } + if (match_other(context, token)) { + build(context, token); + return 46; + } + + std::string state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + std::string expected_tokens = "#DocStringSeparator, #Other"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 46; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_47(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_table_row(context, token)) { + end_rule(context, rule_type::doc_string); + start_rule(context, rule_type::data_table); + build(context, token); + return 48; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 27; + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; + } + if (match_comment(context, token)) { + build(context, token); + return 47; + } + if (match_empty(context, token)) { + build(context, token); + return 47; + } + + std::string state_comment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + + auto ep = + token.is_eof() + ? new_parser_error( + token, expected_tokens, state_comment + ) + : new_parser_error( + token, expected_tokens, state_comment + ) + ; + + if (context.stop_at_first_error) { + throw *ep; + } + + context.add_error(std::move(ep)); + + return 47; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + std::size_t match_token_at_48(token& token, context_type& context) + { + if (match_e_o_f(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + end_rule(context, rule_type::feature); + build(context, token); + return 42; + } + if (match_table_row(context, token)) { + build(context, token); + return 48; + } + if (match_step_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::step); + build(context, token); + return 27; + } + if (match_tag_line(context, token)) { + if (lookahead_0(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 31; + } + } + if (match_tag_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + start_rule(context, rule_type::tags); + build(context, token); + return 22; + } + if (match_scenario_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + start_rule(context, rule_type::scenario_definition); + start_rule(context, rule_type::scenario); + build(context, token); + return 32; + } + if (match_rule_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + end_rule(context, rule_type::background); + end_rule(context, rule_type::rule); + start_rule(context, rule_type::rule); + start_rule(context, rule_type::rule_header); + build(context, token); + return 23; } if (match_comment(context, token)) { build(context, token); - return 33; + return 48; } if (match_empty(context, token)) { build(context, token); - return 33; + return 48; } - std::string state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - std::string expected_tokens = "#EOF, #TableRow, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -3375,22 +4437,22 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 33; + return 48; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - std::size_t match_token_at_35(token& token, context_type& context) + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_49(token& token, context_type& context) { if (match_doc_string_separator(context, token)) { build(context, token); - return 36; + return 50; } if (match_other(context, token)) { build(context, token); - return 35; + return 49; } - std::string state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + std::string state_comment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; std::string expected_tokens = "#DocStringSeparator, #Other"; auto ep = @@ -3409,28 +4471,33 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 35; + return 49; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - std::size_t match_token_at_36(token& token, context_type& context) + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_50(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); - end_rule(context, rule_type::rule); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; + } + if (match_table_row(context, token)) { + end_rule(context, rule_type::doc_string); + start_rule(context, rule_type::data_table); + build(context, token); + return 51; } if (match_step_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 28; + return 14; } if (match_tag_line(context, token)) { if (lookahead_1(context, token)) { @@ -3439,7 +4506,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::tags); build(context, token); - return 30; + return 18; } } if (match_tag_line(context, token)) { @@ -3451,7 +4518,7 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 11; } } if (match_tag_line(context, token)) { @@ -3459,12 +4526,11 @@ class parser : public parser_base end_rule(context, rule_type::step); end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); - end_rule(context, rule_type::rule); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_examples_line(context, token)) { end_rule(context, rule_type::doc_string); @@ -3472,7 +4538,7 @@ class parser : public parser_base start_rule(context, rule_type::examples_definition); start_rule(context, rule_type::examples); build(context, token); - return 31; + return 19; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::doc_string); @@ -3482,64 +4548,29 @@ class parser : public parser_base start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); end_rule(context, rule_type::scenario); end_rule(context, rule_type::scenario_definition); - end_rule(context, rule_type::rule); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 36; + return 50; } if (match_empty(context, token)) { build(context, token); - return 36; - } - - std::string state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - - auto ep = - token.is_eof() - ? new_parser_error( - token, expected_tokens, state_comment - ) - : new_parser_error( - token, expected_tokens, state_comment - ) - ; - - if (context.stop_at_first_error) { - throw *ep; - } - - context.add_error(std::move(ep)); - - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - std::size_t match_token_at_37(token& token, context_type& context) - { - if (match_doc_string_separator(context, token)) { - build(context, token); - return 38; - } - if (match_other(context, token)) { - build(context, token); - return 37; + return 50; } - std::string state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - std::string expected_tokens = "#DocStringSeparator, #Other"; + std::string state_comment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -3557,80 +4588,104 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 37; + return 50; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - std::size_t match_token_at_38(token& token, context_type& context) + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + std::size_t match_token_at_51(token& token, context_type& context) { if (match_e_o_f(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); - end_rule(context, rule_type::background); - end_rule(context, rule_type::rule); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; + } + if (match_table_row(context, token)) { + build(context, token); + return 51; } if (match_step_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 23; + return 14; + } + if (match_tag_line(context, token)) { + if (lookahead_1(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::tags); + build(context, token); + return 18; + } } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); - end_rule(context, rule_type::background); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 25; + return 11; } } if (match_tag_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); - end_rule(context, rule_type::background); - end_rule(context, rule_type::rule); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; + } + if (match_examples_line(context, token)) { + end_rule(context, rule_type::data_table); + end_rule(context, rule_type::step); + start_rule(context, rule_type::examples_definition); + start_rule(context, rule_type::examples); + build(context, token); + return 19; } if (match_scenario_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); - end_rule(context, rule_type::background); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 26; + return 12; } if (match_rule_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); - end_rule(context, rule_type::background); - end_rule(context, rule_type::rule); + end_rule(context, rule_type::scenario); + end_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 38; + return 51; } if (match_empty(context, token)) { build(context, token); - return 38; + return 51; } - std::string state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -3648,22 +4703,22 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 38; + return 51; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - std::size_t match_token_at_39(token& token, context_type& context) + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + std::size_t match_token_at_52(token& token, context_type& context) { if (match_doc_string_separator(context, token)) { build(context, token); - return 40; + return 53; } if (match_other(context, token)) { build(context, token); - return 39; + return 52; } - std::string state_comment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + std::string state_comment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; std::string expected_tokens = "#DocStringSeparator, #Other"; auto ep = @@ -3682,134 +4737,83 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 39; + return 52; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - std::size_t match_token_at_40(token& token, context_type& context) + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + std::size_t match_token_at_53(token& token, context_type& context) { if (match_e_o_f(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; + } + if (match_table_row(context, token)) { + end_rule(context, rule_type::doc_string); + start_rule(context, rule_type::data_table); + build(context, token); + return 54; } if (match_step_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); - return 12; - } - if (match_tag_line(context, token)) { - if (lookahead_1(context, token)) { - end_rule(context, rule_type::doc_string); - end_rule(context, rule_type::step); - start_rule(context, rule_type::examples_definition); - start_rule(context, rule_type::tags); - build(context, token); - return 14; - } + return 7; } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::background); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; - } - if (match_examples_line(context, token)) { - end_rule(context, rule_type::doc_string); - end_rule(context, rule_type::step); - start_rule(context, rule_type::examples_definition); - start_rule(context, rule_type::examples); - build(context, token); - return 15; + return 22; } if (match_scenario_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { end_rule(context, rule_type::doc_string); end_rule(context, rule_type::step); - end_rule(context, rule_type::scenario); - end_rule(context, rule_type::scenario_definition); + end_rule(context, rule_type::background); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 40; + return 53; } if (match_empty(context, token)) { build(context, token); - return 40; - } - - std::string state_comment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; - - auto ep = - token.is_eof() - ? new_parser_error( - token, expected_tokens, state_comment - ) - : new_parser_error( - token, expected_tokens, state_comment - ) - ; - - if (context.stop_at_first_error) { - throw *ep; - } - - context.add_error(std::move(ep)); - - return 40; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - std::size_t match_token_at_41(token& token, context_type& context) - { - if (match_doc_string_separator(context, token)) { - build(context, token); - return 42; - } - if (match_other(context, token)) { - build(context, token); - return 41; + return 53; } - std::string state_comment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - std::string expected_tokens = "#DocStringSeparator, #Other"; + std::string state_comment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -3827,22 +4831,26 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 41; + return 53; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - std::size_t match_token_at_42(token& token, context_type& context) + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + std::size_t match_token_at_54(token& token, context_type& context) { if (match_e_o_f(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); end_rule(context, rule_type::background); end_rule(context, rule_type::feature); build(context, token); - return 34; + return 42; + } + if (match_table_row(context, token)) { + build(context, token); + return 54; } if (match_step_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); start_rule(context, rule_type::step); build(context, token); @@ -3850,54 +4858,54 @@ class parser : public parser_base } if (match_tag_line(context, token)) { if (lookahead_0(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::tags); build(context, token); - return 9; + return 11; } } if (match_tag_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); end_rule(context, rule_type::background); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); start_rule(context, rule_type::tags); build(context, token); - return 18; + return 22; } if (match_scenario_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); end_rule(context, rule_type::background); start_rule(context, rule_type::scenario_definition); start_rule(context, rule_type::scenario); build(context, token); - return 10; + return 12; } if (match_rule_line(context, token)) { - end_rule(context, rule_type::doc_string); + end_rule(context, rule_type::data_table); end_rule(context, rule_type::step); end_rule(context, rule_type::background); start_rule(context, rule_type::rule); start_rule(context, rule_type::rule_header); build(context, token); - return 19; + return 23; } if (match_comment(context, token)) { build(context, token); - return 42; + return 54; } if (match_empty(context, token)) { build(context, token); - return 42; + return 54; } - std::string state_comment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - std::string expected_tokens = "#EOF, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; + std::string state_comment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + std::string expected_tokens = "#EOF, #TableRow, #StepLine, #TagLine, #ScenarioLine, #RuleLine, #Comment, #Empty"; auto ep = token.is_eof() @@ -3915,7 +4923,7 @@ class parser : public parser_base context.add_error(std::move(ep)); - return 42; + return 54; } std::size_t match_token(std::size_t state, token& token, context_type& context) @@ -3989,6 +4997,8 @@ class parser : public parser_base return match_token_at_32(token, context); case 33: return match_token_at_33(token, context); + case 34: + return match_token_at_34(token, context); case 35: return match_token_at_35(token, context); case 36: @@ -4003,8 +5013,30 @@ class parser : public parser_base return match_token_at_40(token, context); case 41: return match_token_at_41(token, context); - case 42: - return match_token_at_42(token, context); + case 43: + return match_token_at_43(token, context); + case 44: + return match_token_at_44(token, context); + case 45: + return match_token_at_45(token, context); + case 46: + return match_token_at_46(token, context); + case 47: + return match_token_at_47(token, context); + case 48: + return match_token_at_48(token, context); + case 49: + return match_token_at_49(token, context); + case 50: + return match_token_at_50(token, context); + case 51: + return match_token_at_51(token, context); + case 52: + return match_token_at_52(token, context); + case 53: + return match_token_at_53(token, context); + case 54: + return match_token_at_54(token, context); default: throw std::runtime_error( diff --git a/cpp/include/gherkin/cucumber/gherkin/rule_type.hpp b/cpp/include/gherkin/cucumber/gherkin/rule_type.hpp index 2f07b3aad..18f4a7d35 100644 --- a/cpp/include/gherkin/cucumber/gherkin/rule_type.hpp +++ b/cpp/include/gherkin/cucumber/gherkin/rule_type.hpp @@ -36,6 +36,8 @@ enum class rule_type examples_table, step, step_arg, + data_table_and_maybe_doc_string, + doc_string_and_maybe_data_table, data_table, doc_string, tags, diff --git a/cpp/src/lib/gherkin/cucumber/gherkin/pickle_compiler.cpp b/cpp/src/lib/gherkin/cucumber/gherkin/pickle_compiler.cpp index 9ea43931b..f62232748 100644 --- a/cpp/src/lib/gherkin/cucumber/gherkin/pickle_compiler.cpp +++ b/cpp/src/lib/gherkin/cucumber/gherkin/pickle_compiler.cpp @@ -290,22 +290,23 @@ pickle_compiler::make_pickle_step( .text = interpolate(step.text, variable_cells, value_cells) }; - if (step.data_table) { - ps.argument = cms::pickle_step_argument{ - .data_table = make_pickle_table( - *step.data_table, + if (step.data_table || step.doc_string) { + auto argument = cms::pickle_step_argument{}; + if (step.doc_string) { + argument.doc_string = make_pickle_doc_string( + *step.doc_string, variable_cells, value_cells - ) - }; - } else if (step.doc_string) { - ps.argument = cms::pickle_step_argument{ - .doc_string = make_pickle_doc_string( - *step.doc_string, + ); + } + if (step.data_table) { + argument.data_table = make_pickle_table( + *step.data_table, variable_cells, value_cells - ) - }; + ); + } + ps.argument = argument; } if (value_row_ptr) { diff --git a/dart/lib/src/ast/GherkinDocumentBuilder.dart b/dart/lib/src/ast/GherkinDocumentBuilder.dart index 5fce097d3..14d93e437 100644 --- a/dart/lib/src/ast/GherkinDocumentBuilder.dart +++ b/dart/lib/src/ast/GherkinDocumentBuilder.dart @@ -103,14 +103,13 @@ abstract class AstRulesBuilder Step _createStep(AstNode node) { var stepLine = node.getToken(TokenType.StepLine); - var stepArg = node.singleOrDefault(RuleType.DataTable - , StepArgument.empty); - if( stepArg.isEmpty ) { - stepArg = node.singleOrDefault(RuleType.DocString - , StepArgument.empty); - } + var dataTable = node.singleOrDefault(RuleType.DataTable + , DataTable.empty); + var docString = node.singleOrDefault(RuleType.DocString + , DocString.empty); return Step(_getLocation(stepLine), stepLine.matchedKeyword - , stepLine.matchedText, stepArg ); + , stepLine.matchedText, StepArgument.empty + , dataTable: dataTable, docString: docString ); } Location _getLocation(Token token, [int column=0]) diff --git a/dart/lib/src/ast/Step.dart b/dart/lib/src/ast/Step.dart index 31e4f2f18..18571c60d 100644 --- a/dart/lib/src/ast/Step.dart +++ b/dart/lib/src/ast/Step.dart @@ -16,14 +16,23 @@ class Step implements IHasLocation, INullSafetyObject final String text; final StepArgument argument; + final DataTable _dataTable; + final DocString _docString; const Step(this._location, this.keyword, this.text, this.argument, - {this.id=Strings.empty} ); + {this.id=Strings.empty + , DataTable dataTable = DataTable.empty + , DocString docString = DocString.empty} ) + : _dataTable = dataTable + , _docString = docString; @override Location get location => _location; DataTable get dataTable { + if( _dataTable.isNotEmpty ) { + return _dataTable; + } if( argument is DataTable ) { return argument as DataTable; } @@ -31,6 +40,9 @@ class Step implements IHasLocation, INullSafetyObject } DocString get docString { + if( _docString.isNotEmpty ) { + return _docString; + } if( argument is DocString ) { return argument as DocString; } diff --git a/dart/lib/src/pickles/PickleCompiler.dart b/dart/lib/src/pickles/PickleCompiler.dart index 662fd1c1e..70c3185af 100644 --- a/dart/lib/src/pickles/PickleCompiler.dart +++ b/dart/lib/src/pickles/PickleCompiler.dart @@ -169,16 +169,20 @@ class PickleCompiler PickleStepArgument argument = PickleStepArgument.empty; + var dataTable = PickleTable.empty; + var pickleDocString = PickleDocString.empty; + if (step.dataTable.isNotEmpty) { - final dataTable = _buildPickleDataTable(step.dataTable, variableCells + dataTable = _buildPickleDataTable(step.dataTable, variableCells , valueCells); - argument = PickleStepArgument(dataTable: dataTable); } - if (step.docString.isNotEmpty) { - final pickleDocString = _buildPickleDocString(step.docString + pickleDocString = _buildPickleDocString(step.docString , variableCells, valueCells); - argument = PickleStepArgument(docString: pickleDocString); + } + if (dataTable.isNotEmpty || pickleDocString.isNotEmpty) { + argument = PickleStepArgument(dataTable: dataTable + , docString: pickleDocString); } var pickleStep = PickleStep(_idGenerator.newId(), stepText, argument); @@ -253,4 +257,3 @@ class PickleCompiler return name; } } - diff --git a/dotnet/Gherkin/Ast/Step.cs b/dotnet/Gherkin/Ast/Step.cs index 2b3d529e0..9ec2da53f 100644 --- a/dotnet/Gherkin/Ast/Step.cs +++ b/dotnet/Gherkin/Ast/Step.cs @@ -2,12 +2,18 @@ namespace Gherkin.Ast; -public class Step(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument) : IHasLocation -{ - public Location Location { get; } = location; - public string Keyword { get; } = keyword; - public StepKeywordType KeywordType { get; } = keywordType; - - public string Text { get; } = text; - public StepArgument Argument { get; } = argument; -} \ No newline at end of file +public class Step(Location location, string keyword, StepKeywordType keywordType, string text, DataTable dataTable, DocString docString) : IHasLocation +{ + public Location Location { get; } = location; + public string Keyword { get; } = keyword; + public StepKeywordType KeywordType { get; } = keywordType; + + public string Text { get; } = text; + public DataTable DataTable { get; } = dataTable; + public DocString DocString { get; } = docString; + + public Step(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument) + : this(location, keyword, keywordType, text, argument as DataTable, argument as DocString) + { + } +} diff --git a/dotnet/Gherkin/AstBuilder.cs b/dotnet/Gherkin/AstBuilder.cs index 176895713..ca48e813a 100644 --- a/dotnet/Gherkin/AstBuilder.cs +++ b/dotnet/Gherkin/AstBuilder.cs @@ -56,10 +56,10 @@ private object GetTransformedNode(AstNode node) case RuleType.Step: { var stepLine = node.GetToken(TokenType.StepLine); - var stepArg = node.GetSingle(RuleType.DataTable) ?? - node.GetSingle(RuleType.DocString); - var keywordType = GetKeywordType(stepLine); - return CreateStep(GetLocation(stepLine), stepLine.MatchedKeyword, keywordType, stepLine.MatchedText, stepArg, node); + var dataTable = node.GetSingle(RuleType.DataTable); + var docString = node.GetSingle(RuleType.DocString); + var keywordType = GetKeywordType(stepLine); + return CreateStep(GetLocation(stepLine), stepLine.MatchedKeyword, keywordType, stepLine.MatchedText, dataTable, docString, node); } case RuleType.DocString: { @@ -208,10 +208,15 @@ protected virtual DocString CreateDocString(Location location, string contentTyp return new DocString(location, contentType, content, delimiter); } - protected virtual Step CreateStep(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument, AstNode node) - { - return new Step(location, keyword, keywordType, text, argument); - } + protected virtual Step CreateStep(Location location, string keyword, StepKeywordType keywordType, string text, StepArgument argument, AstNode node) + { + return new Step(location, keyword, keywordType, text, argument); + } + + protected virtual Step CreateStep(Location location, string keyword, StepKeywordType keywordType, string text, DataTable dataTable, DocString docString, AstNode node) + { + return new Step(location, keyword, keywordType, text, dataTable, docString); + } protected virtual GherkinDocument CreateGherkinDocument(Feature feature, IEnumerable gherkinDocumentComments, AstNode node) { diff --git a/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs b/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs index 854084ba4..7bd05fc27 100644 --- a/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs +++ b/dotnet/Gherkin/CucumberMessages/AstMessagesConverter.cs @@ -188,20 +188,20 @@ private TableCell ConvertCell(Ast.TableCell c) private Step ConvertStep(Ast.Step step) { - DataTable dataTable = null; - if (step.Argument is Gherkin.Ast.DataTable astDataTable) - { - var rows = ConvertToTableRow(astDataTable.Rows); - dataTable = new DataTable( + DataTable dataTable = null; + if (step.DataTable is { } astDataTable) + { + var rows = ConvertToTableRow(astDataTable.Rows); + dataTable = new DataTable( ConvertLocation(astDataTable.Location), rows ); } - - DocString docString = null; - if (step.Argument is Gherkin.Ast.DocString astDocString) - { - docString = new DocString( + + DocString docString = null; + if (step.DocString is { } astDocString) + { + docString = new DocString( ConvertLocation(astDocString.Location), astDocString.ContentType, astDocString.Content, @@ -231,4 +231,4 @@ private Io.Cucumber.Messages.Types.StepKeywordType ConvertStepKeywordType(StepKe _ => Io.Cucumber.Messages.Types.StepKeywordType.UNKNOWN }; } -} \ No newline at end of file +} diff --git a/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs b/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs index 8f83f6377..e0f028aaf 100644 --- a/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs +++ b/dotnet/Gherkin/CucumberMessages/Pickles/PickleCompiler.cs @@ -196,6 +196,7 @@ protected virtual PickleStepArgument CreatePickleArgument(Step argument) protected virtual PickleStepArgument CreatePickleArgument(Step step, IEnumerable variableCells, IEnumerable valueCells) { + PickleTable pickleTable = null; if (step.DataTable != null) { var t = step.DataTable; @@ -215,24 +216,22 @@ protected virtual PickleStepArgument CreatePickleArgument(Step step, IEnumerable } newRows.Add(new PickleTableRow(newCells)); } - return new PickleStepArgument(null, new PickleTable(newRows)); + pickleTable = new PickleTable(newRows); } + PickleDocString pickleDocString = null; if (step.DocString != null) { var ds = step.DocString; - return - new PickleStepArgument - ( - new PickleDocString( - ds.MediaType == null ? null : Interpolate(ds.MediaType, variableCells, valueCells), - Interpolate(ds.Content, variableCells, valueCells) - ), - null - ); + pickleDocString = new PickleDocString( + ds.MediaType == null ? null : Interpolate(ds.MediaType, variableCells, valueCells), + Interpolate(ds.Content, variableCells, valueCells) + ); } - return null; + return pickleTable != null || pickleDocString != null + ? new PickleStepArgument(pickleDocString, pickleTable) + : null; } protected virtual PickleStep[] PickleSteps(IEnumerable steps) diff --git a/dotnet/Gherkin/Parser.cs b/dotnet/Gherkin/Parser.cs index a2abdc174..5cefdd2ee 100644 --- a/dotnet/Gherkin/Parser.cs +++ b/dotnet/Gherkin/Parser.cs @@ -1,4078 +1,5096 @@ -// ------------------------------------------------------------------------------ -// -// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -// ------------------------------------------------------------------------------ -#region Designer generated code -#pragma warning disable -using System; -using System.Linq; -using System.Collections.Generic; -namespace Gherkin -{ - public enum TokenType - { - None, - EOF, - Empty, - Comment, - TagLine, - FeatureLine, - RuleLine, - BackgroundLine, - ScenarioLine, - ExamplesLine, - StepLine, - DocStringSeparator, - TableRow, - Language, - Other, - } - - public enum RuleType - { - None, - _EOF, // #EOF - _Empty, // #Empty - _Comment, // #Comment - _TagLine, // #TagLine - _FeatureLine, // #FeatureLine - _RuleLine, // #RuleLine - _BackgroundLine, // #BackgroundLine - _ScenarioLine, // #ScenarioLine - _ExamplesLine, // #ExamplesLine - _StepLine, // #StepLine - _DocStringSeparator, // #DocStringSeparator - _TableRow, // #TableRow - _Language, // #Language - _Other, // #Other - GherkinDocument, // GherkinDocument! := Feature? - Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* - FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper - Rule, // Rule! := RuleHeader Background? ScenarioDefinition* - RuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper - Background, // Background! := #BackgroundLine DescriptionHelper Step* - ScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario - Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* - ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples - Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? - ExamplesTable, // ExamplesTable! := #TableRow #TableRow* - Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) - DataTable, // DataTable! := #TableRow+ - DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator - Tags, // Tags! := #TagLine+ - DescriptionHelper, // DescriptionHelper := #Empty* Description? - Description, // Description! := (#Other | #Comment)+ - } - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public partial class Parser - { - private readonly IAstBuilder astBuilder; - - public Parser() - : this(new AstBuilder()) - { - } - - public Parser(IAstBuilder astBuilder) - { - this.astBuilder = astBuilder; - } - - public bool StopAtFirstError { get; set;} - - [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - protected class ParserContext - { - public ITokenScanner TokenScanner { get; set; } - public ITokenMatcher TokenMatcher { get; set; } - public Queue TokenQueue { get; set; } - public List Errors { get; set; } - } - - public T Parse(ITokenScanner tokenScanner) - { - return Parse(tokenScanner, new TokenMatcher()); - } - - public T Parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher) - { - tokenMatcher.Reset(); - astBuilder.Reset(); - var context = new ParserContext - { - TokenScanner = tokenScanner, - TokenMatcher = tokenMatcher, - TokenQueue = new Queue(), - Errors = new List() - }; - - StartRule(context, RuleType.GherkinDocument); - int state = 0; - Token token; - do - { - token = ReadToken(context); - state = MatchToken(state, token, context); - } while(!token.IsEOF); - - EndRule(context, RuleType.GherkinDocument); - - if (context.Errors.Count > 0) - { - throw new CompositeParserException(context.Errors.ToArray()); - } - - return GetResult(context); - } - - protected virtual void AddError(ParserContext context, ParserException error) - { - if (context.Errors.Any(e => e.Message == error.Message)) - return; - context.Errors.Add(error); - if (context.Errors.Count > 10) - throw new CompositeParserException(context.Errors.ToArray()); - } - - private bool TryHandleExternalError(ParserContext context, Exception exception) - { - if (StopAtFirstError) - return false; - - if (exception is CompositeParserException compositeParserException) - { - foreach (var error in compositeParserException.Errors) - AddError(context, error); - } - else if (exception is ParserException error) - { - AddError(context, error); - } - return true; - } - - void Build(ParserContext context, Token token) - { - try - { - this.astBuilder.Build(token); - } - catch (Exception ex) - { - if (!TryHandleExternalError(context, ex)) - throw; - } - } - - void StartRule(ParserContext context, RuleType ruleType) - { - try - { - this.astBuilder.StartRule(ruleType); - } - catch (Exception ex) - { - if (!TryHandleExternalError(context, ex)) - throw; - } - } - - void EndRule(ParserContext context, RuleType ruleType) - { - try - { - this.astBuilder.EndRule(ruleType); - } - catch (Exception ex) - { - if (!TryHandleExternalError(context, ex)) - throw; - } - } - - T GetResult(ParserContext context) - { - return this.astBuilder.GetResult(); - } - - Token ReadToken(ParserContext context) - { - return context.TokenQueue.Count > 0 ? context.TokenQueue.Dequeue() : context.TokenScanner.Read(); - } - - - bool Match_EOF(ParserContext context, Token token) - { - try - { - return context.TokenMatcher.Match_EOF(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_Empty(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_Empty(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_Comment(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_Comment(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_TagLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_TagLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_FeatureLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_FeatureLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_RuleLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_RuleLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_BackgroundLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_BackgroundLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_ScenarioLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_ScenarioLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_ExamplesLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_ExamplesLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_StepLine(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_StepLine(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_DocStringSeparator(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_DocStringSeparator(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_TableRow(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_TableRow(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_Language(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_Language(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - bool Match_Other(ParserContext context, Token token) - { - if (token.IsEOF) return false; - try - { - return context.TokenMatcher.Match_Other(token); - } - catch (Exception exception) - { - if (TryHandleExternalError(context, exception)) - return false; - throw; - } - } - protected virtual int MatchToken(int state, Token token, ParserContext context) - { - int newState; - switch(state) - { - case 0: - newState = MatchTokenAt_0(token, context); - break; - case 1: - newState = MatchTokenAt_1(token, context); - break; - case 2: - newState = MatchTokenAt_2(token, context); - break; - case 3: - newState = MatchTokenAt_3(token, context); - break; - case 4: - newState = MatchTokenAt_4(token, context); - break; - case 5: - newState = MatchTokenAt_5(token, context); - break; - case 6: - newState = MatchTokenAt_6(token, context); - break; - case 7: - newState = MatchTokenAt_7(token, context); - break; - case 8: - newState = MatchTokenAt_8(token, context); - break; - case 9: - newState = MatchTokenAt_9(token, context); - break; - case 10: - newState = MatchTokenAt_10(token, context); - break; - case 11: - newState = MatchTokenAt_11(token, context); - break; - case 12: - newState = MatchTokenAt_12(token, context); - break; - case 13: - newState = MatchTokenAt_13(token, context); - break; - case 14: - newState = MatchTokenAt_14(token, context); - break; - case 15: - newState = MatchTokenAt_15(token, context); - break; - case 16: - newState = MatchTokenAt_16(token, context); - break; - case 17: - newState = MatchTokenAt_17(token, context); - break; - case 18: - newState = MatchTokenAt_18(token, context); - break; - case 19: - newState = MatchTokenAt_19(token, context); - break; - case 20: - newState = MatchTokenAt_20(token, context); - break; - case 21: - newState = MatchTokenAt_21(token, context); - break; - case 22: - newState = MatchTokenAt_22(token, context); - break; - case 23: - newState = MatchTokenAt_23(token, context); - break; - case 24: - newState = MatchTokenAt_24(token, context); - break; - case 25: - newState = MatchTokenAt_25(token, context); - break; - case 26: - newState = MatchTokenAt_26(token, context); - break; - case 27: - newState = MatchTokenAt_27(token, context); - break; - case 28: - newState = MatchTokenAt_28(token, context); - break; - case 29: - newState = MatchTokenAt_29(token, context); - break; - case 30: - newState = MatchTokenAt_30(token, context); - break; - case 31: - newState = MatchTokenAt_31(token, context); - break; - case 32: - newState = MatchTokenAt_32(token, context); - break; - case 33: - newState = MatchTokenAt_33(token, context); - break; - case 35: - newState = MatchTokenAt_35(token, context); - break; - case 36: - newState = MatchTokenAt_36(token, context); - break; - case 37: - newState = MatchTokenAt_37(token, context); - break; - case 38: - newState = MatchTokenAt_38(token, context); - break; - case 39: - newState = MatchTokenAt_39(token, context); - break; - case 40: - newState = MatchTokenAt_40(token, context); - break; - case 41: - newState = MatchTokenAt_41(token, context); - break; - case 42: - newState = MatchTokenAt_42(token, context); - break; - default: - throw new InvalidOperationException("Unknown state: " + state); - } - return newState; - } - - - // Start - int MatchTokenAt_0(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - Build(context, token); - return 34; - } - if (Match_Language(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - Build(context, token); - return 1; - } - if (Match_TagLine(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - StartRule(context, RuleType.Feature); - StartRule(context, RuleType.FeatureHeader); - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 0; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 0; - } - - const string stateComment = "State: 0 - Start"; - var expectedTokens = new string[] {"#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 0; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 - int MatchTokenAt_1(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - StartRule(context, RuleType.Tags); - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 1; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 1; - } - - const string stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; - var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 1; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 - int MatchTokenAt_2(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 2; - } - if (Match_FeatureLine(context, token)) - { - EndRule(context, RuleType.Tags); - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 2; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 2; - } - - const string stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 2; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 - int MatchTokenAt_3(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 3; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 4; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 5; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 4; - } - - const string stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 3; - } - - // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_4(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 4; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 5; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.FeatureHeader); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 4; - } - - const string stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 4; - } - - // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 - int MatchTokenAt_5(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 5; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 6; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 7; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 6; - } - - const string stateComment = "State: 5 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 5; - } - - // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_6(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 6; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 7; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 6; - } - - const string stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 6; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 - int MatchTokenAt_7(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 8; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 41; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 7; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 7; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 7; - } - - const string stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 7; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_8(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 8; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 7; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 8; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 8; - } - - const string stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 8; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_9(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 9; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 9; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 9; - } - - const string stateComment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 9; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int MatchTokenAt_10(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 10; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 11; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 12; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 11; - } - - const string stateComment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 10; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_11(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 11; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 12; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 11; - } - - const string stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 11; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int MatchTokenAt_12(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 13; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 39; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 12; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 12; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 12; - } - - const string stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 12; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_13(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 13; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 12; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 13; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 13; - } - - const string stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 13; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_14(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 14; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 14; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 14; - } - - const string stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 14; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int MatchTokenAt_15(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 15; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 16; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 17; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 16; - } - - const string stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 15; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_16(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 16; - } - if (Match_TableRow(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 17; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 16; - } - - const string stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 16; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int MatchTokenAt_17(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 17; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 17; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 17; - } - - const string stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 17; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - int MatchTokenAt_18(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 18; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Tags); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 18; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 18; - } - - const string stateComment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 18; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - int MatchTokenAt_19(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 20; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 20; - } - - const string stateComment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 19; - } - - // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_20(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 20; - } - if (Match_BackgroundLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Background); - Build(context, token); - return 21; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.RuleHeader); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 20; - } - - const string stateComment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 20; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - int MatchTokenAt_21(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 21; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 22; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 23; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 22; - } - - const string stateComment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 21; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_22(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 22; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 23; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 22; - } - - const string stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 22; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - int MatchTokenAt_23(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 24; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 37; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 23; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 23; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 23; - } - - const string stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 23; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_24(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 24; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 23; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 24; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 24; - } - - const string stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 24; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_25(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 25; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 25; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 25; - } - - const string stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 25; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - int MatchTokenAt_26(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 26; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 27; - } - if (Match_StepLine(context, token)) - { - StartRule(context, RuleType.Step); - Build(context, token); - return 28; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 27; - } - - const string stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 26; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_27(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 27; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.Step); - Build(context, token); - return 28; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 27; - } - - const string stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 27; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - int MatchTokenAt_28(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.DataTable); - Build(context, token); - return 29; - } - if (Match_DocStringSeparator(context, token)) - { - StartRule(context, RuleType.DocString); - Build(context, token); - return 35; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 28; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 28; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 28; - } - - const string stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 28; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - int MatchTokenAt_29(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 29; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 28; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DataTable); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 29; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 29; - } - - const string stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 29; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - int MatchTokenAt_30(Token token, ParserContext context) - { - if (Match_TagLine(context, token)) - { - Build(context, token); - return 30; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Tags); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 30; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 30; - } - - const string stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 30; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - int MatchTokenAt_31(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 31; - } - if (Match_Comment(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 32; - } - if (Match_TableRow(context, token)) - { - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 33; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - StartRule(context, RuleType.Description); - Build(context, token); - return 32; - } - - const string stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; - var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 31; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - int MatchTokenAt_32(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 32; - } - if (Match_TableRow(context, token)) - { - EndRule(context, RuleType.Description); - StartRule(context, RuleType.ExamplesTable); - Build(context, token); - return 33; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.Description); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 32; - } - - const string stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; - var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 32; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - int MatchTokenAt_33(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_TableRow(context, token)) - { - Build(context, token); - return 33; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.ExamplesTable); - EndRule(context, RuleType.Examples); - EndRule(context, RuleType.ExamplesDefinition); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 33; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 33; - } - - const string stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; - var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 33; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_35(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 36; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 35; - } - - const string stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 35; - } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_36(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 28; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 30; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 31; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 36; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 36; - } - - const string stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 36; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_37(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 38; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 37; - } - - const string stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_38(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 23; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 25; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 26; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Rule); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 38; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 38; - } - - const string stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 38; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_39(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 40; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 39; - } - - const string stateComment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 39; - } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_40(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 12; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_1(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 14; - } - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ExamplesLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.ExamplesDefinition); - StartRule(context, RuleType.Examples); - Build(context, token); - return 15; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Scenario); - EndRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 40; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 40; - } - - const string stateComment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 40; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - int MatchTokenAt_41(Token token, ParserContext context) - { - if (Match_DocStringSeparator(context, token)) - { - Build(context, token); - return 42; - } - if (Match_Other(context, token)) - { - Build(context, token); - return 41; - } - - const string stateComment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 41; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - int MatchTokenAt_42(Token token, ParserContext context) - { - if (Match_EOF(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - EndRule(context, RuleType.Feature); - Build(context, token); - return 34; - } - if (Match_StepLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - StartRule(context, RuleType.Step); - Build(context, token); - return 7; - } - if (Match_TagLine(context, token)) - { - if (LookAhead_0(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Tags); - Build(context, token); - return 9; - } - } - if (Match_TagLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - StartRule(context, RuleType.Tags); - Build(context, token); - return 18; - } - if (Match_ScenarioLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.ScenarioDefinition); - StartRule(context, RuleType.Scenario); - Build(context, token); - return 10; - } - if (Match_RuleLine(context, token)) - { - EndRule(context, RuleType.DocString); - EndRule(context, RuleType.Step); - EndRule(context, RuleType.Background); - StartRule(context, RuleType.Rule); - StartRule(context, RuleType.RuleHeader); - Build(context, token); - return 19; - } - if (Match_Comment(context, token)) - { - Build(context, token); - return 42; - } - if (Match_Empty(context, token)) - { - Build(context, token); - return 42; - } - - const string stateComment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; - var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) - : new UnexpectedTokenException(token, expectedTokens, stateComment); - if (StopAtFirstError) - throw error; - - AddError(context, error); - return 42; - } - - - bool LookAhead_0(ParserContext context, Token currentToken) - { - Token token; - var queue = new Queue(); - bool match = false; - do - { - token = ReadToken(context); - queue.Enqueue(token); - - if (false - || Match_ScenarioLine(context, token) -) - { - match = true; - break; - } - } while (false - || Match_Empty(context, token) - || Match_Comment(context, token) - || Match_TagLine(context, token) -); - foreach(var t in queue) - context.TokenQueue.Enqueue(t); - return match; - } - - bool LookAhead_1(ParserContext context, Token currentToken) - { - Token token; - var queue = new Queue(); - bool match = false; - do - { - token = ReadToken(context); - queue.Enqueue(token); - - if (false - || Match_ExamplesLine(context, token) -) - { - match = true; - break; - } - } while (false - || Match_Empty(context, token) - || Match_Comment(context, token) - || Match_TagLine(context, token) -); - foreach(var t in queue) - context.TokenQueue.Enqueue(t); - return match; - } - } - - public partial interface IAstBuilder - { - void Build(Token token); - void StartRule(RuleType ruleType); - void EndRule(RuleType ruleType); - T GetResult(); - void Reset(); - } - - public partial interface ITokenScanner - { - Token Read(); - } - - public partial interface ITokenMatcher - { - bool Match_EOF(Token token); - bool Match_Empty(Token token); - bool Match_Comment(Token token); - bool Match_TagLine(Token token); - bool Match_FeatureLine(Token token); - bool Match_RuleLine(Token token); - bool Match_BackgroundLine(Token token); - bool Match_ScenarioLine(Token token); - bool Match_ExamplesLine(Token token); - bool Match_StepLine(Token token); - bool Match_DocStringSeparator(Token token); - bool Match_TableRow(Token token); - bool Match_Language(Token token); - bool Match_Other(Token token); - void Reset(); - } -} -#pragma warning restore -#endregion +// ------------------------------------------------------------------------------ +// +// This code was generated by Berp (http://https://github.com/gasparnagy/berp/). +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +#region Designer generated code +#pragma warning disable +using System; +using System.Linq; +using System.Collections.Generic; +namespace Gherkin +{ + public enum TokenType + { + None, + EOF, + Empty, + Comment, + TagLine, + FeatureLine, + RuleLine, + BackgroundLine, + ScenarioLine, + ExamplesLine, + StepLine, + DocStringSeparator, + TableRow, + Language, + Other, + } + + public enum RuleType + { + None, + _EOF, // #EOF + _Empty, // #Empty + _Comment, // #Comment + _TagLine, // #TagLine + _FeatureLine, // #FeatureLine + _RuleLine, // #RuleLine + _BackgroundLine, // #BackgroundLine + _ScenarioLine, // #ScenarioLine + _ExamplesLine, // #ExamplesLine + _StepLine, // #StepLine + _DocStringSeparator, // #DocStringSeparator + _TableRow, // #TableRow + _Language, // #Language + _Other, // #Other + GherkinDocument, // GherkinDocument! := Feature? + Feature, // Feature! := FeatureHeader Background? ScenarioDefinition* Rule* + FeatureHeader, // FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper + Rule, // Rule! := RuleHeader Background? ScenarioDefinition* + RuleHeader, // RuleHeader! := Tags? #RuleLine DescriptionHelper + Background, // Background! := #BackgroundLine DescriptionHelper Step* + ScenarioDefinition, // ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario + Scenario, // Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* + ExamplesDefinition, // ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples + Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? + ExamplesTable, // ExamplesTable! := #TableRow #TableRow* + Step, // Step! := #StepLine StepArg? + StepArg, // StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) + DataTableAndMaybeDocString, // DataTableAndMaybeDocString := DataTable DocString? + DocStringAndMaybeDataTable, // DocStringAndMaybeDataTable := DocString DataTable? + DataTable, // DataTable! := #TableRow+ + DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator + Tags, // Tags! := #TagLine+ + DescriptionHelper, // DescriptionHelper := #Empty* Description? + Description, // Description! := (#Other | #Comment)+ + } + + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public partial class Parser + { + private readonly IAstBuilder astBuilder; + + public Parser() + : this(new AstBuilder()) + { + } + + public Parser(IAstBuilder astBuilder) + { + this.astBuilder = astBuilder; + } + + public bool StopAtFirstError { get; set;} + + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + protected class ParserContext + { + public ITokenScanner TokenScanner { get; set; } + public ITokenMatcher TokenMatcher { get; set; } + public Queue TokenQueue { get; set; } + public List Errors { get; set; } + } + + public T Parse(ITokenScanner tokenScanner) + { + return Parse(tokenScanner, new TokenMatcher()); + } + + public T Parse(ITokenScanner tokenScanner, ITokenMatcher tokenMatcher) + { + tokenMatcher.Reset(); + astBuilder.Reset(); + var context = new ParserContext + { + TokenScanner = tokenScanner, + TokenMatcher = tokenMatcher, + TokenQueue = new Queue(), + Errors = new List() + }; + + StartRule(context, RuleType.GherkinDocument); + int state = 0; + Token token; + do + { + token = ReadToken(context); + state = MatchToken(state, token, context); + } while(!token.IsEOF); + + EndRule(context, RuleType.GherkinDocument); + + if (context.Errors.Count > 0) + { + throw new CompositeParserException(context.Errors.ToArray()); + } + + return GetResult(context); + } + + protected virtual void AddError(ParserContext context, ParserException error) + { + if (context.Errors.Any(e => e.Message == error.Message)) + return; + context.Errors.Add(error); + if (context.Errors.Count > 10) + throw new CompositeParserException(context.Errors.ToArray()); + } + + private bool TryHandleExternalError(ParserContext context, Exception exception) + { + if (StopAtFirstError) + return false; + + if (exception is CompositeParserException compositeParserException) + { + foreach (var error in compositeParserException.Errors) + AddError(context, error); + } + else if (exception is ParserException error) + { + AddError(context, error); + } + return true; + } + + void Build(ParserContext context, Token token) + { + try + { + this.astBuilder.Build(token); + } + catch (Exception ex) + { + if (!TryHandleExternalError(context, ex)) + throw; + } + } + + void StartRule(ParserContext context, RuleType ruleType) + { + try + { + this.astBuilder.StartRule(ruleType); + } + catch (Exception ex) + { + if (!TryHandleExternalError(context, ex)) + throw; + } + } + + void EndRule(ParserContext context, RuleType ruleType) + { + try + { + this.astBuilder.EndRule(ruleType); + } + catch (Exception ex) + { + if (!TryHandleExternalError(context, ex)) + throw; + } + } + + T GetResult(ParserContext context) + { + return this.astBuilder.GetResult(); + } + + Token ReadToken(ParserContext context) + { + return context.TokenQueue.Count > 0 ? context.TokenQueue.Dequeue() : context.TokenScanner.Read(); + } + + + bool Match_EOF(ParserContext context, Token token) + { + try + { + return context.TokenMatcher.Match_EOF(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_Empty(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_Empty(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_Comment(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_Comment(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_TagLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_TagLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_FeatureLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_FeatureLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_RuleLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_RuleLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_BackgroundLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_BackgroundLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_ScenarioLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_ScenarioLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_ExamplesLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_ExamplesLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_StepLine(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_StepLine(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_DocStringSeparator(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_DocStringSeparator(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_TableRow(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_TableRow(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_Language(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_Language(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + bool Match_Other(ParserContext context, Token token) + { + if (token.IsEOF) return false; + try + { + return context.TokenMatcher.Match_Other(token); + } + catch (Exception exception) + { + if (TryHandleExternalError(context, exception)) + return false; + throw; + } + } + protected virtual int MatchToken(int state, Token token, ParserContext context) + { + int newState; + switch(state) + { + case 0: + newState = MatchTokenAt_0(token, context); + break; + case 1: + newState = MatchTokenAt_1(token, context); + break; + case 2: + newState = MatchTokenAt_2(token, context); + break; + case 3: + newState = MatchTokenAt_3(token, context); + break; + case 4: + newState = MatchTokenAt_4(token, context); + break; + case 5: + newState = MatchTokenAt_5(token, context); + break; + case 6: + newState = MatchTokenAt_6(token, context); + break; + case 7: + newState = MatchTokenAt_7(token, context); + break; + case 8: + newState = MatchTokenAt_8(token, context); + break; + case 9: + newState = MatchTokenAt_9(token, context); + break; + case 10: + newState = MatchTokenAt_10(token, context); + break; + case 11: + newState = MatchTokenAt_11(token, context); + break; + case 12: + newState = MatchTokenAt_12(token, context); + break; + case 13: + newState = MatchTokenAt_13(token, context); + break; + case 14: + newState = MatchTokenAt_14(token, context); + break; + case 15: + newState = MatchTokenAt_15(token, context); + break; + case 16: + newState = MatchTokenAt_16(token, context); + break; + case 17: + newState = MatchTokenAt_17(token, context); + break; + case 18: + newState = MatchTokenAt_18(token, context); + break; + case 19: + newState = MatchTokenAt_19(token, context); + break; + case 20: + newState = MatchTokenAt_20(token, context); + break; + case 21: + newState = MatchTokenAt_21(token, context); + break; + case 22: + newState = MatchTokenAt_22(token, context); + break; + case 23: + newState = MatchTokenAt_23(token, context); + break; + case 24: + newState = MatchTokenAt_24(token, context); + break; + case 25: + newState = MatchTokenAt_25(token, context); + break; + case 26: + newState = MatchTokenAt_26(token, context); + break; + case 27: + newState = MatchTokenAt_27(token, context); + break; + case 28: + newState = MatchTokenAt_28(token, context); + break; + case 29: + newState = MatchTokenAt_29(token, context); + break; + case 30: + newState = MatchTokenAt_30(token, context); + break; + case 31: + newState = MatchTokenAt_31(token, context); + break; + case 32: + newState = MatchTokenAt_32(token, context); + break; + case 33: + newState = MatchTokenAt_33(token, context); + break; + case 34: + newState = MatchTokenAt_34(token, context); + break; + case 35: + newState = MatchTokenAt_35(token, context); + break; + case 36: + newState = MatchTokenAt_36(token, context); + break; + case 37: + newState = MatchTokenAt_37(token, context); + break; + case 38: + newState = MatchTokenAt_38(token, context); + break; + case 39: + newState = MatchTokenAt_39(token, context); + break; + case 40: + newState = MatchTokenAt_40(token, context); + break; + case 41: + newState = MatchTokenAt_41(token, context); + break; + case 43: + newState = MatchTokenAt_43(token, context); + break; + case 44: + newState = MatchTokenAt_44(token, context); + break; + case 45: + newState = MatchTokenAt_45(token, context); + break; + case 46: + newState = MatchTokenAt_46(token, context); + break; + case 47: + newState = MatchTokenAt_47(token, context); + break; + case 48: + newState = MatchTokenAt_48(token, context); + break; + case 49: + newState = MatchTokenAt_49(token, context); + break; + case 50: + newState = MatchTokenAt_50(token, context); + break; + case 51: + newState = MatchTokenAt_51(token, context); + break; + case 52: + newState = MatchTokenAt_52(token, context); + break; + case 53: + newState = MatchTokenAt_53(token, context); + break; + case 54: + newState = MatchTokenAt_54(token, context); + break; + default: + throw new InvalidOperationException("Unknown state: " + state); + } + return newState; + } + + + // Start + int MatchTokenAt_0(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + Build(context, token); + return 42; + } + if (Match_Language(context, token)) + { + StartRule(context, RuleType.Feature); + StartRule(context, RuleType.FeatureHeader); + Build(context, token); + return 1; + } + if (Match_TagLine(context, token)) + { + StartRule(context, RuleType.Feature); + StartRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 2; + } + if (Match_FeatureLine(context, token)) + { + StartRule(context, RuleType.Feature); + StartRule(context, RuleType.FeatureHeader); + Build(context, token); + return 3; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 0; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 0; + } + + const string stateComment = "State: 0 - Start"; + var expectedTokens = new string[] {"#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 0; + } + + // GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0 + int MatchTokenAt_1(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + StartRule(context, RuleType.Tags); + Build(context, token); + return 2; + } + if (Match_FeatureLine(context, token)) + { + Build(context, token); + return 3; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 1; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 1; + } + + const string stateComment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0"; + var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 1; + } + + // GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0 + int MatchTokenAt_2(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 2; + } + if (Match_FeatureLine(context, token)) + { + EndRule(context, RuleType.Tags); + Build(context, token); + return 3; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 2; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 2; + } + + const string stateComment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#FeatureLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 2; + } + + // GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0 + int MatchTokenAt_3(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 3; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 4; + } + if (Match_BackgroundLine(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Background); + Build(context, token); + return 5; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 4; + } + + const string stateComment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 3; + } + + // GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_4(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 4; + } + if (Match_BackgroundLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Background); + Build(context, token); + return 5; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.FeatureHeader); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 4; + } + + const string stateComment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 4; + } + + // GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0 + int MatchTokenAt_5(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 5; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 6; + } + if (Match_StepLine(context, token)) + { + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 6; + } + + const string stateComment = "State: 5 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 5; + } + + // GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_6(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 6; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 6; + } + + const string stateComment = "State: 6 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 6; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0 + int MatchTokenAt_7(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.DataTable); + Build(context, token); + return 8; + } + if (Match_DocStringSeparator(context, token)) + { + StartRule(context, RuleType.DocString); + Build(context, token); + return 52; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 7; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 7; + } + + const string stateComment = "State: 7 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 7; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + int MatchTokenAt_8(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 8; + } + if (Match_DocStringSeparator(context, token)) + { + EndRule(context, RuleType.DataTable); + StartRule(context, RuleType.DocString); + Build(context, token); + return 9; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 8; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 8; + } + + const string stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 8; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_9(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 10; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 9; + } + + const string stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 9; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_10(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 10; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 10; + } + + const string stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 10; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + int MatchTokenAt_11(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 11; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Tags); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 11; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 11; + } + + const string stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 11; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 + int MatchTokenAt_12(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 12; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 13; + } + if (Match_StepLine(context, token)) + { + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 13; + } + + const string stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 12; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_13(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 13; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 13; + } + + const string stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 13; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 + int MatchTokenAt_14(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.DataTable); + Build(context, token); + return 15; + } + if (Match_DocStringSeparator(context, token)) + { + StartRule(context, RuleType.DocString); + Build(context, token); + return 49; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 14; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 14; + } + + const string stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 14; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + int MatchTokenAt_15(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 15; + } + if (Match_DocStringSeparator(context, token)) + { + EndRule(context, RuleType.DataTable); + StartRule(context, RuleType.DocString); + Build(context, token); + return 16; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 15; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 15; + } + + const string stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 15; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_16(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 17; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 16; + } + + const string stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 16; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_17(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 17; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 17; + } + + const string stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 17; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + int MatchTokenAt_18(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 18; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Tags); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 18; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 18; + } + + const string stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 18; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 + int MatchTokenAt_19(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 19; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 20; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.ExamplesTable); + Build(context, token); + return 21; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 20; + } + + const string stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 19; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_20(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 20; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesTable); + Build(context, token); + return 21; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 20; + } + + const string stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 20; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 + int MatchTokenAt_21(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 21; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 21; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 21; + } + + const string stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 21; + } + + // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 + int MatchTokenAt_22(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 22; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Tags); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 22; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 22; + } + + const string stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 22; + } + + // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 + int MatchTokenAt_23(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 24; + } + if (Match_BackgroundLine(context, token)) + { + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Background); + Build(context, token); + return 25; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 24; + } + + const string stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 23; + } + + // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_24(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 24; + } + if (Match_BackgroundLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Background); + Build(context, token); + return 25; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.RuleHeader); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 24; + } + + const string stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 24; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 + int MatchTokenAt_25(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 25; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 26; + } + if (Match_StepLine(context, token)) + { + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 26; + } + + const string stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 25; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_26(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 26; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 26; + } + + const string stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 26; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 + int MatchTokenAt_27(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.DataTable); + Build(context, token); + return 28; + } + if (Match_DocStringSeparator(context, token)) + { + StartRule(context, RuleType.DocString); + Build(context, token); + return 46; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 27; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 27; + } + + const string stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 27; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + int MatchTokenAt_28(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 28; + } + if (Match_DocStringSeparator(context, token)) + { + EndRule(context, RuleType.DataTable); + StartRule(context, RuleType.DocString); + Build(context, token); + return 29; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 28; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 28; + } + + const string stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 28; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_29(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 30; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 29; + } + + const string stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 29; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_30(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 30; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 30; + } + + const string stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 30; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + int MatchTokenAt_31(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 31; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Tags); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 31; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 31; + } + + const string stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#ScenarioLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 31; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 + int MatchTokenAt_32(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 32; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 33; + } + if (Match_StepLine(context, token)) + { + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 33; + } + + const string stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 32; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_33(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 33; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 33; + } + + const string stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 33; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 + int MatchTokenAt_34(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.DataTable); + Build(context, token); + return 35; + } + if (Match_DocStringSeparator(context, token)) + { + StartRule(context, RuleType.DocString); + Build(context, token); + return 43; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 34; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 34; + } + + const string stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 34; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + int MatchTokenAt_35(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 35; + } + if (Match_DocStringSeparator(context, token)) + { + EndRule(context, RuleType.DataTable); + StartRule(context, RuleType.DocString); + Build(context, token); + return 36; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 35; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 35; + } + + const string stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 35; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_36(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 37; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 36; + } + + const string stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 36; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_37(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 37; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 37; + } + + const string stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 37; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + int MatchTokenAt_38(Token token, ParserContext context) + { + if (Match_TagLine(context, token)) + { + Build(context, token); + return 38; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Tags); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 38; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 38; + } + + const string stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + var expectedTokens = new string[] {"#TagLine", "#ExamplesLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 38; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 + int MatchTokenAt_39(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 39; + } + if (Match_Comment(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 40; + } + if (Match_TableRow(context, token)) + { + StartRule(context, RuleType.ExamplesTable); + Build(context, token); + return 41; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + StartRule(context, RuleType.Description); + Build(context, token); + return 40; + } + + const string stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + var expectedTokens = new string[] {"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 39; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + int MatchTokenAt_40(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 40; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.Description); + StartRule(context, RuleType.ExamplesTable); + Build(context, token); + return 41; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.Description); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 40; + } + + const string stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + var expectedTokens = new string[] {"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 40; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 + int MatchTokenAt_41(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 41; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.ExamplesTable); + EndRule(context, RuleType.Examples); + EndRule(context, RuleType.ExamplesDefinition); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 41; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 41; + } + + const string stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 41; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_43(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 44; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 43; + } + + const string stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 43; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_44(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.DocString); + StartRule(context, RuleType.DataTable); + Build(context, token); + return 45; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 44; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 44; + } + + const string stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 44; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + int MatchTokenAt_45(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 45; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 34; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 38; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 39; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 45; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 45; + } + + const string stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 45; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_46(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 47; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 46; + } + + const string stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 46; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_47(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.DocString); + StartRule(context, RuleType.DataTable); + Build(context, token); + return 48; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 47; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 47; + } + + const string stateComment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 47; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + int MatchTokenAt_48(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 48; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 27; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 31; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 32; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Rule); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 48; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 48; + } + + const string stateComment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 48; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_49(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 50; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 49; + } + + const string stateComment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 49; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_50(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.DocString); + StartRule(context, RuleType.DataTable); + Build(context, token); + return 51; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 50; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 50; + } + + const string stateComment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 50; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + int MatchTokenAt_51(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 51; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 14; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_1(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 18; + } + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ExamplesLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.ExamplesDefinition); + StartRule(context, RuleType.Examples); + Build(context, token); + return 19; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Scenario); + EndRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 51; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 51; + } + + const string stateComment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 51; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + int MatchTokenAt_52(Token token, ParserContext context) + { + if (Match_DocStringSeparator(context, token)) + { + Build(context, token); + return 53; + } + if (Match_Other(context, token)) + { + Build(context, token); + return 52; + } + + const string stateComment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#DocStringSeparator", "#Other"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 52; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + int MatchTokenAt_53(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + EndRule(context, RuleType.DocString); + StartRule(context, RuleType.DataTable); + Build(context, token); + return 54; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DocString); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 53; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 53; + } + + const string stateComment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 53; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + int MatchTokenAt_54(Token token, ParserContext context) + { + if (Match_EOF(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + EndRule(context, RuleType.Feature); + Build(context, token); + return 42; + } + if (Match_TableRow(context, token)) + { + Build(context, token); + return 54; + } + if (Match_StepLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + StartRule(context, RuleType.Step); + Build(context, token); + return 7; + } + if (Match_TagLine(context, token)) + { + if (LookAhead_0(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Tags); + Build(context, token); + return 11; + } + } + if (Match_TagLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + StartRule(context, RuleType.Tags); + Build(context, token); + return 22; + } + if (Match_ScenarioLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.ScenarioDefinition); + StartRule(context, RuleType.Scenario); + Build(context, token); + return 12; + } + if (Match_RuleLine(context, token)) + { + EndRule(context, RuleType.DataTable); + EndRule(context, RuleType.Step); + EndRule(context, RuleType.Background); + StartRule(context, RuleType.Rule); + StartRule(context, RuleType.RuleHeader); + Build(context, token); + return 23; + } + if (Match_Comment(context, token)) + { + Build(context, token); + return 54; + } + if (Match_Empty(context, token)) + { + Build(context, token); + return 54; + } + + const string stateComment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + var expectedTokens = new string[] {"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"}; + var error = token.IsEOF ? (ParserException)new UnexpectedEOFException(token, expectedTokens, stateComment) + : new UnexpectedTokenException(token, expectedTokens, stateComment); + if (StopAtFirstError) + throw error; + + AddError(context, error); + return 54; + } + + + bool LookAhead_0(ParserContext context, Token currentToken) + { + Token token; + var queue = new Queue(); + bool match = false; + do + { + token = ReadToken(context); + queue.Enqueue(token); + + if (false + || Match_ScenarioLine(context, token) +) + { + match = true; + break; + } + } while (false + || Match_Empty(context, token) + || Match_Comment(context, token) + || Match_TagLine(context, token) +); + foreach(var t in queue) + context.TokenQueue.Enqueue(t); + return match; + } + + bool LookAhead_1(ParserContext context, Token currentToken) + { + Token token; + var queue = new Queue(); + bool match = false; + do + { + token = ReadToken(context); + queue.Enqueue(token); + + if (false + || Match_ExamplesLine(context, token) +) + { + match = true; + break; + } + } while (false + || Match_Empty(context, token) + || Match_Comment(context, token) + || Match_TagLine(context, token) +); + foreach(var t in queue) + context.TokenQueue.Enqueue(t); + return match; + } + } + + public partial interface IAstBuilder + { + void Build(Token token); + void StartRule(RuleType ruleType); + void EndRule(RuleType ruleType); + T GetResult(); + void Reset(); + } + + public partial interface ITokenScanner + { + Token Read(); + } + + public partial interface ITokenMatcher + { + bool Match_EOF(Token token); + bool Match_Empty(Token token); + bool Match_Comment(Token token); + bool Match_TagLine(Token token); + bool Match_FeatureLine(Token token); + bool Match_RuleLine(Token token); + bool Match_BackgroundLine(Token token); + bool Match_ScenarioLine(Token token); + bool Match_ExamplesLine(Token token); + bool Match_StepLine(Token token); + bool Match_DocStringSeparator(Token token); + bool Match_TableRow(Token token); + bool Match_Language(Token token); + bool Match_Other(Token token); + void Reset(); + } +} +#pragma warning restore +#endregion diff --git a/elixir/lib/gherkin/ast_builder/ast_builder.ex b/elixir/lib/gherkin/ast_builder/ast_builder.ex index 0cec7566e..0015bc698 100644 --- a/elixir/lib/gherkin/ast_builder/ast_builder.ex +++ b/elixir/lib/gherkin/ast_builder/ast_builder.ex @@ -393,10 +393,10 @@ defmodule CucumberGherkin.AstBuilder do defp add_mediatype_to(%DocStringMessage{} = m, d), do: %{m | media_type: d} defp add_datatable_to(%StepMessage{} = m, nil), do: m - defp add_datatable_to(%StepMessage{} = m, d), do: %{m | argument: {:data_table, d}} + defp add_datatable_to(%StepMessage{} = m, d), do: %{m | data_table: d} defp add_docstring_to(%StepMessage{} = m, nil), do: m - defp add_docstring_to(%StepMessage{} = m, d), do: %{m | argument: {:doc_string, d}} + defp add_docstring_to(%StepMessage{} = m, d), do: %{m | doc_string: d} defp add_background_to(m, nil), do: m diff --git a/elixir/lib/gherkin/parser.ex b/elixir/lib/gherkin/parser.ex index 5e13bb8cb..013e40f0b 100644 --- a/elixir/lib/gherkin/parser.ex +++ b/elixir/lib/gherkin/parser.ex @@ -15,7 +15,7 @@ defmodule CucumberGherkin.RuleTypes do @moduledoc false @rule_types [ None, -EOF,Empty,Comment,TagLine,FeatureLine,RuleLine,BackgroundLine,ScenarioLine,ExamplesLine,StepLine,DocStringSeparator,TableRow,Language,Other,GherkinDocument,Feature,FeatureHeader,Rule,RuleHeader,Background,ScenarioDefinition,Scenario,ExamplesDefinition,Examples,ExamplesTable,Step,StepArg,DataTable,DocString,Tags,DescriptionHelper,Description, ] +EOF,Empty,Comment,TagLine,FeatureLine,RuleLine,BackgroundLine,ScenarioLine,ExamplesLine,StepLine,DocStringSeparator,TableRow,Language,Other,GherkinDocument,Feature,FeatureHeader,Rule,RuleHeader,Background,ScenarioDefinition,Scenario,ExamplesDefinition,Examples,ExamplesTable,Step,StepArg,DataTableAndMaybeDocString,DocStringAndMaybeDataTable,DataTable,DocString,Tags,DescriptionHelper,Description, ] def get_ruletype_for_tokentype(type) do index = CucumberGherkin.TokenTypes.get_ordinal type @@ -86,19 +86,19 @@ defmodule CucumberGherkin.Parser do defp match_token(%Line{} = line, %ParserContext{state: 0} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Language , line, context) -> + update_next_state(42) + TokenMatcher.match?(Language , line, context) -> TokenMatcher.parse(Language , line, context) |> AstBuilder.start_rule(Feature) |> AstBuilder.start_rule(FeatureHeader) |> AstBuilder.build() |> update_next_state(1) - TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.start_rule(Feature) |> AstBuilder.start_rule(FeatureHeader) |> @@ -106,24 +106,24 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.build() |> update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> + TokenMatcher.match?(FeatureLine , line, context) -> TokenMatcher.parse(FeatureLine , line, context) |> AstBuilder.start_rule(Feature) |> AstBuilder.start_rule(FeatureHeader) |> AstBuilder.build() |> update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(0) - TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(0) - true -> + true -> state_comment = "State: 0 - Start" expected_tokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) @@ -132,28 +132,28 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 1} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> + TokenMatcher.match?(FeatureLine , line, context) -> TokenMatcher.parse(FeatureLine , line, context) |> AstBuilder.build() |> update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(1) - TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(1) - true -> + true -> state_comment = "State: 1 - GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0" expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) @@ -162,28 +162,28 @@ TokenMatcher.match?(TagLine , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 2} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.build() |> update_next_state(2) - TokenMatcher.match?(FeatureLine , line, context) -> + TokenMatcher.match?(FeatureLine , line, context) -> TokenMatcher.parse(FeatureLine , line, context) |> AstBuilder.end_rule(Tags) |> AstBuilder.build() |> update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(2) - TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(2) - true -> + true -> state_comment = "State: 2 - GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) @@ -192,42 +192,42 @@ TokenMatcher.match?(TagLine , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 3} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(3) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> update_next_state(4) - TokenMatcher.match?(BackgroundLine , line, context) -> + TokenMatcher.match?(BackgroundLine , line, context) -> TokenMatcher.parse(BackgroundLine , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.start_rule(Background) |> AstBuilder.build() |> update_next_state(5) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.start_rule(Rule) |> @@ -235,30 +235,30 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.start_rule(Rule) |> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> update_next_state(4) - true -> + true -> state_comment = "State: 3 - GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) @@ -267,20 +267,20 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 4} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(4) - TokenMatcher.match?(BackgroundLine , line, context) -> + TokenMatcher.match?(BackgroundLine , line, context) -> TokenMatcher.parse(BackgroundLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> @@ -288,9 +288,9 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.build() |> update_next_state(5) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> @@ -298,8 +298,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> @@ -308,8 +308,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> @@ -317,8 +317,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(FeatureHeader) |> @@ -326,13 +326,13 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> update_next_state(4) - true -> + true -> state_comment = "State: 4 - GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) @@ -341,41 +341,41 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 5} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(5) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> update_next_state(6) - TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> update_next_state(7) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(Rule) |> @@ -383,30 +383,30 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(Rule) |> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> update_next_state(6) - true -> + true -> state_comment = "State: 5 - GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) @@ -415,29 +415,29 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 6} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(6) - TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> update_next_state(7) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -445,8 +445,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -455,8 +455,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -464,8 +464,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -473,13 +473,13 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> update_next_state(6) - true -> + true -> state_comment = "State: 6 - GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) @@ -488,36 +488,36 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 7} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(DataTable) |> AstBuilder.build() |> update_next_state(8) - TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.start_rule(DocString) |> AstBuilder.build() |> - update_next_state(41) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(52) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> update_next_state(7) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -525,8 +525,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -535,8 +535,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -544,8 +544,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -553,18 +553,18 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(7) - TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(7) - true -> + true -> state_comment = "State: 7 - GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) @@ -573,7 +573,7 @@ TokenMatcher.match?(EOF , line, context) -> defp match_token(%Line{} = line, %ParserContext{state: 8} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -581,13 +581,20 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> update_next_state(8) - TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.start_rule(DocString) |> + AstBuilder.build() |> + + update_next_state(9) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -595,9 +602,9 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.build() |> update_next_state(7) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -606,8 +613,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -617,8 +624,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -627,8 +634,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -637,94 +644,192 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> update_next_state(8) - TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> update_next_state(8) - true -> - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + true -> + state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end defp match_token(%Line{} = line, %ParserContext{state: 9} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> - TokenMatcher.parse(TagLine , line, context) |> +TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.build() |> + + update_next_state(10) + TokenMatcher.match?(Other , line, context) -> + TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> update_next_state(9) - TokenMatcher.match?(ScenarioLine , line, context) -> + true -> + state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 10} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(7) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> - AstBuilder.end_rule(Tags) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(10) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + update_next_state(10) - TokenMatcher.match?(Comment , line, context) -> + true -> + state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 11} = context) do + cond do +TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.build() |> + + update_next_state(11) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(Tags) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(12) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(11) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(9) - true -> - state_comment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + update_next_state(11) + true -> + state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 10} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 12} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(12) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(11) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(13) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(12) - + update_next_state(14) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -732,8 +837,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -742,15 +847,15 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -758,8 +863,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -767,23 +872,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(11) - true -> - state_comment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + update_next_state(13) + true -> + state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 11} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 13} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -791,32 +896,32 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(11) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(13) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(12) - + update_next_state(14) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -825,8 +930,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -836,16 +941,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -854,8 +959,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -864,22 +969,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(11) - true -> - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(13) + true -> + state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 12} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 14} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -887,39 +992,39 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(DataTable) |> AstBuilder.build() |> - update_next_state(13) - TokenMatcher.match?(DocStringSeparator , line, context) -> + update_next_state(15) + TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.start_rule(DocString) |> AstBuilder.build() |> - update_next_state(39) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(49) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(12) - + update_next_state(14) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -928,8 +1033,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -939,16 +1044,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -957,8 +1062,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -967,27 +1072,27 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(12) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(14) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(12) - true -> - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + update_next_state(14) + true -> + state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 13} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 15} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -996,23 +1101,30 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> - update_next_state(13) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(15) + TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.start_rule(DocString) |> + AstBuilder.build() |> + + update_next_state(16) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(12) - + update_next_state(14) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1020,10 +1132,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1033,8 +1145,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1045,8 +1157,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1054,8 +1166,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1065,8 +1177,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1076,58 +1188,181 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(15) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(15) + true -> + state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 16} = context) do + cond do +TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.build() |> + + update_next_state(17) + TokenMatcher.match?(Other , line, context) -> + TokenMatcher.parse(Other , line, context) |> + AstBuilder.build() |> + + update_next_state(16) + true -> + state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 17} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(14) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(18) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> + TokenMatcher.parse(ExamplesLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Examples) |> + AstBuilder.build() |> + update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(13) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(17) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(13) - true -> - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(17) + true -> + state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 14} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 18} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.build() |> - update_next_state(14) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(18) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Tags) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(19) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(14) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(18) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(14) - true -> - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + update_next_state(18) + true -> + state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 15} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 19} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1136,27 +1371,27 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(19) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(16) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(20) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(ExamplesTable) |> AstBuilder.build() |> - update_next_state(17) - + update_next_state(21) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1164,10 +1399,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1177,8 +1412,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1189,8 +1424,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1198,8 +1433,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1209,8 +1444,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -1220,23 +1455,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(16) - true -> - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + update_next_state(20) + true -> + state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 16} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 20} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1246,22 +1481,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(16) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(20) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesTable) |> AstBuilder.build() |> - update_next_state(17) - + update_next_state(21) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1270,10 +1505,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1284,8 +1519,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1297,8 +1532,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1307,8 +1542,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1319,8 +1554,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -1331,22 +1566,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(16) - true -> - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(20) + true -> + state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 17} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 21} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1356,15 +1591,15 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> - update_next_state(17) - + update_next_state(21) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1373,10 +1608,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1387,8 +1622,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1400,8 +1635,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1410,8 +1645,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1422,8 +1657,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -1434,93 +1669,93 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(17) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(21) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(17) - true -> - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + update_next_state(21) + true -> + state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 18} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 22} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Tags) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(22) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(18) - true -> - state_comment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" + update_next_state(22) + true -> + state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 19} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 23} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.end_rule(Rule) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(20) - TokenMatcher.match?(BackgroundLine , line, context) -> + update_next_state(24) + TokenMatcher.match?(BackgroundLine , line, context) -> TokenMatcher.parse(BackgroundLine , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.start_rule(Background) |> AstBuilder.build() |> - update_next_state(21) - + update_next_state(25) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.end_rule(Rule) |> @@ -1529,16 +1764,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.end_rule(Rule) |> @@ -1546,23 +1781,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(20) - true -> - state_comment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" + update_next_state(24) + true -> + state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 20} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 24} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> @@ -1570,23 +1805,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(20) - TokenMatcher.match?(BackgroundLine , line, context) -> + update_next_state(24) + TokenMatcher.match?(BackgroundLine , line, context) -> TokenMatcher.parse(BackgroundLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> AstBuilder.start_rule(Background) |> AstBuilder.build() |> - update_next_state(21) - + update_next_state(25) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> @@ -1594,8 +1829,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> @@ -1605,8 +1840,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> @@ -1614,8 +1849,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(RuleHeader) |> @@ -1624,57 +1859,57 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(20) - true -> - state_comment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(24) + true -> + state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 21} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 25} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Rule) |> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(21) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(25) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(22) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(26) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(23) - + update_next_state(27) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Rule) |> @@ -1683,16 +1918,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.start_rule(ScenarioDefinition) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Background) |> AstBuilder.end_rule(Rule) |> @@ -1700,23 +1935,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(22) - true -> - state_comment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" + update_next_state(26) + true -> + state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 22} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 26} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -1724,22 +1959,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(22) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(26) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(23) - + update_next_state(27) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -1747,8 +1982,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -1758,8 +1993,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -1767,8 +2002,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Background) |> @@ -1777,22 +2012,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(22) - true -> - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(26) + true -> + state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 23} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 27} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -1800,29 +2035,29 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(DataTable) |> AstBuilder.build() |> - update_next_state(24) - TokenMatcher.match?(DocStringSeparator , line, context) -> + update_next_state(28) + TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.start_rule(DocString) |> AstBuilder.build() |> - update_next_state(37) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(46) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(23) - + update_next_state(27) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -1830,8 +2065,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -1841,8 +2076,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -1850,8 +2085,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Background) |> @@ -1860,27 +2095,27 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(23) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(27) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(23) - true -> - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" + update_next_state(27) + true -> + state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 24} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 28} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1889,23 +2124,30 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> - update_next_state(24) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(28) + TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.start_rule(DocString) |> + AstBuilder.build() |> + + update_next_state(29) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(23) - + update_next_state(27) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1914,8 +2156,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1926,8 +2168,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1936,8 +2178,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -1947,58 +2189,159 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(24) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(28) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(24) - true -> - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(28) + true -> + state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 25} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 29} = context) do + cond do +TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.build() |> + + update_next_state(30) + TokenMatcher.match?(Other , line, context) -> + TokenMatcher.parse(Other , line, context) |> + AstBuilder.build() |> + + update_next_state(29) + true -> + state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 30} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(27) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(30) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(30) + true -> + state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 31} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Tags) |> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(32) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(31) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(25) - true -> - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + update_next_state(31) + true -> + state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 26} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 32} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -2006,36 +2349,36 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(32) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(27) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(33) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(28) - + update_next_state(34) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -2043,8 +2386,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -2054,15 +2397,15 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -2070,8 +2413,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Scenario) |> AstBuilder.end_rule(ScenarioDefinition) |> @@ -2080,23 +2423,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(27) - true -> - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + update_next_state(33) + true -> + state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 27} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 33} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -2105,32 +2448,32 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(27) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(33) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(28) - + update_next_state(34) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -2139,8 +2482,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -2151,16 +2494,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -2169,8 +2512,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Scenario) |> @@ -2180,22 +2523,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(27) - true -> - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(33) + true -> + state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 28} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 34} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -2204,39 +2547,39 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(DataTable) |> AstBuilder.build() |> - update_next_state(29) - TokenMatcher.match?(DocStringSeparator , line, context) -> + update_next_state(35) + TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.start_rule(DocString) |> AstBuilder.build() |> - update_next_state(35) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(43) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(28) - + update_next_state(34) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -2245,8 +2588,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -2257,16 +2600,16 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(ExamplesDefinition) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -2275,8 +2618,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Step) |> AstBuilder.end_rule(Scenario) |> @@ -2286,27 +2629,27 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(28) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(34) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(28) - true -> - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + update_next_state(34) + true -> + state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 29} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 35} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2316,23 +2659,30 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> - update_next_state(29) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(35) + TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.start_rule(DocString) |> + AstBuilder.build() |> + + update_next_state(36) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(28) - + update_next_state(34) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2340,10 +2690,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2353,8 +2703,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2366,8 +2716,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2375,8 +2725,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2386,8 +2736,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DataTable) |> AstBuilder.end_rule(Step) |> @@ -2398,58 +2748,184 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(29) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(35) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(29) - true -> - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(35) + true -> + state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 30} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 36} = context) do + cond do +TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.build() |> + + update_next_state(37) + TokenMatcher.match?(Other , line, context) -> + TokenMatcher.parse(Other , line, context) |> + AstBuilder.build() |> + + update_next_state(36) + true -> + state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 37} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(34) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(38) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> + TokenMatcher.parse(ExamplesLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Examples) |> + AstBuilder.build() |> + + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(37) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(37) + true -> + state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 38} = context) do cond do -TokenMatcher.match?(TagLine , line, context) -> +TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.build() |> - update_next_state(30) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(38) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Tags) |> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(39) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(30) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(38) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(30) - true -> - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + update_next_state(38) + true -> + state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 31} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 39} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2459,27 +2935,27 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(42) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(39) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(32) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(40) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.start_rule(ExamplesTable) |> AstBuilder.build() |> - update_next_state(33) - + update_next_state(41) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2487,10 +2963,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2500,8 +2976,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2513,8 +2989,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2522,8 +2998,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2533,8 +3009,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Examples) |> AstBuilder.end_rule(ExamplesDefinition) |> @@ -2545,23 +3021,23 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.start_rule(Description) |> AstBuilder.build() |> - update_next_state(32) - true -> - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + update_next_state(40) + true -> + state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 32} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 40} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2572,22 +3048,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(42) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(32) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(40) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.start_rule(ExamplesTable) |> AstBuilder.build() |> - update_next_state(33) - + update_next_state(41) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2596,10 +3072,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2610,8 +3086,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2624,8 +3100,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2634,8 +3110,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2646,8 +3122,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(Description) |> AstBuilder.end_rule(Examples) |> @@ -2659,22 +3135,22 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Other , line, context) -> + update_next_state(23) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(32) - true -> - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + update_next_state(40) + true -> + state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 33} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 41} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2685,15 +3161,15 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(TableRow , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> - update_next_state(33) - + update_next_state(41) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2702,10 +3178,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2716,8 +3192,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2730,8 +3206,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2740,8 +3216,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2752,8 +3228,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(ExamplesTable) |> AstBuilder.end_rule(Examples) |> @@ -2765,46 +3241,46 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(33) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(41) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(33) - true -> - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + update_next_state(41) + true -> + state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 35} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 43} = context) do cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> +TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.build() |> - update_next_state(36) - TokenMatcher.match?(Other , line, context) -> + update_next_state(44) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(35) - true -> - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + update_next_state(43) + true -> + state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 36} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 44} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2814,18 +3290,25 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.start_rule(DataTable) |> + AstBuilder.build() |> + + update_next_state(45) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(28) - + update_next_state(34) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2833,10 +3316,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(30) - + update_next_state(38) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2846,8 +3329,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2859,8 +3342,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2868,8 +3351,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(31) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2879,8 +3362,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2891,46 +3374,158 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(36) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(44) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(36) - true -> - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(44) + true -> + state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 37} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 45} = context) do cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> - TokenMatcher.parse(DocStringSeparator , line, context) |> +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> AstBuilder.build() |> + update_next_state(45) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(34) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + update_next_state(38) - TokenMatcher.match?(Other , line, context) -> + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> + TokenMatcher.parse(ExamplesLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Examples) |> + AstBuilder.build() |> + + update_next_state(39) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(45) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(45) + true -> + state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 46} = context) do + cond do +TokenMatcher.match?(DocStringSeparator , line, context) -> + TokenMatcher.parse(DocStringSeparator , line, context) |> + AstBuilder.build() |> + + update_next_state(47) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(37) - true -> - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + update_next_state(46) + true -> + state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 38} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 47} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2939,18 +3534,25 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.start_rule(DataTable) |> + AstBuilder.build() |> + + update_next_state(48) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(23) - + update_next_state(27) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2959,8 +3561,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(25) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2971,8 +3573,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2981,8 +3583,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(26) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -2992,46 +3594,133 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(38) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(47) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(38) - true -> - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(47) + true -> + state_comment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 39} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 48} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.build() |> + + update_next_state(48) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(27) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(31) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(32) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Rule) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(48) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(48) + true -> + state_comment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 49} = context) do cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> +TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.build() |> - update_next_state(40) - TokenMatcher.match?(Other , line, context) -> + update_next_state(50) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(39) - true -> - state_comment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + update_next_state(49) + true -> + state_comment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 40} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 50} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3040,18 +3729,25 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.start_rule(DataTable) |> + AstBuilder.build() |> + + update_next_state(51) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> AstBuilder.start_rule(Step) |> AstBuilder.build() |> - update_next_state(12) - + update_next_state(14) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3059,10 +3755,10 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(14) - + update_next_state(18) + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3072,8 +3768,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3084,8 +3780,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ExamplesLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> TokenMatcher.parse(ExamplesLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3093,8 +3789,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Examples) |> AstBuilder.build() |> - update_next_state(15) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(19) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3104,8 +3800,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3115,46 +3811,155 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(50) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(50) + true -> + state_comment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 51} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.build() |> + + update_next_state(51) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(14) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(1, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(18) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ExamplesLine , line, context) -> + TokenMatcher.parse(ExamplesLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(ExamplesDefinition) |> + AstBuilder.start_rule(Examples) |> + AstBuilder.build() |> + update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Scenario) |> + AstBuilder.end_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(40) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(51) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> - update_next_state(40) - true -> - state_comment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + update_next_state(51) + true -> + state_comment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 41} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 52} = context) do cond do -TokenMatcher.match?(DocStringSeparator , line, context) -> +TokenMatcher.match?(DocStringSeparator , line, context) -> TokenMatcher.parse(DocStringSeparator , line, context) |> AstBuilder.build() |> - update_next_state(42) - TokenMatcher.match?(Other , line, context) -> + update_next_state(53) + TokenMatcher.match?(Other , line, context) -> TokenMatcher.parse(Other , line, context) |> AstBuilder.build() |> - update_next_state(41) - true -> - state_comment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + update_next_state(52) + true -> + state_comment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] handle_error(context, line, expected_tokens, state_comment) end end - defp match_token(%Line{} = line, %ParserContext{state: 42} = context) do + defp match_token(%Line{} = line, %ParserContext{state: 53} = context) do cond do -TokenMatcher.match?(EOF , line, context) -> +TokenMatcher.match?(EOF , line, context) -> TokenMatcher.parse(EOF , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3162,8 +3967,15 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.end_rule(Feature) |> AstBuilder.build() |> - update_next_state(34) - TokenMatcher.match?(StepLine , line, context) -> + update_next_state(42) + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.end_rule(DocString) |> + AstBuilder.start_rule(DataTable) |> + AstBuilder.build() |> + + update_next_state(54) + TokenMatcher.match?(StepLine , line, context) -> TokenMatcher.parse(StepLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3171,9 +3983,9 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.build() |> update_next_state(7) - + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> - + TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3182,8 +3994,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(9) - TokenMatcher.match?(TagLine , line, context) -> + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> TokenMatcher.parse(TagLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3193,8 +4005,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Tags) |> AstBuilder.build() |> - update_next_state(18) - TokenMatcher.match?(ScenarioLine , line, context) -> + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> TokenMatcher.parse(ScenarioLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3203,8 +4015,8 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(Scenario) |> AstBuilder.build() |> - update_next_state(10) - TokenMatcher.match?(RuleLine , line, context) -> + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> TokenMatcher.parse(RuleLine , line, context) |> AstBuilder.end_rule(DocString) |> AstBuilder.end_rule(Step) |> @@ -3213,20 +4025,104 @@ TokenMatcher.match?(EOF , line, context) -> AstBuilder.start_rule(RuleHeader) |> AstBuilder.build() |> - update_next_state(19) - TokenMatcher.match?(Comment , line, context) -> + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> TokenMatcher.parse(Comment , line, context) |> AstBuilder.build() |> - update_next_state(42) - TokenMatcher.match?(Empty , line, context) -> + update_next_state(53) + TokenMatcher.match?(Empty , line, context) -> TokenMatcher.parse(Empty , line, context) |> AstBuilder.build() |> + update_next_state(53) + true -> + state_comment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + handle_error(context, line, expected_tokens, state_comment) + end + end + + defp match_token(%Line{} = line, %ParserContext{state: 54} = context) do + cond do +TokenMatcher.match?(EOF , line, context) -> + TokenMatcher.parse(EOF , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.end_rule(Feature) |> + AstBuilder.build() |> + update_next_state(42) - true -> - state_comment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + TokenMatcher.match?(TableRow , line, context) -> + TokenMatcher.parse(TableRow , line, context) |> + AstBuilder.build() |> + + update_next_state(54) + TokenMatcher.match?(StepLine , line, context) -> + TokenMatcher.parse(StepLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.start_rule(Step) |> + AstBuilder.build() |> + + update_next_state(7) + + TokenMatcher.match?(TagLine , line, context) and (lookahead?(0, line, context) |> Map.fetch!(:match?) == true) -> + + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(11) + TokenMatcher.match?(TagLine , line, context) -> + TokenMatcher.parse(TagLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.start_rule(Tags) |> + AstBuilder.build() |> + + update_next_state(22) + TokenMatcher.match?(ScenarioLine , line, context) -> + TokenMatcher.parse(ScenarioLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(ScenarioDefinition) |> + AstBuilder.start_rule(Scenario) |> + AstBuilder.build() |> + + update_next_state(12) + TokenMatcher.match?(RuleLine , line, context) -> + TokenMatcher.parse(RuleLine , line, context) |> + AstBuilder.end_rule(DataTable) |> + AstBuilder.end_rule(Step) |> + AstBuilder.end_rule(Background) |> + AstBuilder.start_rule(Rule) |> + AstBuilder.start_rule(RuleHeader) |> + AstBuilder.build() |> + + update_next_state(23) + TokenMatcher.match?(Comment , line, context) -> + TokenMatcher.parse(Comment , line, context) |> + AstBuilder.build() |> + + update_next_state(54) + TokenMatcher.match?(Empty , line, context) -> + TokenMatcher.parse(Empty , line, context) |> + AstBuilder.build() |> + + update_next_state(54) + true -> + state_comment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] handle_error(context, line, expected_tokens, state_comment) end end diff --git a/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex b/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex index 73f0519b0..a68fe26f7 100644 --- a/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex +++ b/elixir/lib/gherkin/pickle_compiler/pickle_compiler.ex @@ -9,6 +9,7 @@ defmodule CucumberGherkin.PickleCompiler do alias CucumberMessages.Pickle, as: PickleMessage alias CucumberMessages.Pickle.PickleStep, as: PickleStepMessage alias CucumberMessages.Pickle.PickleTag, as: PickleTagMessage + alias CucumberMessages.PickleStepArgument, as: PickleStepArgumentMessage alias CucumberMessages.GherkinDocument.Feature.Tag, as: TagMessage alias CucumberMessages.GherkinDocument.Feature.FeatureChild, as: FeatureChildMessage alias CucumberMessages.GherkinDocument.Feature.FeatureChild.Rule, as: RuleMessage @@ -237,34 +238,32 @@ defmodule CucumberGherkin.PickleCompiler do defp add_ast_node_id(%PickleStepMessage{ast_node_ids: ids} = m, %TableRowMessage{} = row), do: %{m | ast_node_ids: ids ++ [row.id]} - defp add_datatable(%PickleStepMessage{} = m, %StepMessage{argument: nil}, _, _), do: m - - defp add_datatable(%PickleStepMessage{} = m, %StepMessage{argument: {:doc_string, _}}, _, _), + defp add_datatable(%PickleStepMessage{} = m, %StepMessage{data_table: nil}, _, _), do: m defp add_datatable( %PickleStepMessage{} = m, - %StepMessage{argument: {:data_table, d}}, + %StepMessage{data_table: d}, variable_cells, value_cells ) do result = pickle_data_table_creator(d, variable_cells, value_cells) - %{m | argument: result} + argument = m.argument || %PickleStepArgumentMessage{} + %{m | argument: %{argument | data_table: result}} end - defp add_doc_string(%PickleStepMessage{} = m, %StepMessage{argument: nil}, _, _), do: m - - defp add_doc_string(%PickleStepMessage{} = m, %StepMessage{argument: {:data_table, _}}, _, _), + defp add_doc_string(%PickleStepMessage{} = m, %StepMessage{doc_string: nil}, _, _), do: m defp add_doc_string( %PickleStepMessage{} = m, - %StepMessage{argument: {:doc_string, d}}, + %StepMessage{doc_string: d}, variable_cells, value_cells ) do result = pickle_doc_string_creator(d, variable_cells, value_cells) - %{m | argument: result} + argument = m.argument || %PickleStepArgumentMessage{} + %{m | argument: %{argument | doc_string: result}} end defp get_id_and_update_compiler_acc(%@me{id_gen: gen} = compiler_acc) do diff --git a/gherkin.berp b/gherkin.berp index 1b97fce01..dfe2f974d 100644 --- a/gherkin.berp +++ b/gherkin.berp @@ -25,7 +25,9 @@ Examples! := #ExamplesLine DescriptionHelper ExamplesTable? ExamplesTable! := #TableRow #TableRow* Step! := #StepLine StepArg? -StepArg := (DataTable | DocString) +StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) +DataTableAndMaybeDocString := DataTable DocString? +DocStringAndMaybeDataTable := DocString DataTable? DataTable! := #TableRow+ DocString! := #DocStringSeparator #Other* #DocStringSeparator diff --git a/go/astbuilder.go b/go/astbuilder.go index a44f3d694..3e4fd2ff1 100644 --- a/go/astbuilder.go +++ b/go/astbuilder.go @@ -149,11 +149,10 @@ func (t *astBuilder) transformNode(node *astNode) (interface{}, error) { dataTable := node.getSingle(RuleTypeDataTable, nil) if dataTable != nil { step.DataTable = dataTable.(*messages.DataTable) - } else { - docString := node.getSingle(RuleTypeDocString, nil) - if docString != nil { - step.DocString = docString.(*messages.DocString) - } + } + docString := node.getSingle(RuleTypeDocString, nil) + if docString != nil { + step.DocString = docString.(*messages.DocString) } return step, nil diff --git a/go/parser.go b/go/parser.go index c619dc6a6..86e7f556f 100644 --- a/go/parser.go +++ b/go/parser.go @@ -131,6 +131,8 @@ const ( RuleTypeExamplesTable RuleTypeStep RuleTypeStepArg + RuleTypeDataTableAndMaybeDocString + RuleTypeDocStringAndMaybeDataTable RuleTypeDataTable RuleTypeDocString RuleTypeTags @@ -197,6 +199,10 @@ func (t RuleType) Name() string { return "Step" case RuleTypeStepArg: return "StepArg" + case RuleTypeDataTableAndMaybeDocString: + return "DataTableAndMaybeDocString" + case RuleTypeDocStringAndMaybeDataTable: + return "DocStringAndMaybeDataTable" case RuleTypeDataTable: return "DataTable" case RuleTypeDocString: @@ -393,6 +399,8 @@ func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) return ctxt.matchAt32(line) case 33: return ctxt.matchAt33(line) + case 34: + return ctxt.matchAt34(line) case 35: return ctxt.matchAt35(line) case 36: @@ -407,8 +415,30 @@ func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) return ctxt.matchAt40(line) case 41: return ctxt.matchAt41(line) - case 42: - return ctxt.matchAt42(line) + case 43: + return ctxt.matchAt43(line) + case 44: + return ctxt.matchAt44(line) + case 45: + return ctxt.matchAt45(line) + case 46: + return ctxt.matchAt46(line) + case 47: + return ctxt.matchAt47(line) + case 48: + return ctxt.matchAt48(line) + case 49: + return ctxt.matchAt49(line) + case 50: + return ctxt.matchAt50(line) + case 51: + return ctxt.matchAt51(line) + case 52: + return ctxt.matchAt52(line) + case 53: + return ctxt.matchAt53(line) + case 54: + return ctxt.matchAt54(line) default: return state, fmt.Errorf("Unknown state: %+v", state) } @@ -418,7 +448,7 @@ func (ctxt *parseContext) match(state int, line *Line) (newState int, err error) func (ctxt *parseContext) matchAt0(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchLanguage(line); ok { ctxt.startRule(RuleTypeFeature) @@ -548,7 +578,7 @@ func (ctxt *parseContext) matchAt3(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeFeatureHeader) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) @@ -571,7 +601,7 @@ func (ctxt *parseContext) matchAt3(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -580,21 +610,21 @@ func (ctxt *parseContext) matchAt3(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeFeatureHeader) ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeFeatureHeader) ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) @@ -627,7 +657,7 @@ func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeFeatureHeader) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) @@ -647,7 +677,7 @@ func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -657,7 +687,7 @@ func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -665,7 +695,7 @@ func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -673,7 +703,7 @@ func (ctxt *parseContext) matchAt4(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) @@ -704,7 +734,7 @@ func (ctxt *parseContext) matchAt5(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) @@ -726,7 +756,7 @@ func (ctxt *parseContext) matchAt5(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -735,21 +765,21 @@ func (ctxt *parseContext) matchAt5(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeBackground) ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeBackground) ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) @@ -782,7 +812,7 @@ func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) @@ -801,7 +831,7 @@ func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -811,7 +841,7 @@ func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -819,7 +849,7 @@ func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -827,7 +857,7 @@ func (ctxt *parseContext) matchAt6(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) @@ -859,7 +889,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeDataTable) @@ -869,7 +899,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.startRule(RuleTypeDocString) ctxt.build(token) - return 41, err + return 52, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -884,7 +914,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -894,7 +924,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -902,7 +932,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -910,7 +940,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) @@ -939,7 +969,7 @@ func (ctxt *parseContext) matchAt7(line *Line) (newState int, err error) { return 7, err } -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -947,12 +977,18 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) return 8, err } + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.startRule(RuleTypeDocString) + ctxt.build(token) + return 9, err + } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) @@ -968,7 +1004,7 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -979,7 +1015,7 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -988,7 +1024,7 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -997,7 +1033,7 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) @@ -1008,8 +1044,8 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { return 8, err } - // var stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -1026,28 +1062,140 @@ func (ctxt *parseContext) matchAt8(line *Line) (newState int, err error) { return 8, err } -// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 func (ctxt *parseContext) matchAt9(line *Line) (newState int, err error) { - if ok, token, err := ctxt.matchTagLine(line); ok { + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.build(token) + return 10, err + } + if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) return 9, err } + + // var stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + var expectedTokens = []string{"#DocStringSeparator", "#Other"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 9, err +} + +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 7, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 11, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } if ok, token, err := ctxt.matchScenarioLine(line); ok { - ctxt.endRule(RuleTypeTags) + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 12, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 10, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) return 10, err } + + // var stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 10, err +} + +// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 +func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.build(token) + return 11, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeTags) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 12, err + } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 9, err + return 11, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 9, err + return 11, err } - // var stateComment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + // var stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -1062,38 +1210,38 @@ func (ctxt *parseContext) matchAt9(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 9, err + return 11, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeScenario) ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 11, err + return 13, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1103,7 +1251,7 @@ func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1113,13 +1261,13 @@ func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeScenario) @@ -1127,7 +1275,7 @@ func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeScenario) @@ -1135,15 +1283,15 @@ func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 11, err + return 13, err } - // var stateComment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + // var stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -1158,28 +1306,28 @@ func (ctxt *parseContext) matchAt10(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 10, err + return 12, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeScenario) ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 11, err + return 13, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1187,7 +1335,7 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1198,7 +1346,7 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1209,14 +1357,14 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -1225,7 +1373,7 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -1234,14 +1382,14 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 11, err + return 13, err } - // var stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -1256,34 +1404,34 @@ func (ctxt *parseContext) matchAt11(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 11, err + return 13, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt14(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeStep) ctxt.endRule(RuleTypeScenario) ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeDataTable) ctxt.build(token) - return 13, err + return 15, err } if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.startRule(RuleTypeDocString) ctxt.build(token) - return 39, err + return 49, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1291,7 +1439,7 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1302,7 +1450,7 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1313,14 +1461,14 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -1329,7 +1477,7 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -1338,18 +1486,18 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 12, err + return 14, err } - // var stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + // var stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -1364,11 +1512,11 @@ func (ctxt *parseContext) matchAt12(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 12, err + return 14, err } -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) @@ -1376,18 +1524,24 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) - return 13, err + return 15, err + } + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.startRule(RuleTypeDocString) + ctxt.build(token) + return 16, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1396,7 +1550,7 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1408,7 +1562,7 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1420,7 +1574,7 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -1428,7 +1582,7 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -1438,7 +1592,7 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -1448,19 +1602,154 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 15, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 15, err + } + + // var stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 15, err +} + +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.build(token) + return 17, err + } + if ok, token, err := ctxt.matchOther(line); ok { + ctxt.build(token) + return 16, err + } + + // var stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + var expectedTokens = []string{"#DocStringSeparator", "#Other"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 16, err +} + +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 14, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead1(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 18, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 11, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchExamplesLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeExamples) + ctxt.build(token) return 19, err } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 12, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 13, err + return 17, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 13, err + return 17, err } - // var stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -1474,31 +1763,31 @@ func (ctxt *parseContext) matchAt13(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 13, err + return 17, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt14(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt18(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchTagLine(line); ok { ctxt.build(token) - return 14, err + return 18, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeTags) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 14, err + return 18, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 14, err + return 18, err } - // var stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + // var stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -1513,11 +1802,11 @@ func (ctxt *parseContext) matchAt14(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 14, err + return 18, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeExamples) ctxt.endRule(RuleTypeExamplesDefinition) @@ -1525,21 +1814,21 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 16, err + return 20, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeExamplesTable) ctxt.build(token) - return 17, err + return 21, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1548,7 +1837,7 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1560,7 +1849,7 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1572,7 +1861,7 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -1580,7 +1869,7 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -1590,7 +1879,7 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -1600,15 +1889,15 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 16, err + return 20, err } - // var stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + // var stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -1623,11 +1912,11 @@ func (ctxt *parseContext) matchAt15(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 15, err + return 19, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeExamples) @@ -1636,17 +1925,17 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 16, err + return 20, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeExamplesTable) ctxt.build(token) - return 17, err + return 21, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1656,7 +1945,7 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1669,7 +1958,7 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1682,7 +1971,7 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -1691,7 +1980,7 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -1702,7 +1991,7 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -1713,14 +2002,14 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 16, err + return 20, err } - // var stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -1735,11 +2024,11 @@ func (ctxt *parseContext) matchAt16(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 16, err + return 20, err } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeExamplesTable) ctxt.endRule(RuleTypeExamples) @@ -1748,11 +2037,11 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) - return 17, err + return 21, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -1762,7 +2051,7 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1775,7 +2064,7 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1788,7 +2077,7 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -1797,7 +2086,7 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -1808,7 +2097,7 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -1819,18 +2108,18 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 17, err + return 21, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 17, err + return 21, err } - // var stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + // var stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -1845,30 +2134,30 @@ func (ctxt *parseContext) matchAt17(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 17, err + return 21, err } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt18(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchTagLine(line); ok { ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeTags) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 18, err + return 22, err } - // var stateComment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" + // var stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" var expectedTokens = []string{"#TagLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -1883,32 +2172,32 @@ func (ctxt *parseContext) matchAt18(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 18, err + return 22, err } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 -func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeRuleHeader) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 20, err + return 24, err } if ok, token, err := ctxt.matchBackgroundLine(line); ok { ctxt.endRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeBackground) ctxt.build(token) - return 21, err + return 25, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -1916,7 +2205,7 @@ func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -1926,14 +2215,14 @@ func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeRuleHeader) @@ -1941,15 +2230,15 @@ func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 20, err + return 24, err } - // var stateComment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" + // var stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -1964,29 +2253,29 @@ func (ctxt *parseContext) matchAt19(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 19, err + return 23, err } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeRuleHeader) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 20, err + return 24, err } if ok, token, err := ctxt.matchBackgroundLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeBackground) ctxt.build(token) - return 21, err + return 25, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -1995,7 +2284,7 @@ func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2006,7 +2295,7 @@ func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2014,7 +2303,7 @@ func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2023,14 +2312,14 @@ func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 20, err + return 24, err } - // var stateComment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -2045,31 +2334,31 @@ func (ctxt *parseContext) matchAt20(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 20, err + return 24, err } // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 -func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt25(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 21, err + return 25, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 22, err + return 26, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -2077,7 +2366,7 @@ func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2087,14 +2376,14 @@ func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeBackground) ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeBackground) @@ -2102,15 +2391,15 @@ func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 22, err + return 26, err } - // var stateComment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" + // var stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -2125,28 +2414,28 @@ func (ctxt *parseContext) matchAt21(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 21, err + return 25, err } // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 22, err + return 26, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -2155,7 +2444,7 @@ func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2166,7 +2455,7 @@ func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2174,7 +2463,7 @@ func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2183,14 +2472,14 @@ func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 22, err + return 26, err } - // var stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -2205,34 +2494,34 @@ func (ctxt *parseContext) matchAt22(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 22, err + return 26, err } // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeStep) ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeDataTable) ctxt.build(token) - return 24, err + return 28, err } if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.startRule(RuleTypeDocString) ctxt.build(token) - return 37, err + return 46, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -2241,7 +2530,7 @@ func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2252,7 +2541,7 @@ func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -2260,7 +2549,7 @@ func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -2269,18 +2558,18 @@ func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 23, err + return 27, err } - // var stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" + // var stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -2295,11 +2584,11 @@ func (ctxt *parseContext) matchAt23(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 23, err + return 27, err } -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) @@ -2307,18 +2596,24 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) - return 24, err + return 28, err + } + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.startRule(RuleTypeDocString) + ctxt.build(token) + return 29, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -2328,7 +2623,7 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2340,7 +2635,7 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -2349,7 +2644,7 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -2359,19 +2654,19 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 24, err + return 28, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 24, err + return 28, err } - // var stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -2385,31 +2680,146 @@ func (ctxt *parseContext) matchAt24(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 24, err + return 28, err +} + +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.build(token) + return 30, err + } + if ok, token, err := ctxt.matchOther(line); ok { + ctxt.build(token) + return 29, err + } + + // var stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + var expectedTokens = []string{"#DocStringSeparator", "#Other"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 29, err +} + +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt30(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 27, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 31, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 32, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 30, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 30, err + } + + // var stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 30, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt25(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchTagLine(line); ok { ctxt.build(token) - return 25, err + return 31, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeTags) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 25, err + return 31, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 25, err + return 31, err } - // var stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + // var stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" var expectedTokens = []string{"#TagLine", "#ScenarioLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -2424,39 +2834,39 @@ func (ctxt *parseContext) matchAt25(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 25, err + return 31, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeScenario) ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 27, err + return 33, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2466,7 +2876,7 @@ func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2477,13 +2887,13 @@ func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeScenario) @@ -2491,7 +2901,7 @@ func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeScenario) @@ -2500,15 +2910,15 @@ func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 27, err + return 33, err } - // var stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + // var stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -2523,11 +2933,11 @@ func (ctxt *parseContext) matchAt26(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 26, err + return 32, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeScenario) @@ -2535,17 +2945,17 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 27, err + return 33, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -2553,7 +2963,7 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2564,7 +2974,7 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2576,14 +2986,14 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2592,7 +3002,7 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -2602,14 +3012,14 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 27, err + return 33, err } - // var stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -2624,11 +3034,11 @@ func (ctxt *parseContext) matchAt27(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 27, err + return 33, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt34(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeStep) ctxt.endRule(RuleTypeScenario) @@ -2636,23 +3046,23 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeDataTable) ctxt.build(token) - return 29, err + return 35, err } if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.startRule(RuleTypeDocString) ctxt.build(token) - return 35, err + return 43, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -2660,7 +3070,7 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2671,7 +3081,7 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2683,14 +3093,14 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -2699,7 +3109,7 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeStep) @@ -2709,18 +3119,18 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 28, err + return 34, err } - // var stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + // var stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -2735,11 +3145,11 @@ func (ctxt *parseContext) matchAt28(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 28, err + return 34, err } -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt35(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) @@ -2748,18 +3158,24 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) - return 29, err + return 35, err + } + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.startRule(RuleTypeDocString) + ctxt.build(token) + return 36, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDataTable) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -2768,7 +3184,7 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2780,7 +3196,7 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2793,7 +3209,7 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -2801,7 +3217,7 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -2811,7 +3227,7 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDataTable) @@ -2822,19 +3238,19 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 29, err + return 35, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 29, err + return 35, err } - // var stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -2848,31 +3264,169 @@ func (ctxt *parseContext) matchAt29(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 29, err + return 35, err +} + +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchDocStringSeparator(line); ok { + ctxt.build(token) + return 37, err + } + if ok, token, err := ctxt.matchOther(line); ok { + ctxt.build(token) + return 36, err + } + + // var stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + var expectedTokens = []string{"#DocStringSeparator", "#Other"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 36, err +} + +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt37(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 34, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead1(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 38, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 31, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchExamplesLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeExamples) + ctxt.build(token) + return 39, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 32, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 37, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 37, err + } + + // var stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 37, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -func (ctxt *parseContext) matchAt30(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchTagLine(line); ok { ctxt.build(token) - return 30, err + return 38, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeTags) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 30, err + return 38, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 30, err + return 38, err } - // var stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + // var stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" var expectedTokens = []string{"#TagLine", "#ExamplesLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -2887,11 +3441,11 @@ func (ctxt *parseContext) matchAt30(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 30, err + return 38, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt39(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeExamples) ctxt.endRule(RuleTypeExamplesDefinition) @@ -2900,21 +3454,21 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 32, err + return 40, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.startRule(RuleTypeExamplesTable) ctxt.build(token) - return 33, err + return 41, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -2923,7 +3477,7 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2935,7 +3489,7 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -2948,7 +3502,7 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -2956,7 +3510,7 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -2966,7 +3520,7 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeExamples) @@ -2977,15 +3531,15 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.startRule(RuleTypeDescription) ctxt.build(token) - return 32, err + return 40, err } - // var stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + // var stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" var expectedTokens = []string{"#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -3000,11 +3554,11 @@ func (ctxt *parseContext) matchAt31(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 31, err + return 39, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.endRule(RuleTypeExamples) @@ -3014,17 +3568,17 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 32, err + return 40, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.endRule(RuleTypeDescription) ctxt.startRule(RuleTypeExamplesTable) ctxt.build(token) - return 33, err + return 41, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -3034,7 +3588,7 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3047,7 +3601,7 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3061,7 +3615,7 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -3070,7 +3624,7 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -3081,7 +3635,7 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDescription) @@ -3093,14 +3647,14 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 32, err + return 40, err } - // var stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + // var stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" var expectedTokens = []string{"#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"} if line.IsEof() { err = &parseError{ @@ -3115,11 +3669,11 @@ func (ctxt *parseContext) matchAt32(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 32, err + return 40, err } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { +func (ctxt *parseContext) matchAt41(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeExamplesTable) ctxt.endRule(RuleTypeExamples) @@ -3129,11 +3683,11 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err } if ok, token, err := ctxt.matchTableRow(line); ok { ctxt.build(token) - return 33, err + return 41, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -3143,7 +3697,7 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3156,7 +3710,7 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3170,7 +3724,7 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -3179,7 +3733,7 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -3190,7 +3744,7 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeExamplesTable) @@ -3202,18 +3756,18 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 33, err + return 41, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 33, err + return 41, err } - // var stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + // var stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" var expectedTokens = []string{"#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ @@ -3228,21 +3782,21 @@ func (ctxt *parseContext) matchAt33(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 33, err + return 41, err } -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt35(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt43(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.build(token) - return 36, err + return 44, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 35, err + return 43, err } - // var stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + // var stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" var expectedTokens = []string{"#DocStringSeparator", "#Other"} if line.IsEof() { err = &parseError{ @@ -3257,11 +3811,11 @@ func (ctxt *parseContext) matchAt35(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 35, err + return 43, err } -// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt44(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) @@ -3270,14 +3824,20 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.startRule(RuleTypeDataTable) + ctxt.build(token) + return 45, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 28, err + return 34, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -3286,7 +3846,7 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 30, err + return 38, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3298,7 +3858,7 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3311,7 +3871,7 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3319,7 +3879,7 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 31, err + return 39, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3329,7 +3889,7 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3340,19 +3900,19 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 36, err + return 44, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 36, err + return 44, err } - // var stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -3366,21 +3926,134 @@ func (ctxt *parseContext) matchAt36(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 36, err + return 44, err } -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt37(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt45(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.build(token) + return 45, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 34, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead1(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 38, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 31, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchExamplesLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeExamples) + ctxt.build(token) + return 39, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 32, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 45, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 45, err + } + + // var stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 45, err +} + +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt46(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.build(token) - return 38, err + return 47, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 37, err + return 46, err } - // var stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + // var stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" var expectedTokens = []string{"#DocStringSeparator", "#Other"} if line.IsEof() { err = &parseError{ @@ -3395,11 +4068,11 @@ func (ctxt *parseContext) matchAt37(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 37, err + return 46, err } -// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt47(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) @@ -3407,14 +4080,20 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeRule) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.startRule(RuleTypeDataTable) + ctxt.build(token) + return 48, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 23, err + return 27, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead0(line) { @@ -3424,7 +4103,7 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 25, err + return 31, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3436,7 +4115,7 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3445,7 +4124,7 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 26, err + return 32, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3455,19 +4134,19 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 38, err + return 47, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 38, err + return 47, err } - // var stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -3481,21 +4160,111 @@ func (ctxt *parseContext) matchAt38(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 38, err + return 47, err } -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt39(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt48(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.build(token) + return 48, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 27, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 31, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 32, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeRule) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 48, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 48, err + } + + // var stateComment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 48, err +} + +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt49(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.build(token) - return 40, err + return 50, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 39, err + return 49, err } - // var stateComment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + // var stateComment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" var expectedTokens = []string{"#DocStringSeparator", "#Other"} if line.IsEof() { err = &parseError{ @@ -3510,11 +4279,11 @@ func (ctxt *parseContext) matchAt39(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 39, err + return 49, err } -// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt50(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) @@ -3522,14 +4291,20 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.endRule(RuleTypeScenarioDefinition) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.startRule(RuleTypeDataTable) + ctxt.build(token) + return 51, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) ctxt.startRule(RuleTypeStep) ctxt.build(token) - return 12, err + return 14, err } if ok, token, err := ctxt.matchTagLine(line); ok { if ctxt.lookahead1(line) { @@ -3538,7 +4313,7 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 14, err + return 18, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3550,7 +4325,7 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3562,7 +4337,7 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchExamplesLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3570,7 +4345,7 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeExamplesDefinition) ctxt.startRule(RuleTypeExamples) ctxt.build(token) - return 15, err + return 19, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3580,7 +4355,7 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3590,19 +4365,129 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 50, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 50, err + } + + // var stateComment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 50, err +} + +// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt51(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.endRule(RuleTypeFeature) + ctxt.build(token) + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.build(token) + return 51, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 14, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead1(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 18, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 11, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchExamplesLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeExamplesDefinition) + ctxt.startRule(RuleTypeExamples) + ctxt.build(token) return 19, err } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 12, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeScenario) + ctxt.endRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 40, err + return 51, err } if ok, token, err := ctxt.matchEmpty(line); ok { ctxt.build(token) - return 40, err + return 51, err } - // var stateComment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -3616,21 +4501,21 @@ func (ctxt *parseContext) matchAt40(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 40, err + return 51, err } -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt41(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt52(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchDocStringSeparator(line); ok { ctxt.build(token) - return 42, err + return 53, err } if ok, token, err := ctxt.matchOther(line); ok { ctxt.build(token) - return 41, err + return 52, err } - // var stateComment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + // var stateComment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" var expectedTokens = []string{"#DocStringSeparator", "#Other"} if line.IsEof() { err = &parseError{ @@ -3645,18 +4530,24 @@ func (ctxt *parseContext) matchAt41(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 41, err + return 52, err } -// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +func (ctxt *parseContext) matchAt53(line *Line) (newState int, err error) { if ok, token, err := ctxt.matchEOF(line); ok { ctxt.endRule(RuleTypeDocString) ctxt.endRule(RuleTypeStep) ctxt.endRule(RuleTypeBackground) ctxt.endRule(RuleTypeFeature) ctxt.build(token) - return 34, err + return 42, err + } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.endRule(RuleTypeDocString) + ctxt.startRule(RuleTypeDataTable) + ctxt.build(token) + return 54, err } if ok, token, err := ctxt.matchStepLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3673,7 +4564,7 @@ func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 9, err + return 11, err } } if ok, token, err := ctxt.matchTagLine(line); ok { @@ -3684,7 +4575,7 @@ func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRuleHeader) ctxt.startRule(RuleTypeTags) ctxt.build(token) - return 18, err + return 22, err } if ok, token, err := ctxt.matchScenarioLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3693,7 +4584,7 @@ func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeScenarioDefinition) ctxt.startRule(RuleTypeScenario) ctxt.build(token) - return 10, err + return 12, err } if ok, token, err := ctxt.matchRuleLine(line); ok { ctxt.endRule(RuleTypeDocString) @@ -3702,19 +4593,106 @@ func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { ctxt.startRule(RuleTypeRule) ctxt.startRule(RuleTypeRuleHeader) ctxt.build(token) - return 19, err + return 23, err } if ok, token, err := ctxt.matchComment(line); ok { ctxt.build(token) - return 42, err + return 53, err } if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 53, err + } + + // var stateComment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + if line.IsEof() { + err = &parseError{ + msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), + loc: &Location{Line: line.LineNumber, Column: 0}, + } + } else { + err = &parseError{ + msg: fmt.Sprintf("expected: %s, got '%s'", strings.Join(expectedTokens, ", "), line.LineText), + loc: &Location{Line: line.LineNumber, Column: line.Indent() + 1}, + } + } + // if (ctxt.p.stopAtFirstError) throw error; + //ctxt.addError(err) + return 53, err +} + +// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +func (ctxt *parseContext) matchAt54(line *Line) (newState int, err error) { + if ok, token, err := ctxt.matchEOF(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.endRule(RuleTypeFeature) ctxt.build(token) return 42, err } + if ok, token, err := ctxt.matchTableRow(line); ok { + ctxt.build(token) + return 54, err + } + if ok, token, err := ctxt.matchStepLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.startRule(RuleTypeStep) + ctxt.build(token) + return 7, err + } + if ok, token, err := ctxt.matchTagLine(line); ok { + if ctxt.lookahead0(line) { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 11, err + } + } + if ok, token, err := ctxt.matchTagLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.startRule(RuleTypeTags) + ctxt.build(token) + return 22, err + } + if ok, token, err := ctxt.matchScenarioLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeScenarioDefinition) + ctxt.startRule(RuleTypeScenario) + ctxt.build(token) + return 12, err + } + if ok, token, err := ctxt.matchRuleLine(line); ok { + ctxt.endRule(RuleTypeDataTable) + ctxt.endRule(RuleTypeStep) + ctxt.endRule(RuleTypeBackground) + ctxt.startRule(RuleTypeRule) + ctxt.startRule(RuleTypeRuleHeader) + ctxt.build(token) + return 23, err + } + if ok, token, err := ctxt.matchComment(line); ok { + ctxt.build(token) + return 54, err + } + if ok, token, err := ctxt.matchEmpty(line); ok { + ctxt.build(token) + return 54, err + } - // var stateComment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - var expectedTokens = []string{"#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} + // var stateComment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + var expectedTokens = []string{"#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"} if line.IsEof() { err = &parseError{ msg: fmt.Sprintf("unexpected end of file, expected: %s", strings.Join(expectedTokens, ", ")), @@ -3728,7 +4706,7 @@ func (ctxt *parseContext) matchAt42(line *Line) (newState int, err error) { } // if (ctxt.p.stopAtFirstError) throw error; //ctxt.addError(err) - return 42, err + return 54, err } type Matcher interface { diff --git a/go/pickles.go b/go/pickles.go index af167c427..866591974 100644 --- a/go/pickles.go +++ b/go/pickles.go @@ -225,15 +225,15 @@ func pickleStep( if valuesRow != nil { pickleStep.AstNodeIds = append(pickleStep.AstNodeIds, valuesRow.Id) } - if step.DataTable != nil { - pickleStep.Argument = &messages.PickleStepArgument{ - DataTable: pickleDataTable(step.DataTable, variableCells, valueCells), + if step.DataTable != nil || step.DocString != nil { + argument := &messages.PickleStepArgument{} + if step.DataTable != nil { + argument.DataTable = pickleDataTable(step.DataTable, variableCells, valueCells) } - } - if step.DocString != nil { - pickleStep.Argument = &messages.PickleStepArgument{ - DocString: pickleDocString(step.DocString, variableCells, valueCells), + if step.DocString != nil { + argument.DocString = pickleDocString(step.DocString, variableCells, valueCells) } + pickleStep.Argument = argument } return pickleStep } diff --git a/java/src/main/java/io/cucumber/gherkin/Parser.java b/java/src/main/java/io/cucumber/gherkin/Parser.java index f599623ef..a028eda02 100644 --- a/java/src/main/java/io/cucumber/gherkin/Parser.java +++ b/java/src/main/java/io/cucumber/gherkin/Parser.java @@ -220,6 +220,7 @@ private int matchToken(int state, Token token, ParserContext context) { case 31 -> matchTokenAt_31(token, context); case 32 -> matchTokenAt_32(token, context); case 33 -> matchTokenAt_33(token, context); + case 34 -> matchTokenAt_34(token, context); case 35 -> matchTokenAt_35(token, context); case 36 -> matchTokenAt_36(token, context); case 37 -> matchTokenAt_37(token, context); @@ -227,7 +228,18 @@ private int matchToken(int state, Token token, ParserContext context) { case 39 -> matchTokenAt_39(token, context); case 40 -> matchTokenAt_40(token, context); case 41 -> matchTokenAt_41(token, context); - case 42 -> matchTokenAt_42(token, context); + case 43 -> matchTokenAt_43(token, context); + case 44 -> matchTokenAt_44(token, context); + case 45 -> matchTokenAt_45(token, context); + case 46 -> matchTokenAt_46(token, context); + case 47 -> matchTokenAt_47(token, context); + case 48 -> matchTokenAt_48(token, context); + case 49 -> matchTokenAt_49(token, context); + case 50 -> matchTokenAt_50(token, context); + case 51 -> matchTokenAt_51(token, context); + case 52 -> matchTokenAt_52(token, context); + case 53 -> matchTokenAt_53(token, context); + case 54 -> matchTokenAt_54(token, context); default -> { throw new IllegalStateException("Unknown state: " + state); } @@ -240,7 +252,7 @@ private int matchTokenAt_0(Token token, ParserContext context) { if (match_EOF(context, token)) { build(context, token); - return 34; + return 42; } if (match_Language(context, token)) { @@ -360,7 +372,7 @@ private int matchTokenAt_3(Token token, ParserContext context) { endRule(context, RuleType.FeatureHeader); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { @@ -388,7 +400,7 @@ private int matchTokenAt_3(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -398,7 +410,7 @@ private int matchTokenAt_3(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -406,7 +418,7 @@ private int matchTokenAt_3(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -414,7 +426,7 @@ private int matchTokenAt_3(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { @@ -441,7 +453,7 @@ private int matchTokenAt_4(Token token, ParserContext context) { endRule(context, RuleType.FeatureHeader); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { @@ -465,7 +477,7 @@ private int matchTokenAt_4(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -476,7 +488,7 @@ private int matchTokenAt_4(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -485,7 +497,7 @@ private int matchTokenAt_4(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -494,7 +506,7 @@ private int matchTokenAt_4(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { @@ -519,7 +531,7 @@ private int matchTokenAt_5(Token token, ParserContext context) { endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { @@ -546,7 +558,7 @@ private int matchTokenAt_5(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -556,7 +568,7 @@ private int matchTokenAt_5(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -564,7 +576,7 @@ private int matchTokenAt_5(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -572,7 +584,7 @@ private int matchTokenAt_5(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { @@ -599,7 +611,7 @@ private int matchTokenAt_6(Token token, ParserContext context) { endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { @@ -622,7 +634,7 @@ private int matchTokenAt_6(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -633,7 +645,7 @@ private int matchTokenAt_6(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -642,7 +654,7 @@ private int matchTokenAt_6(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -651,7 +663,7 @@ private int matchTokenAt_6(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { @@ -677,7 +689,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { @@ -689,7 +701,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { { startRule(context, RuleType.DocString); build(context, token); - return 41; + return 52; } if (match_StepLine(context, token)) { @@ -707,7 +719,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -718,7 +730,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -727,7 +739,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -736,7 +748,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { @@ -759,7 +771,7 @@ private int matchTokenAt_7(Token token, ParserContext context) { return 7; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 private int matchTokenAt_8(Token token, ParserContext context) { if (match_EOF(context, token)) { @@ -768,13 +780,20 @@ private int matchTokenAt_8(Token token, ParserContext context) { endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); return 8; } + if (match_DocStringSeparator(context, token)) + { + endRule(context, RuleType.DataTable); + startRule(context, RuleType.DocString); + build(context, token); + return 9; + } if (match_StepLine(context, token)) { endRule(context, RuleType.DataTable); @@ -793,7 +812,7 @@ private int matchTokenAt_8(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -805,7 +824,7 @@ private int matchTokenAt_8(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -815,7 +834,7 @@ private int matchTokenAt_8(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -825,7 +844,7 @@ private int matchTokenAt_8(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { @@ -838,8 +857,8 @@ private int matchTokenAt_8(Token token, ParserContext context) { return 8; } - final String stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); @@ -848,67 +867,174 @@ private int matchTokenAt_8(Token token, ParserContext context) { return 8; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 private int matchTokenAt_9(Token token, ParserContext context) { - if (match_TagLine(context, token)) + if (match_DocStringSeparator(context, token)) + { + build(context, token); + return 10; + } + if (match_Other(context, token)) { build(context, token); return 9; } + + final String stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 9; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_10(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 7; + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Tags); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); + return 12; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); return 10; } + if (match_Empty(context, token)) + { + build(context, token); + return 10; + } + + final String stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 10; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + private int matchTokenAt_11(Token token, ParserContext context) { + if (match_TagLine(context, token)) + { + build(context, token); + return 11; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.Tags); + startRule(context, RuleType.Scenario); + build(context, token); + return 12; + } if (match_Comment(context, token)) { build(context, token); - return 9; + return 11; } if (match_Empty(context, token)) { build(context, token); - return 9; + return 11; } - final String stateComment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + final String stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; List expectedTokens = List.of("#TagLine", "#ScenarioLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 9; + return 11; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private int matchTokenAt_10(Token token, ParserContext context) { + private int matchTokenAt_12(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Scenario); endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 10; + return 12; } if (match_Comment(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 11; + return 13; } if (match_StepLine(context, token)) { startRule(context, RuleType.Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { @@ -917,7 +1043,7 @@ private int matchTokenAt_10(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -929,7 +1055,7 @@ private int matchTokenAt_10(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -940,14 +1066,14 @@ private int matchTokenAt_10(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -956,7 +1082,7 @@ private int matchTokenAt_10(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -965,27 +1091,27 @@ private int matchTokenAt_10(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 11; + return 13; } - final String stateComment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + final String stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 10; + return 12; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_11(Token token, ParserContext context) { + private int matchTokenAt_13(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -993,19 +1119,19 @@ private int matchTokenAt_11(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 11; + return 13; } if (match_StepLine(context, token)) { endRule(context, RuleType.Description); startRule(context, RuleType.Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { @@ -1015,7 +1141,7 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1028,7 +1154,7 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1040,7 +1166,7 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1048,7 +1174,7 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1058,7 +1184,7 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1068,26 +1194,26 @@ private int matchTokenAt_11(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 11; + return 13; } - final String stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 11; + return 13; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private int matchTokenAt_12(Token token, ParserContext context) { + private int matchTokenAt_14(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Step); @@ -1095,26 +1221,26 @@ private int matchTokenAt_12(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { startRule(context, RuleType.DataTable); build(context, token); - return 13; + return 15; } if (match_DocStringSeparator(context, token)) { startRule(context, RuleType.DocString); build(context, token); - return 39; + return 49; } if (match_StepLine(context, token)) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { @@ -1124,7 +1250,7 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1137,7 +1263,7 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1149,7 +1275,7 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1157,7 +1283,7 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1167,7 +1293,7 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1177,31 +1303,31 @@ private int matchTokenAt_12(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 12; + return 14; } if (match_Empty(context, token)) { build(context, token); - return 12; + return 14; } - final String stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + final String stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 12; + return 14; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_13(Token token, ParserContext context) { + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private int matchTokenAt_15(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.DataTable); @@ -1210,12 +1336,19 @@ private int matchTokenAt_13(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 13; + return 15; + } + if (match_DocStringSeparator(context, token)) + { + endRule(context, RuleType.DataTable); + startRule(context, RuleType.DocString); + build(context, token); + return 16; } if (match_StepLine(context, token)) { @@ -1223,7 +1356,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 12; + return 14; } if (match_TagLine(context, token)) { @@ -1234,7 +1367,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1248,7 +1381,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1261,7 +1394,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1270,7 +1403,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1281,7 +1414,7 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1292,66 +1425,199 @@ private int matchTokenAt_13(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 15; + } + if (match_Empty(context, token)) + { + build(context, token); + return 15; + } + + final String stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 15; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_16(Token token, ParserContext context) { + if (match_DocStringSeparator(context, token)) + { + build(context, token); + return 17; + } + if (match_Other(context, token)) + { + build(context, token); + return 16; + } + + final String stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 16; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_17(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 14; + } + if (match_TagLine(context, token)) + { + if (lookahead_1(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 18; + } + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 11; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); return 19; } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 12; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } if (match_Comment(context, token)) { build(context, token); - return 13; + return 17; } if (match_Empty(context, token)) { build(context, token); - return 13; + return 17; } - final String stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 13; + return 17; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_14(Token token, ParserContext context) { + private int matchTokenAt_18(Token token, ParserContext context) { if (match_TagLine(context, token)) { build(context, token); - return 14; + return 18; } if (match_ExamplesLine(context, token)) { endRule(context, RuleType.Tags); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_Comment(context, token)) { build(context, token); - return 14; + return 18; } if (match_Empty(context, token)) { build(context, token); - return 14; + return 18; } - final String stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + final String stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; List expectedTokens = List.of("#TagLine", "#ExamplesLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 14; + return 18; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private int matchTokenAt_15(Token token, ParserContext context) { + private int matchTokenAt_19(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Examples); @@ -1360,24 +1626,24 @@ private int matchTokenAt_15(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 15; + return 19; } if (match_Comment(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 16; + return 20; } if (match_TableRow(context, token)) { startRule(context, RuleType.ExamplesTable); build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { @@ -1388,7 +1654,7 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1402,7 +1668,7 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1415,7 +1681,7 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1424,7 +1690,7 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1435,7 +1701,7 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1446,27 +1712,27 @@ private int matchTokenAt_15(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 16; + return 20; } - final String stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + final String stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 15; + return 19; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_16(Token token, ParserContext context) { + private int matchTokenAt_20(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -1476,19 +1742,19 @@ private int matchTokenAt_16(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 16; + return 20; } if (match_TableRow(context, token)) { endRule(context, RuleType.Description); startRule(context, RuleType.ExamplesTable); build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { @@ -1500,7 +1766,7 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1515,7 +1781,7 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1529,7 +1795,7 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1539,7 +1805,7 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1551,7 +1817,7 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1563,26 +1829,26 @@ private int matchTokenAt_16(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 16; + return 20; } - final String stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 16; + return 20; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private int matchTokenAt_17(Token token, ParserContext context) { + private int matchTokenAt_21(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.ExamplesTable); @@ -1592,12 +1858,12 @@ private int matchTokenAt_17(Token token, ParserContext context) { endRule(context, RuleType.ScenarioDefinition); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 17; + return 21; } if (match_TagLine(context, token)) { @@ -1609,7 +1875,7 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 14; + return 18; } } if (match_TagLine(context, token)) @@ -1624,7 +1890,7 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) @@ -1638,7 +1904,7 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -1648,7 +1914,7 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 15; + return 19; } if (match_ScenarioLine(context, token)) { @@ -1660,7 +1926,7 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { @@ -1672,90 +1938,90 @@ private int matchTokenAt_17(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 17; + return 21; } if (match_Empty(context, token)) { build(context, token); - return 17; + return 21; } - final String stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + final String stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; List expectedTokens = List.of("#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 17; + return 21; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private int matchTokenAt_18(Token token, ParserContext context) { + private int matchTokenAt_22(Token token, ParserContext context) { if (match_TagLine(context, token)) { build(context, token); - return 18; + return 22; } if (match_RuleLine(context, token)) { endRule(context, RuleType.Tags); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 18; + return 22; } if (match_Empty(context, token)) { build(context, token); - return 18; + return 22; } - final String stateComment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; + final String stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; List expectedTokens = List.of("#TagLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 18; + return 22; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private int matchTokenAt_19(Token token, ParserContext context) { + private int matchTokenAt_23(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.RuleHeader); endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 20; + return 24; } if (match_BackgroundLine(context, token)) { endRule(context, RuleType.RuleHeader); startRule(context, RuleType.Background); build(context, token); - return 21; + return 25; } if (match_TagLine(context, token)) { @@ -1765,7 +2031,7 @@ private int matchTokenAt_19(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -1776,7 +2042,7 @@ private int matchTokenAt_19(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -1784,7 +2050,7 @@ private int matchTokenAt_19(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -1793,27 +2059,27 @@ private int matchTokenAt_19(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 20; + return 24; } - final String stateComment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; + final String stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 19; + return 23; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_20(Token token, ParserContext context) { + private int matchTokenAt_24(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -1821,12 +2087,12 @@ private int matchTokenAt_20(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 20; + return 24; } if (match_BackgroundLine(context, token)) { @@ -1834,7 +2100,7 @@ private int matchTokenAt_20(Token token, ParserContext context) { endRule(context, RuleType.RuleHeader); startRule(context, RuleType.Background); build(context, token); - return 21; + return 25; } if (match_TagLine(context, token)) { @@ -1845,7 +2111,7 @@ private int matchTokenAt_20(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -1857,7 +2123,7 @@ private int matchTokenAt_20(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -1866,7 +2132,7 @@ private int matchTokenAt_20(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -1876,50 +2142,50 @@ private int matchTokenAt_20(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 20; + return 24; } - final String stateComment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 20; + return 24; } // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private int matchTokenAt_21(Token token, ParserContext context) { + private int matchTokenAt_25(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Background); endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 21; + return 25; } if (match_Comment(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 22; + return 26; } if (match_StepLine(context, token)) { startRule(context, RuleType.Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { @@ -1929,7 +2195,7 @@ private int matchTokenAt_21(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -1940,7 +2206,7 @@ private int matchTokenAt_21(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -1948,7 +2214,7 @@ private int matchTokenAt_21(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -1957,27 +2223,27 @@ private int matchTokenAt_21(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 22; + return 26; } - final String stateComment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; + final String stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 21; + return 25; } // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_22(Token token, ParserContext context) { + private int matchTokenAt_26(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -1985,19 +2251,19 @@ private int matchTokenAt_22(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 22; + return 26; } if (match_StepLine(context, token)) { endRule(context, RuleType.Description); startRule(context, RuleType.Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { @@ -2008,7 +2274,7 @@ private int matchTokenAt_22(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2020,7 +2286,7 @@ private int matchTokenAt_22(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -2029,7 +2295,7 @@ private int matchTokenAt_22(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2039,26 +2305,26 @@ private int matchTokenAt_22(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 22; + return 26; } - final String stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 22; + return 26; } // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private int matchTokenAt_23(Token token, ParserContext context) { + private int matchTokenAt_27(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Step); @@ -2066,26 +2332,26 @@ private int matchTokenAt_23(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { startRule(context, RuleType.DataTable); build(context, token); - return 24; + return 28; } if (match_DocStringSeparator(context, token)) { startRule(context, RuleType.DocString); build(context, token); - return 37; + return 46; } if (match_StepLine(context, token)) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { @@ -2096,7 +2362,7 @@ private int matchTokenAt_23(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2108,7 +2374,7 @@ private int matchTokenAt_23(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -2117,7 +2383,7 @@ private int matchTokenAt_23(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2127,31 +2393,31 @@ private int matchTokenAt_23(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 23; + return 27; } if (match_Empty(context, token)) { build(context, token); - return 23; + return 27; } - final String stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; + final String stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 23; + return 27; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_24(Token token, ParserContext context) { + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private int matchTokenAt_28(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.DataTable); @@ -2160,12 +2426,19 @@ private int matchTokenAt_24(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 24; + return 28; + } + if (match_DocStringSeparator(context, token)) + { + endRule(context, RuleType.DataTable); + startRule(context, RuleType.DocString); + build(context, token); + return 29; } if (match_StepLine(context, token)) { @@ -2173,7 +2446,7 @@ private int matchTokenAt_24(Token token, ParserContext context) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 23; + return 27; } if (match_TagLine(context, token)) { @@ -2185,7 +2458,7 @@ private int matchTokenAt_24(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2198,7 +2471,7 @@ private int matchTokenAt_24(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { @@ -2208,7 +2481,7 @@ private int matchTokenAt_24(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2219,170 +2492,280 @@ private int matchTokenAt_24(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 24; + return 28; } if (match_Empty(context, token)) { build(context, token); - return 24; + return 28; } - final String stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 24; + return 28; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_25(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 25; - } - if (match_ScenarioLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Scenario); - build(context, token); - return 26; - } - if (match_Comment(context, token)) + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_29(Token token, ParserContext context) { + if (match_DocStringSeparator(context, token)) { build(context, token); - return 25; + return 30; } - if (match_Empty(context, token)) + if (match_Other(context, token)) { build(context, token); - return 25; + return 29; } - final String stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; - List expectedTokens = List.of("#TagLine", "#ScenarioLine", "#Comment", "#Empty"); + final String stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 25; + return 29; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private int matchTokenAt_26(Token token, ParserContext context) { + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_30(Token token, ParserContext context) { if (match_EOF(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; - } - if (match_Empty(context, token)) - { - build(context, token); - return 26; - } - if (match_Comment(context, token)) - { - startRule(context, RuleType.Description); - build(context, token); - return 27; + return 42; } if (match_StepLine(context, token)) { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 28; - } - if (match_TagLine(context, token)) - { - if (lookahead_1(context)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); - build(context, token); - return 30; - } + return 27; } if (match_TagLine(context, token)) { if (lookahead_0(context)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); endRule(context, RuleType.Rule); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; - } - if (match_ExamplesLine(context, token)) - { - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 31; + return 22; } if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); endRule(context, RuleType.Rule); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } - if (match_Other(context, token)) + if (match_Comment(context, token)) { - startRule(context, RuleType.Description); build(context, token); - return 27; + return 30; } - - final String stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; - List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + if (match_Empty(context, token)) + { + build(context, token); + return 30; + } + + final String stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 26; + return 30; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + private int matchTokenAt_31(Token token, ParserContext context) { + if (match_TagLine(context, token)) + { + build(context, token); + return 31; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.Tags); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_Comment(context, token)) + { + build(context, token); + return 31; + } + if (match_Empty(context, token)) + { + build(context, token); + return 31; + } + + final String stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + List expectedTokens = List.of("#TagLine", "#ScenarioLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 31; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 + private int matchTokenAt_32(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_Empty(context, token)) + { + build(context, token); + return 32; + } + if (match_Comment(context, token)) + { + startRule(context, RuleType.Description); + build(context, token); + return 33; + } + if (match_StepLine(context, token)) + { + startRule(context, RuleType.Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) + { + if (lookahead_1(context)) + { + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 38; + } + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) + { + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Other(context, token)) + { + startRule(context, RuleType.Description); + build(context, token); + return 33; + } + + final String stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 32; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_27(Token token, ParserContext context) { + private int matchTokenAt_33(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -2391,19 +2774,19 @@ private int matchTokenAt_27(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 27; + return 33; } if (match_StepLine(context, token)) { endRule(context, RuleType.Description); startRule(context, RuleType.Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { @@ -2413,7 +2796,7 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -2426,7 +2809,7 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2439,7 +2822,7 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -2447,7 +2830,7 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -2457,7 +2840,7 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2468,26 +2851,26 @@ private int matchTokenAt_27(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 27; + return 33; } - final String stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 27; + return 33; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private int matchTokenAt_28(Token token, ParserContext context) { + private int matchTokenAt_34(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Step); @@ -2496,26 +2879,26 @@ private int matchTokenAt_28(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { startRule(context, RuleType.DataTable); build(context, token); - return 29; + return 35; } if (match_DocStringSeparator(context, token)) { startRule(context, RuleType.DocString); build(context, token); - return 35; + return 43; } if (match_StepLine(context, token)) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { @@ -2525,7 +2908,7 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -2538,7 +2921,7 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2551,7 +2934,7 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -2559,7 +2942,7 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -2569,7 +2952,7 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2580,31 +2963,31 @@ private int matchTokenAt_28(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 28; + return 34; } if (match_Empty(context, token)) { build(context, token); - return 28; + return 34; } - final String stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + final String stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 28; + return 34; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private int matchTokenAt_29(Token token, ParserContext context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private int matchTokenAt_35(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.DataTable); @@ -2614,12 +2997,19 @@ private int matchTokenAt_29(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 29; + return 35; + } + if (match_DocStringSeparator(context, token)) + { + endRule(context, RuleType.DataTable); + startRule(context, RuleType.DocString); + build(context, token); + return 36; } if (match_StepLine(context, token)) { @@ -2627,7 +3017,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 28; + return 34; } if (match_TagLine(context, token)) { @@ -2638,7 +3028,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -2652,7 +3042,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2666,7 +3056,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -2675,7 +3065,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -2686,7 +3076,7 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2698,66 +3088,202 @@ private int matchTokenAt_29(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 29; + return 35; } if (match_Empty(context, token)) { build(context, token); - return 29; + return 35; } - final String stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 29; + return 35; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private int matchTokenAt_30(Token token, ParserContext context) { - if (match_TagLine(context, token)) - { - build(context, token); - return 30; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.Tags); - startRule(context, RuleType.Examples); - build(context, token); - return 31; - } - if (match_Comment(context, token)) + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_36(Token token, ParserContext context) { + if (match_DocStringSeparator(context, token)) { build(context, token); - return 30; + return 37; } - if (match_Empty(context, token)) + if (match_Other(context, token)) { build(context, token); - return 30; + return 36; } - final String stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; - List expectedTokens = List.of("#TagLine", "#ExamplesLine", "#Comment", "#Empty"); + final String stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 30; + return 36; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_37(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) + { + if (lookahead_1(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 38; + } + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 37; + } + if (match_Empty(context, token)) + { + build(context, token); + return 37; + } + + final String stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 37; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + private int matchTokenAt_38(Token token, ParserContext context) { + if (match_TagLine(context, token)) + { + build(context, token); + return 38; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.Tags); + startRule(context, RuleType.Examples); + build(context, token); + return 39; + } + if (match_Comment(context, token)) + { + build(context, token); + return 38; + } + if (match_Empty(context, token)) + { + build(context, token); + return 38; + } + + final String stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + List expectedTokens = List.of("#TagLine", "#ExamplesLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 38; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private int matchTokenAt_31(Token token, ParserContext context) { + private int matchTokenAt_39(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Examples); @@ -2767,24 +3293,24 @@ private int matchTokenAt_31(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Empty(context, token)) { build(context, token); - return 31; + return 39; } if (match_Comment(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 32; + return 40; } if (match_TableRow(context, token)) { startRule(context, RuleType.ExamplesTable); build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { @@ -2795,7 +3321,7 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -2809,7 +3335,7 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2823,7 +3349,7 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -2832,7 +3358,7 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -2843,7 +3369,7 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2855,27 +3381,27 @@ private int matchTokenAt_31(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { startRule(context, RuleType.Description); build(context, token); - return 32; + return 40; } - final String stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + final String stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; List expectedTokens = List.of("#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 31; + return 39; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private int matchTokenAt_32(Token token, ParserContext context) { + private int matchTokenAt_40(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.Description); @@ -2886,19 +3412,19 @@ private int matchTokenAt_32(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_Comment(context, token)) { build(context, token); - return 32; + return 40; } if (match_TableRow(context, token)) { endRule(context, RuleType.Description); startRule(context, RuleType.ExamplesTable); build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { @@ -2910,7 +3436,7 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -2925,7 +3451,7 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -2940,7 +3466,7 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -2950,7 +3476,7 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -2962,7 +3488,7 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -2975,26 +3501,26 @@ private int matchTokenAt_32(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Other(context, token)) { build(context, token); - return 32; + return 40; } - final String stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + final String stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; List expectedTokens = List.of("#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 32; + return 40; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private int matchTokenAt_33(Token token, ParserContext context) { + private int matchTokenAt_41(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.ExamplesTable); @@ -3005,12 +3531,12 @@ private int matchTokenAt_33(Token token, ParserContext context) { endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } if (match_TableRow(context, token)) { build(context, token); - return 33; + return 41; } if (match_TagLine(context, token)) { @@ -3022,7 +3548,7 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 38; } } if (match_TagLine(context, token)) @@ -3037,7 +3563,7 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 31; } } if (match_TagLine(context, token)) @@ -3052,7 +3578,7 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -3062,7 +3588,7 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 39; } if (match_ScenarioLine(context, token)) { @@ -3074,7 +3600,7 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 32; } if (match_RuleLine(context, token)) { @@ -3087,64 +3613,540 @@ private int matchTokenAt_33(Token token, ParserContext context) { startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 33; + return 41; } if (match_Empty(context, token)) { build(context, token); - return 33; + return 41; } - final String stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + final String stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; List expectedTokens = List.of("#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 33; + return 41; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_43(Token token, ParserContext context) { + if (match_DocStringSeparator(context, token)) + { + build(context, token); + return 44; + } + if (match_Other(context, token)) + { + build(context, token); + return 43; + } + + final String stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 43; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_44(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) + { + endRule(context, RuleType.DocString); + startRule(context, RuleType.DataTable); + build(context, token); + return 45; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) + { + if (lookahead_1(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 38; + } + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 44; + } + if (match_Empty(context, token)) + { + build(context, token); + return 44; + } + + final String stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 44; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private int matchTokenAt_45(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) + { + build(context, token); + return 45; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 34; + } + if (match_TagLine(context, token)) + { + if (lookahead_1(context)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 38; + } + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); + return 39; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 45; + } + if (match_Empty(context, token)) + { + build(context, token); + return 45; + } + + final String stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 45; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_46(Token token, ParserContext context) { + if (match_DocStringSeparator(context, token)) + { + build(context, token); + return 47; + } + if (match_Other(context, token)) + { + build(context, token); + return 46; + } + + final String stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; + List expectedTokens = List.of("#DocStringSeparator", "#Other"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 46; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_47(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) + { + endRule(context, RuleType.DocString); + startRule(context, RuleType.DataTable); + build(context, token); + return 48; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 27; + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DocString); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 47; + } + if (match_Empty(context, token)) + { + build(context, token); + return 47; + } + + final String stateComment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 47; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private int matchTokenAt_48(Token token, ParserContext context) { + if (match_EOF(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + endRule(context, RuleType.Feature); + build(context, token); + return 42; + } + if (match_TableRow(context, token)) + { + build(context, token); + return 48; + } + if (match_StepLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + startRule(context, RuleType.Step); + build(context, token); + return 27; + } + if (match_TagLine(context, token)) + { + if (lookahead_0(context)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Tags); + build(context, token); + return 31; + } + } + if (match_TagLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + startRule(context, RuleType.Tags); + build(context, token); + return 22; + } + if (match_ScenarioLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + startRule(context, RuleType.ScenarioDefinition); + startRule(context, RuleType.Scenario); + build(context, token); + return 32; + } + if (match_RuleLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Background); + endRule(context, RuleType.Rule); + startRule(context, RuleType.Rule); + startRule(context, RuleType.RuleHeader); + build(context, token); + return 23; + } + if (match_Comment(context, token)) + { + build(context, token); + return 48; + } + if (match_Empty(context, token)) + { + build(context, token); + return 48; + } + + final String stateComment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + ParserException error = token.isEOF() + ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) + : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); + + addError(context, error); + return 48; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_35(Token token, ParserContext context) { + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_49(Token token, ParserContext context) { if (match_DocStringSeparator(context, token)) { build(context, token); - return 36; + return 50; } if (match_Other(context, token)) { build(context, token); - return 35; + return 49; } - final String stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + final String stateComment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; List expectedTokens = List.of("#DocStringSeparator", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 35; + return 49; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_36(Token token, ParserContext context) { + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_50(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); endRule(context, RuleType.Scenario); endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) + { + endRule(context, RuleType.DocString); + startRule(context, RuleType.DataTable); + build(context, token); + return 51; } if (match_StepLine(context, token)) { @@ -3152,7 +4154,7 @@ private int matchTokenAt_36(Token token, ParserContext context) { endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); - return 28; + return 14; } if (match_TagLine(context, token)) { @@ -3163,7 +4165,7 @@ private int matchTokenAt_36(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Tags); build(context, token); - return 30; + return 18; } } if (match_TagLine(context, token)) @@ -3177,7 +4179,7 @@ private int matchTokenAt_36(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 11; } } if (match_TagLine(context, token)) @@ -3186,12 +4188,11 @@ private int matchTokenAt_36(Token token, ParserContext context) { endRule(context, RuleType.Step); endRule(context, RuleType.Scenario); endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ExamplesLine(context, token)) { @@ -3200,7 +4201,7 @@ private int matchTokenAt_36(Token token, ParserContext context) { startRule(context, RuleType.ExamplesDefinition); startRule(context, RuleType.Examples); build(context, token); - return 31; + return 19; } if (match_ScenarioLine(context, token)) { @@ -3211,7 +4212,7 @@ private int matchTokenAt_36(Token token, ParserContext context) { startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 12; } if (match_RuleLine(context, token)) { @@ -3219,197 +4220,195 @@ private int matchTokenAt_36(Token token, ParserContext context) { endRule(context, RuleType.Step); endRule(context, RuleType.Scenario); endRule(context, RuleType.ScenarioDefinition); - endRule(context, RuleType.Rule); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 36; + return 50; } if (match_Empty(context, token)) { build(context, token); - return 36; + return 50; } - final String stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 36; + return 50; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_37(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private int matchTokenAt_51(Token token, ParserContext context) { + if (match_EOF(context, token)) { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Feature); build(context, token); - return 38; + return 42; } - if (match_Other(context, token)) + if (match_TableRow(context, token)) { build(context, token); - return 37; + return 51; } - - final String stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - List expectedTokens = List.of("#DocStringSeparator", "#Other"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 37; - } - - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_38(Token token, ParserContext context) { - if (match_EOF(context, token)) + if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); - endRule(context, RuleType.Feature); + startRule(context, RuleType.Step); build(context, token); - return 34; + return 14; } - if (match_StepLine(context, token)) + if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); + if (lookahead_1(context)) + { + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - startRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Tags); build(context, token); - return 23; + return 18; + } } if (match_TagLine(context, token)) { if (lookahead_0(context)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - endRule(context, RuleType.Background); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 25; + return 11; } } if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; + } + if (match_ExamplesLine(context, token)) + { + endRule(context, RuleType.DataTable); + endRule(context, RuleType.Step); + startRule(context, RuleType.ExamplesDefinition); + startRule(context, RuleType.Examples); + build(context, token); + return 19; } if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - endRule(context, RuleType.Background); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 26; + return 12; } if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); - endRule(context, RuleType.Background); - endRule(context, RuleType.Rule); + endRule(context, RuleType.Scenario); + endRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 38; + return 51; } if (match_Empty(context, token)) { build(context, token); - return 38; + return 51; } - final String stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 38; + return 51; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_39(Token token, ParserContext context) { + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private int matchTokenAt_52(Token token, ParserContext context) { if (match_DocStringSeparator(context, token)) { build(context, token); - return 40; + return 53; } if (match_Other(context, token)) { build(context, token); - return 39; + return 52; } - final String stateComment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + final String stateComment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; List expectedTokens = List.of("#DocStringSeparator", "#Other"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 39; + return 52; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_40(Token token, ParserContext context) { + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private int matchTokenAt_53(Token token, ParserContext context) { if (match_EOF(context, token)) { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; } - if (match_StepLine(context, token)) + if (match_TableRow(context, token)) { endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.Step); + startRule(context, RuleType.DataTable); build(context, token); - return 12; + return 54; } - if (match_TagLine(context, token)) + if (match_StepLine(context, token)) { - if (lookahead_1(context)) - { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Tags); + startRule(context, RuleType.Step); build(context, token); - return 14; - } + return 7; } if (match_TagLine(context, token)) { @@ -3417,115 +4416,84 @@ private int matchTokenAt_40(Token token, ParserContext context) { { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Background); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; - } - if (match_ExamplesLine(context, token)) - { - endRule(context, RuleType.DocString); - endRule(context, RuleType.Step); - startRule(context, RuleType.ExamplesDefinition); - startRule(context, RuleType.Examples); - build(context, token); - return 15; + return 22; } if (match_ScenarioLine(context, token)) { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { endRule(context, RuleType.DocString); endRule(context, RuleType.Step); - endRule(context, RuleType.Scenario); - endRule(context, RuleType.ScenarioDefinition); + endRule(context, RuleType.Background); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 40; + return 53; } if (match_Empty(context, token)) { build(context, token); - return 40; - } - - final String stateComment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); - ParserException error = token.isEOF() - ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) - : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); - - addError(context, error); - return 40; - } - - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private int matchTokenAt_41(Token token, ParserContext context) { - if (match_DocStringSeparator(context, token)) - { - build(context, token); - return 42; - } - if (match_Other(context, token)) - { - build(context, token); - return 41; + return 53; } - final String stateComment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; - List expectedTokens = List.of("#DocStringSeparator", "#Other"); + final String stateComment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 41; + return 53; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private int matchTokenAt_42(Token token, ParserContext context) { + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private int matchTokenAt_54(Token token, ParserContext context) { if (match_EOF(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); endRule(context, RuleType.Background); endRule(context, RuleType.Feature); build(context, token); - return 34; + return 42; + } + if (match_TableRow(context, token)) + { + build(context, token); + return 54; } if (match_StepLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); startRule(context, RuleType.Step); build(context, token); @@ -3535,65 +4503,65 @@ private int matchTokenAt_42(Token token, ParserContext context) { { if (lookahead_0(context)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Tags); build(context, token); - return 9; + return 11; } } if (match_TagLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); endRule(context, RuleType.Background); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); startRule(context, RuleType.Tags); build(context, token); - return 18; + return 22; } if (match_ScenarioLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); endRule(context, RuleType.Background); startRule(context, RuleType.ScenarioDefinition); startRule(context, RuleType.Scenario); build(context, token); - return 10; + return 12; } if (match_RuleLine(context, token)) { - endRule(context, RuleType.DocString); + endRule(context, RuleType.DataTable); endRule(context, RuleType.Step); endRule(context, RuleType.Background); startRule(context, RuleType.Rule); startRule(context, RuleType.RuleHeader); build(context, token); - return 19; + return 23; } if (match_Comment(context, token)) { build(context, token); - return 42; + return 54; } if (match_Empty(context, token)) { build(context, token); - return 42; + return 54; } - final String stateComment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - List expectedTokens = List.of("#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); + final String stateComment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + List expectedTokens = List.of("#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"); ParserException error = token.isEOF() ? new ParserException.UnexpectedEOFException(token, expectedTokens, stateComment) : new ParserException.UnexpectedTokenException(token, expectedTokens, stateComment); addError(context, error); - return 42; + return 54; } @@ -3653,45 +4621,45 @@ private boolean lookahead_1(ParserContext context) { interface Builder { void build(Token token); - + void startRule(RuleType ruleType); - + void endRule(RuleType ruleType); - + T getResult(); - + void reset(String uri); } interface TokenMatcher { boolean match_EOF(Token token); - + boolean match_Empty(Token token); - + boolean match_Comment(Token token); - + boolean match_TagLine(Token token); - + boolean match_FeatureLine(Token token); - + boolean match_RuleLine(Token token); - + boolean match_BackgroundLine(Token token); - + boolean match_ScenarioLine(Token token); - + boolean match_ExamplesLine(Token token); - + boolean match_StepLine(Token token); - + boolean match_DocStringSeparator(Token token); - + boolean match_TableRow(Token token); - + boolean match_Language(Token token); - + boolean match_Other(Token token); - + void reset(); } @@ -3737,68 +4705,72 @@ enum TokenType { enum RuleType { None, /** #EOF **/ - _EOF, + _EOF, /** #Empty **/ - _Empty, + _Empty, /** #Comment **/ - _Comment, + _Comment, /** #TagLine **/ - _TagLine, + _TagLine, /** #FeatureLine **/ - _FeatureLine, + _FeatureLine, /** #RuleLine **/ - _RuleLine, + _RuleLine, /** #BackgroundLine **/ - _BackgroundLine, + _BackgroundLine, /** #ScenarioLine **/ - _ScenarioLine, + _ScenarioLine, /** #ExamplesLine **/ - _ExamplesLine, + _ExamplesLine, /** #StepLine **/ - _StepLine, + _StepLine, /** #DocStringSeparator **/ - _DocStringSeparator, + _DocStringSeparator, /** #TableRow **/ - _TableRow, + _TableRow, /** #Language **/ - _Language, + _Language, /** #Other **/ - _Other, + _Other, /** GherkinDocument! := Feature? **/ - GherkinDocument, + GherkinDocument, /** Feature! := FeatureHeader Background? ScenarioDefinition* Rule* **/ - Feature, + Feature, /** FeatureHeader! := #Language? Tags? #FeatureLine DescriptionHelper **/ - FeatureHeader, + FeatureHeader, /** Rule! := RuleHeader Background? ScenarioDefinition* **/ - Rule, + Rule, /** RuleHeader! := Tags? #RuleLine DescriptionHelper **/ - RuleHeader, + RuleHeader, /** Background! := #BackgroundLine DescriptionHelper Step* **/ - Background, + Background, /** ScenarioDefinition! [#Empty|#Comment|#TagLine->#ScenarioLine] := Tags? Scenario **/ - ScenarioDefinition, + ScenarioDefinition, /** Scenario! := #ScenarioLine DescriptionHelper Step* ExamplesDefinition* **/ - Scenario, + Scenario, /** ExamplesDefinition! [#Empty|#Comment|#TagLine->#ExamplesLine] := Tags? Examples **/ - ExamplesDefinition, + ExamplesDefinition, /** Examples! := #ExamplesLine DescriptionHelper ExamplesTable? **/ - Examples, + Examples, /** ExamplesTable! := #TableRow #TableRow* **/ - ExamplesTable, + ExamplesTable, /** Step! := #StepLine StepArg? **/ - Step, - /** StepArg := (DataTable | DocString) **/ - StepArg, + Step, + /** StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) **/ + StepArg, + /** DataTableAndMaybeDocString := DataTable DocString? **/ + DataTableAndMaybeDocString, + /** DocStringAndMaybeDataTable := DocString DataTable? **/ + DocStringAndMaybeDataTable, /** DataTable! := #TableRow+ **/ - DataTable, + DataTable, /** DocString! := #DocStringSeparator #Other* #DocStringSeparator **/ - DocString, + DocString, /** Tags! := #TagLine+ **/ - Tags, + Tags, /** DescriptionHelper := #Empty* Description? **/ - DescriptionHelper, + DescriptionHelper, /** Description! := (#Other | #Comment)+ **/ - Description, + Description, } } diff --git a/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java b/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java index 9fe09cd24..96bad2ccf 100644 --- a/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java +++ b/java/src/main/java/io/cucumber/gherkin/PickleCompiler.java @@ -209,12 +209,12 @@ private PickleStep pickleStep(Step step, List variableCells, @Nullabl PickleStepArgument argument = null; Optional dataTable = step.getDataTable(); - if (dataTable.isPresent()) { - argument = new PickleStepArgument(null, pickleDataTable(dataTable.get(), variableCells, valueCells)); - } Optional docString = step.getDocString(); - if (docString.isPresent()) { - argument = new PickleStepArgument(pickleDocString(docString.get(), variableCells, valueCells), null); + if (dataTable.isPresent() || docString.isPresent()) { + argument = new PickleStepArgument( + docString.map(value -> pickleDocString(value, variableCells, valueCells)).orElse(null), + dataTable.map(value -> pickleDataTable(value, variableCells, valueCells)).orElse(null) + ); } List astNodeIds; diff --git a/javascript/src/Parser.ts b/javascript/src/Parser.ts index 5cf1b4cb3..7e3913312 100644 --- a/javascript/src/Parser.ts +++ b/javascript/src/Parser.ts @@ -85,7 +85,9 @@ export enum RuleType { Examples, // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? ExamplesTable, // ExamplesTable! := #TableRow #TableRow* Step, // Step! := #StepLine StepArg? - StepArg, // StepArg := (DataTable | DocString) + StepArg, // StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) + DataTableAndMaybeDocString, // DataTableAndMaybeDocString := DataTable DocString? + DocStringAndMaybeDataTable, // DocStringAndMaybeDataTable := DocString DataTable? DataTable, // DataTable! := #TableRow+ DocString, // DocString! := #DocStringSeparator #Other* #DocStringSeparator Tags, // Tags! := #TagLine+ @@ -273,6 +275,8 @@ export default class Parser { return this.matchTokenAt_32(token, context); case 33: return this.matchTokenAt_33(token, context); + case 34: + return this.matchTokenAt_34(token, context); case 35: return this.matchTokenAt_35(token, context); case 36: @@ -287,8 +291,30 @@ export default class Parser { return this.matchTokenAt_40(token, context); case 41: return this.matchTokenAt_41(token, context); - case 42: - return this.matchTokenAt_42(token, context); + case 43: + return this.matchTokenAt_43(token, context); + case 44: + return this.matchTokenAt_44(token, context); + case 45: + return this.matchTokenAt_45(token, context); + case 46: + return this.matchTokenAt_46(token, context); + case 47: + return this.matchTokenAt_47(token, context); + case 48: + return this.matchTokenAt_48(token, context); + case 49: + return this.matchTokenAt_49(token, context); + case 50: + return this.matchTokenAt_50(token, context); + case 51: + return this.matchTokenAt_51(token, context); + case 52: + return this.matchTokenAt_52(token, context); + case 53: + return this.matchTokenAt_53(token, context); + case 54: + return this.matchTokenAt_54(token, context); default: throw new Error("Unknown state: " + state); } @@ -299,7 +325,7 @@ export default class Parser { private matchTokenAt_0(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.build(context, token); - return 34; + return 42; } if(this.match_Language(context, token)) { this.startRule(context, RuleType.Feature); @@ -399,7 +425,7 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); @@ -422,7 +448,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -431,21 +457,21 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); @@ -468,7 +494,7 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); @@ -488,7 +514,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -498,7 +524,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -506,7 +532,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -514,7 +540,7 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); @@ -535,7 +561,7 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); @@ -557,7 +583,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -566,21 +592,21 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); @@ -603,7 +629,7 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); @@ -622,7 +648,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -632,7 +658,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -640,7 +666,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -648,7 +674,7 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); @@ -670,7 +696,7 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.startRule(context, RuleType.DataTable); @@ -680,7 +706,7 @@ export default class Parser { if(this.match_DocStringSeparator(context, token)) { this.startRule(context, RuleType.DocString); this.build(context, token); - return 41; + return 52; } if(this.match_StepLine(context, token)) { this.endRule(context); @@ -695,7 +721,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -705,7 +731,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -713,7 +739,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -721,7 +747,7 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); @@ -740,7 +766,7 @@ export default class Parser { this.addError(context, error); return 7; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 private matchTokenAt_8(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); @@ -748,12 +774,18 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.build(context, token); return 8; } + if(this.match_DocStringSeparator(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DocString); + this.build(context, token); + return 9; + } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); @@ -769,7 +801,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -780,7 +812,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -789,7 +821,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -798,7 +830,7 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); @@ -809,7 +841,7 @@ export default class Parser { return 8; } - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); @@ -817,25 +849,117 @@ export default class Parser { this.addError(context, error); return 8; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 private matchTokenAt_9(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { + if(this.match_DocStringSeparator(context, token)) { + this.build(context, token); + return 10; + } + if(this.match_Other(context, token)) { this.build(context, token); return 9; } + + const expectedTokens = ["#DocStringSeparator", "#Other"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 9; } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private matchTokenAt_10(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 7; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } if(this.match_ScenarioLine(context, token)) { this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 10; + } + if(this.match_Empty(context, token)) { this.build(context, token); return 10; } + + const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 10; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + private matchTokenAt_11(token: IToken, context: Context) { + if(this.match_TagLine(context, token)) { + this.build(context, token); + return 11; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } if(this.match_Comment(context, token)) { this.build(context, token); - return 9; + return 11; } if(this.match_Empty(context, token)) { this.build(context, token); - return 9; + return 11; } const expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; @@ -844,37 +968,37 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 9; } + return 11; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private matchTokenAt_10(token: IToken, context: Context) { + private matchTokenAt_12(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); - return 10; + return 12; } if(this.match_Comment(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 11; + return 13; } if(this.match_StepLine(context, token)) { this.startRule(context, RuleType.Step); this.build(context, token); - return 12; + return 14; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -884,7 +1008,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -894,13 +1018,13 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -908,7 +1032,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -916,12 +1040,12 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 11; + return 13; } const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -930,27 +1054,27 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 10; } + return 12; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_11(token: IToken, context: Context) { + private matchTokenAt_13(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); - return 11; + return 13; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 12; + return 14; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -958,7 +1082,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -969,7 +1093,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -980,14 +1104,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -996,7 +1120,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1005,11 +1129,11 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); - return 11; + return 13; } const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1018,33 +1142,33 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 11; } + return 13; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private matchTokenAt_12(token: IToken, context: Context) { + private matchTokenAt_14(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.startRule(context, RuleType.DataTable); this.build(context, token); - return 13; + return 15; } if(this.match_DocStringSeparator(context, token)) { this.startRule(context, RuleType.DocString); this.build(context, token); - return 39; + return 49; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 12; + return 14; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -1052,7 +1176,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -1063,7 +1187,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -1074,14 +1198,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1090,7 +1214,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1099,15 +1223,15 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 12; + return 14; } if(this.match_Empty(context, token)) { this.build(context, token); - return 12; + return 14; } const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; @@ -1116,10 +1240,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 12; } + return 14; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_13(token: IToken, context: Context) { + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private matchTokenAt_15(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -1127,18 +1251,24 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.build(context, token); - return 13; + return 15; } - if(this.match_StepLine(context, token)) { + if(this.match_DocStringSeparator(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DocString); + this.build(context, token); + return 16; + } + if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 12; + return 14; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -1147,7 +1277,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -1159,7 +1289,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -1171,7 +1301,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -1179,7 +1309,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1189,7 +1319,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1199,44 +1329,159 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 15; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 15; + } + + const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 15; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private matchTokenAt_16(token: IToken, context: Context) { + if(this.match_DocStringSeparator(context, token)) { + this.build(context, token); + return 17; + } + if(this.match_Other(context, token)) { + this.build(context, token); + return 16; + } + + const expectedTokens = ["#DocStringSeparator", "#Other"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 16; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private matchTokenAt_17(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 14; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_1(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 18; + } + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ExamplesLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Examples); + this.build(context, token); return 19; } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } if(this.match_Comment(context, token)) { this.build(context, token); - return 13; + return 17; } if(this.match_Empty(context, token)) { this.build(context, token); - return 13; + return 17; } - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 13; } + return 17; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_14(token: IToken, context: Context) { + private matchTokenAt_18(token: IToken, context: Context) { if(this.match_TagLine(context, token)) { this.build(context, token); - return 14; + return 18; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_Comment(context, token)) { this.build(context, token); - return 14; + return 18; } if(this.match_Empty(context, token)) { this.build(context, token); - return 14; + return 18; } const expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; @@ -1245,10 +1490,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 14; } + return 18; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private matchTokenAt_15(token: IToken, context: Context) { + private matchTokenAt_19(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -1256,21 +1501,21 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); - return 15; + return 19; } if(this.match_Comment(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 16; + return 20; } if(this.match_TableRow(context, token)) { this.startRule(context, RuleType.ExamplesTable); this.build(context, token); - return 17; + return 21; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -1279,7 +1524,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -1291,7 +1536,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -1303,7 +1548,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -1311,7 +1556,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1321,7 +1566,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1331,12 +1576,12 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 16; + return 20; } const expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1345,10 +1590,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 15; } + return 19; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_16(token: IToken, context: Context) { + private matchTokenAt_20(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -1357,17 +1602,17 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); - return 16; + return 20; } if(this.match_TableRow(context, token)) { this.endRule(context); this.startRule(context, RuleType.ExamplesTable); this.build(context, token); - return 17; + return 21; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -1377,7 +1622,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -1390,7 +1635,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -1403,7 +1648,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -1412,7 +1657,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1423,7 +1668,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1434,11 +1679,11 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); - return 16; + return 20; } const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1447,10 +1692,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 16; } + return 20; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private matchTokenAt_17(token: IToken, context: Context) { + private matchTokenAt_21(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -1459,11 +1704,11 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.build(context, token); - return 17; + return 21; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -1473,7 +1718,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 18; } } if(this.match_TagLine(context, token)) { @@ -1486,7 +1731,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 11; } } if(this.match_TagLine(context, token)) { @@ -1499,7 +1744,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -1508,7 +1753,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 19; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1519,7 +1764,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 12; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1530,15 +1775,15 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 17; + return 21; } if(this.match_Empty(context, token)) { this.build(context, token); - return 17; + return 21; } const expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; @@ -1547,26 +1792,26 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 17; } + return 21; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private matchTokenAt_18(token: IToken, context: Context) { + private matchTokenAt_22(token: IToken, context: Context) { if(this.match_TagLine(context, token)) { this.build(context, token); - return 18; + return 22; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 18; + return 22; } if(this.match_Empty(context, token)) { this.build(context, token); - return 18; + return 22; } const expectedTokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"]; @@ -1575,31 +1820,31 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 18; } + return 22; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private matchTokenAt_19(token: IToken, context: Context) { + private matchTokenAt_23(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 20; + return 24; } if(this.match_BackgroundLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Background); this.build(context, token); - return 21; + return 25; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -1607,7 +1852,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1617,14 +1862,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1632,12 +1877,12 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 20; + return 24; } const expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1646,28 +1891,28 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 19; } + return 23; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_20(token: IToken, context: Context) { + private matchTokenAt_24(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); - return 20; + return 24; } if(this.match_BackgroundLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Background); this.build(context, token); - return 21; + return 25; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -1676,7 +1921,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1687,7 +1932,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1695,7 +1940,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1704,11 +1949,11 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); - return 20; + return 24; } const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1717,30 +1962,30 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 20; } + return 24; } // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private matchTokenAt_21(token: IToken, context: Context) { + private matchTokenAt_25(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); - return 21; + return 25; } if(this.match_Comment(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 22; + return 26; } if(this.match_StepLine(context, token)) { this.startRule(context, RuleType.Step); this.build(context, token); - return 23; + return 27; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -1748,7 +1993,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1758,14 +2003,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1773,12 +2018,12 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 22; + return 26; } const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1787,27 +2032,27 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 21; } + return 25; } // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_22(token: IToken, context: Context) { + private matchTokenAt_26(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); - return 22; + return 26; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 23; + return 27; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -1816,7 +2061,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1827,7 +2072,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1835,7 +2080,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1844,11 +2089,11 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); - return 22; + return 26; } const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -1857,33 +2102,33 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 22; } + return 26; } // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private matchTokenAt_23(token: IToken, context: Context) { + private matchTokenAt_27(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.startRule(context, RuleType.DataTable); this.build(context, token); - return 24; + return 28; } if(this.match_DocStringSeparator(context, token)) { this.startRule(context, RuleType.DocString); this.build(context, token); - return 37; + return 46; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 23; + return 27; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -1892,7 +2137,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1903,7 +2148,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1911,7 +2156,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -1920,15 +2165,15 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 23; + return 27; } if(this.match_Empty(context, token)) { this.build(context, token); - return 23; + return 27; } const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; @@ -1937,10 +2182,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 23; } + return 27; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_24(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private matchTokenAt_28(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -1948,19 +2193,120 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.build(context, token); - return 24; + return 28; + } + if(this.match_DocStringSeparator(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DocString); + this.build(context, token); + return 29; } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); + return 27; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 31; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 32; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); return 23; } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 28; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 28; + } + + const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 28; } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private matchTokenAt_29(token: IToken, context: Context) { + if(this.match_DocStringSeparator(context, token)) { + this.build(context, token); + return 30; + } + if(this.match_Other(context, token)) { + this.build(context, token); + return 29; + } + + const expectedTokens = ["#DocStringSeparator", "#Other"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 29; } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private matchTokenAt_30(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 27; + } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { this.endRule(context); @@ -1969,7 +2315,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -1981,7 +2327,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -1990,7 +2336,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2000,44 +2346,44 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 24; + return 30; } if(this.match_Empty(context, token)) { this.build(context, token); - return 24; + return 30; } - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 24; } + return 30; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_25(token: IToken, context: Context) { + private matchTokenAt_31(token: IToken, context: Context) { if(this.match_TagLine(context, token)) { this.build(context, token); - return 25; + return 31; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_Comment(context, token)) { this.build(context, token); - return 25; + return 31; } if(this.match_Empty(context, token)) { this.build(context, token); - return 25; + return 31; } const expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; @@ -2046,38 +2392,38 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 25; } + return 31; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private matchTokenAt_26(token: IToken, context: Context) { + private matchTokenAt_32(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Empty(context, token)) { this.build(context, token); - return 26; + return 32; } if(this.match_Comment(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 27; + return 33; } if(this.match_StepLine(context, token)) { this.startRule(context, RuleType.Step); this.build(context, token); - return 28; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2087,7 +2433,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2098,13 +2444,13 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2112,7 +2458,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2121,12 +2467,12 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.startRule(context, RuleType.Description); this.build(context, token); - return 27; + return 33; } const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -2135,10 +2481,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 26; } + return 32; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_27(token: IToken, context: Context) { + private matchTokenAt_33(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2146,17 +2492,17 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_Comment(context, token)) { this.build(context, token); - return 27; + return 33; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 28; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -2164,7 +2510,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2175,7 +2521,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2187,14 +2533,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2203,7 +2549,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2213,11 +2559,11 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { this.build(context, token); - return 27; + return 33; } const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; @@ -2226,10 +2572,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 27; } + return 33; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private matchTokenAt_28(token: IToken, context: Context) { + private matchTokenAt_34(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2237,23 +2583,23 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.startRule(context, RuleType.DataTable); this.build(context, token); - return 29; + return 35; } if(this.match_DocStringSeparator(context, token)) { this.startRule(context, RuleType.DocString); this.build(context, token); - return 35; + return 43; } if(this.match_StepLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 28; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -2261,7 +2607,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2272,7 +2618,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2284,14 +2630,14 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2300,7 +2646,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2310,15 +2656,15 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 28; + return 34; } if(this.match_Empty(context, token)) { this.build(context, token); - return 28; + return 34; } const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; @@ -2327,10 +2673,10 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 28; } + return 34; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private matchTokenAt_29(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private matchTokenAt_35(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2339,18 +2685,24 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; } if(this.match_TableRow(context, token)) { this.build(context, token); - return 29; + return 35; + } + if(this.match_DocStringSeparator(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DocString); + this.build(context, token); + return 36; } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 28; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -2359,7 +2711,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2371,7 +2723,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2384,7 +2736,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -2392,7 +2744,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2402,7 +2754,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2413,56 +2765,46 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 29; + return 35; } if(this.match_Empty(context, token)) { this.build(context, token); - return 29; + return 35; } - const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 29; } + return 35; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private matchTokenAt_30(token: IToken, context: Context) { - if(this.match_TagLine(context, token)) { - this.build(context, token); - return 30; - } - if(this.match_ExamplesLine(context, token)) { - this.endRule(context); - this.startRule(context, RuleType.Examples); - this.build(context, token); - return 31; - } - if(this.match_Comment(context, token)) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private matchTokenAt_36(token: IToken, context: Context) { + if(this.match_DocStringSeparator(context, token)) { this.build(context, token); - return 30; + return 37; } - if(this.match_Empty(context, token)) { + if(this.match_Other(context, token)) { this.build(context, token); - return 30; + return 36; } - const expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; + const expectedTokens = ["#DocStringSeparator", "#Other"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 30; } + return 36; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private matchTokenAt_31(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private matchTokenAt_37(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2471,21 +2813,14 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; - } - if(this.match_Empty(context, token)) { - this.build(context, token); - return 31; - } - if(this.match_Comment(context, token)) { - this.startRule(context, RuleType.Description); - this.build(context, token); - return 32; + return 42; } - if(this.match_TableRow(context, token)) { - this.startRule(context, RuleType.ExamplesTable); + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); this.build(context, token); - return 33; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -2494,7 +2829,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2506,7 +2841,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2519,7 +2854,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -2527,7 +2862,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2537,7 +2872,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2548,26 +2883,57 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } - if(this.match_Other(context, token)) { - this.startRule(context, RuleType.Description); + if(this.match_Comment(context, token)) { this.build(context, token); - return 32; + return 37; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 37; } - const expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; + const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 31; } + return 37; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private matchTokenAt_32(token: IToken, context: Context) { - if(this.match_EOF(context, token)) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + private matchTokenAt_38(token: IToken, context: Context) { + if(this.match_TagLine(context, token)) { + this.build(context, token); + return 38; + } + if(this.match_ExamplesLine(context, token)) { this.endRule(context); + this.startRule(context, RuleType.Examples); + this.build(context, token); + return 39; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 38; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 38; + } + + const expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 38; } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 + private matchTokenAt_39(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); @@ -2575,27 +2941,30 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 39; } if(this.match_Comment(context, token)) { + this.startRule(context, RuleType.Description); this.build(context, token); - return 32; + return 40; } if(this.match_TableRow(context, token)) { - this.endRule(context); this.startRule(context, RuleType.ExamplesTable); this.build(context, token); - return 33; + return 41; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { this.endRule(context); this.endRule(context); - this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2604,11 +2973,10 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); - this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2617,32 +2985,29 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); - this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { - this.endRule(context); this.endRule(context); this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); - this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2650,27 +3015,27 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); - this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Other(context, token)) { + this.startRule(context, RuleType.Description); this.build(context, token); - return 32; + return 40; } - const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; + const expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 32; } + return 39; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private matchTokenAt_33(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 + private matchTokenAt_40(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2680,11 +3045,17 @@ export default class Parser { this.endRule(context); this.endRule(context); this.build(context, token); - return 34; + return 42; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 40; } if(this.match_TableRow(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.ExamplesTable); this.build(context, token); - return 33; + return 41; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -2694,7 +3065,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2707,7 +3078,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2721,7 +3092,7 @@ export default class Parser { this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -2730,7 +3101,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -2741,7 +3112,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2753,46 +3124,23 @@ export default class Parser { this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; - } - if(this.match_Comment(context, token)) { - this.build(context, token); - return 33; + return 23; } - if(this.match_Empty(context, token)) { + if(this.match_Other(context, token)) { this.build(context, token); - return 33; + return 40; } - const expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 33; } + return 40; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_35(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 36; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 35; - } - - const expectedTokens = ["#DocStringSeparator", "#Other"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 35; } - - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_36(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 + private matchTokenAt_41(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); @@ -2800,24 +3148,23 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.build(context, token); - return 34; + return 42; } - if(this.match_StepLine(context, token)) { - this.endRule(context); - this.endRule(context); - this.startRule(context, RuleType.Step); + if(this.match_TableRow(context, token)) { this.build(context, token); - return 28; + return 41; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 30; + return 38; } } if(this.match_TagLine(context, token)) { @@ -2826,10 +3173,11 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2838,29 +3186,32 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { + this.endRule(context); this.endRule(context); this.endRule(context); this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 31; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); @@ -2868,37 +3219,38 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 36; + return 41; } if(this.match_Empty(context, token)) { this.build(context, token); - return 36; + return 41; } - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 36; } + return 41; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_37(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private matchTokenAt_43(token: IToken, context: Context) { if(this.match_DocStringSeparator(context, token)) { this.build(context, token); - return 38; + return 44; } if(this.match_Other(context, token)) { this.build(context, token); - return 37; + return 43; } const expectedTokens = ["#DocStringSeparator", "#Other"]; @@ -2907,35 +3259,53 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 37; } + return 43; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_38(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private matchTokenAt_44(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.build(context, token); - return 34; + return 42; + } + if(this.match_TableRow(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DataTable); + this.build(context, token); + return 45; } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 23; + return 34; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_1(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 38; + } } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 25; + return 31; } } if(this.match_TagLine(context, token)) { @@ -2943,84 +3313,81 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; + } + if(this.match_ExamplesLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Examples); + this.build(context, token); + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 26; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 38; + return 44; } if(this.match_Empty(context, token)) { this.build(context, token); - return 38; - } - - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; - const error = token.isEof ? - UnexpectedEOFException.create(token, expectedTokens) : - UnexpectedTokenException.create(token, expectedTokens); - if (this.stopAtFirstError) throw error; - this.addError(context, error); - return 38; } - - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_39(token: IToken, context: Context) { - if(this.match_DocStringSeparator(context, token)) { - this.build(context, token); - return 40; - } - if(this.match_Other(context, token)) { - this.build(context, token); - return 39; + return 44; } - const expectedTokens = ["#DocStringSeparator", "#Other"]; + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 39; } + return 44; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_40(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private matchTokenAt_45(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.build(context, token); - return 34; + return 42; + } + if(this.match_TableRow(context, token)) { + this.build(context, token); + return 45; } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 12; + return 34; } if(this.match_TagLine(context, token)) { if(this.lookahead_1(context, token)) { @@ -3029,7 +3396,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 14; + return 38; } } if(this.match_TagLine(context, token)) { @@ -3041,7 +3408,7 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 31; } } if(this.match_TagLine(context, token)) { @@ -3049,11 +3416,12 @@ export default class Parser { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ExamplesLine(context, token)) { this.endRule(context); @@ -3061,7 +3429,7 @@ export default class Parser { this.startRule(context, RuleType.ExamplesDefinition); this.startRule(context, RuleType.Examples); this.build(context, token); - return 15; + return 39; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -3071,44 +3439,45 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 40; + return 45; } if(this.match_Empty(context, token)) { this.build(context, token); - return 40; + return 45; } - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 40; } + return 45; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private matchTokenAt_41(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private matchTokenAt_46(token: IToken, context: Context) { if(this.match_DocStringSeparator(context, token)) { this.build(context, token); - return 42; + return 47; } if(this.match_Other(context, token)) { this.build(context, token); - return 41; + return 46; } const expectedTokens = ["#DocStringSeparator", "#Other"]; @@ -3117,24 +3486,31 @@ export default class Parser { UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 41; } + return 46; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private matchTokenAt_42(token: IToken, context: Context) { + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private matchTokenAt_47(token: IToken, context: Context) { if(this.match_EOF(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.build(context, token); - return 34; + return 42; + } + if(this.match_TableRow(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DataTable); + this.build(context, token); + return 48; } if(this.match_StepLine(context, token)) { this.endRule(context); this.endRule(context); this.startRule(context, RuleType.Step); this.build(context, token); - return 7; + return 27; } if(this.match_TagLine(context, token)) { if(this.lookahead_0(context, token)) { @@ -3144,18 +3520,19 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Tags); this.build(context, token); - return 9; + return 31; } } if(this.match_TagLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.startRule(context, RuleType.Tags); this.build(context, token); - return 18; + return 22; } if(this.match_ScenarioLine(context, token)) { this.endRule(context); @@ -3164,33 +3541,510 @@ export default class Parser { this.startRule(context, RuleType.ScenarioDefinition); this.startRule(context, RuleType.Scenario); this.build(context, token); - return 10; + return 32; } if(this.match_RuleLine(context, token)) { this.endRule(context); this.endRule(context); this.endRule(context); + this.endRule(context); this.startRule(context, RuleType.Rule); this.startRule(context, RuleType.RuleHeader); this.build(context, token); - return 19; + return 23; } if(this.match_Comment(context, token)) { this.build(context, token); - return 42; + return 47; } if(this.match_Empty(context, token)) { + this.build(context, token); + return 47; + } + + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 47; } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private matchTokenAt_48(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); this.build(context, token); return 42; } + if(this.match_TableRow(context, token)) { + this.build(context, token); + return 48; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 27; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 31; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 32; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 48; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 48; + } - const expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 48; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private matchTokenAt_49(token: IToken, context: Context) { + if(this.match_DocStringSeparator(context, token)) { + this.build(context, token); + return 50; + } + if(this.match_Other(context, token)) { + this.build(context, token); + return 49; + } + + const expectedTokens = ["#DocStringSeparator", "#Other"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 49; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private matchTokenAt_50(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_TableRow(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DataTable); + this.build(context, token); + return 51; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 14; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_1(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 18; + } + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ExamplesLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Examples); + this.build(context, token); + return 19; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 50; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 50; + } + + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 50; } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private matchTokenAt_51(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_TableRow(context, token)) { + this.build(context, token); + return 51; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 14; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_1(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 18; + } + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ExamplesLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ExamplesDefinition); + this.startRule(context, RuleType.Examples); + this.build(context, token); + return 19; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 51; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 51; + } + + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 51; } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private matchTokenAt_52(token: IToken, context: Context) { + if(this.match_DocStringSeparator(context, token)) { + this.build(context, token); + return 53; + } + if(this.match_Other(context, token)) { + this.build(context, token); + return 52; + } + + const expectedTokens = ["#DocStringSeparator", "#Other"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 52; } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private matchTokenAt_53(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_TableRow(context, token)) { + this.endRule(context); + this.startRule(context, RuleType.DataTable); + this.build(context, token); + return 54; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 7; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 53; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 53; + } + + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + const error = token.isEof ? + UnexpectedEOFException.create(token, expectedTokens) : + UnexpectedTokenException.create(token, expectedTokens); + if (this.stopAtFirstError) throw error; + this.addError(context, error); + return 53; } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private matchTokenAt_54(token: IToken, context: Context) { + if(this.match_EOF(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.build(context, token); + return 42; + } + if(this.match_TableRow(context, token)) { + this.build(context, token); + return 54; + } + if(this.match_StepLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Step); + this.build(context, token); + return 7; + } + if(this.match_TagLine(context, token)) { + if(this.lookahead_0(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 11; + } + } + if(this.match_TagLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.startRule(context, RuleType.Tags); + this.build(context, token); + return 22; + } + if(this.match_ScenarioLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.ScenarioDefinition); + this.startRule(context, RuleType.Scenario); + this.build(context, token); + return 12; + } + if(this.match_RuleLine(context, token)) { + this.endRule(context); + this.endRule(context); + this.endRule(context); + this.startRule(context, RuleType.Rule); + this.startRule(context, RuleType.RuleHeader); + this.build(context, token); + return 23; + } + if(this.match_Comment(context, token)) { + this.build(context, token); + return 54; + } + if(this.match_Empty(context, token)) { + this.build(context, token); + return 54; + } + + const expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; const error = token.isEof ? UnexpectedEOFException.create(token, expectedTokens) : UnexpectedTokenException.create(token, expectedTokens); if (this.stopAtFirstError) throw error; this.addError(context, error); - return 42; } + return 54; } private match_EOF(context: Context, token: IToken) { diff --git a/javascript/src/pickles/compile.ts b/javascript/src/pickles/compile.ts index 94ff1e0c3..9d94ca2da 100644 --- a/javascript/src/pickles/compile.ts +++ b/javascript/src/pickles/compile.ts @@ -212,6 +212,12 @@ function createPickleArguments( variableCells: readonly messages.TableCell[], valueCells: readonly messages.TableCell[] ): messages.PickleStepArgument | undefined { + if (!step.dataTable && !step.docString) { + return undefined + } + + const result: messages.PickleStepArgument = {} + if (step.dataTable) { const argument = step.dataTable const table: messages.PickleTable = { @@ -225,8 +231,10 @@ function createPickleArguments( } }), } - return { dataTable: table } - } else if (step.docString) { + result.dataTable = table + } + + if (step.docString) { const argument = step.docString const docString: messages.PickleDocString = { content: interpolate(argument.content, variableCells, valueCells), @@ -234,8 +242,10 @@ function createPickleArguments( if (argument.mediaType) { docString.mediaType = interpolate(argument.mediaType, variableCells, valueCells) } - return { docString } + result.docString = docString } + + return result } function interpolate( diff --git a/perl/lib/Gherkin/Generated/Parser.pm b/perl/lib/Gherkin/Generated/Parser.pm index 309d5d408..a5339f0f1 100644 --- a/perl/lib/Gherkin/Generated/Parser.pm +++ b/perl/lib/Gherkin/Generated/Parser.pm @@ -42,6 +42,7 @@ my %states_to_match_names = ( 31 => "match_token_at_31", 32 => "match_token_at_32", 33 => "match_token_at_33", + 34 => "match_token_at_34", 35 => "match_token_at_35", 36 => "match_token_at_36", 37 => "match_token_at_37", @@ -49,7 +50,18 @@ my %states_to_match_names = ( 39 => "match_token_at_39", 40 => "match_token_at_40", 41 => "match_token_at_41", - 42 => "match_token_at_42", + 43 => "match_token_at_43", + 44 => "match_token_at_44", + 45 => "match_token_at_45", + 46 => "match_token_at_46", + 47 => "match_token_at_47", + 48 => "match_token_at_48", + 49 => "match_token_at_49", + 50 => "match_token_at_50", + 51 => "match_token_at_51", + 52 => "match_token_at_52", + 53 => "match_token_at_53", + 54 => "match_token_at_54", ); ## use critic @@ -115,7 +127,7 @@ sub match_token_at_0 { if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Language($token); if ($ok) { @@ -258,7 +270,7 @@ sub match_token_at_3 { $self->_end_rule($context, 'FeatureHeader'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { @@ -289,7 +301,7 @@ sub match_token_at_3 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -300,7 +312,7 @@ sub match_token_at_3 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -309,7 +321,7 @@ sub match_token_at_3 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -318,7 +330,7 @@ sub match_token_at_3 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { @@ -350,7 +362,7 @@ sub match_token_at_4 { $self->_end_rule($context, 'FeatureHeader'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { @@ -376,7 +388,7 @@ sub match_token_at_4 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -388,7 +400,7 @@ sub match_token_at_4 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -398,7 +410,7 @@ sub match_token_at_4 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -408,7 +420,7 @@ sub match_token_at_4 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { @@ -438,7 +450,7 @@ sub match_token_at_5 { $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { @@ -468,7 +480,7 @@ sub match_token_at_5 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -479,7 +491,7 @@ sub match_token_at_5 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -488,7 +500,7 @@ sub match_token_at_5 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -497,7 +509,7 @@ sub match_token_at_5 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { @@ -529,7 +541,7 @@ sub match_token_at_6 { $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { @@ -554,7 +566,7 @@ sub match_token_at_6 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -566,7 +578,7 @@ sub match_token_at_6 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -576,7 +588,7 @@ sub match_token_at_6 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -586,7 +598,7 @@ sub match_token_at_6 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { @@ -617,7 +629,7 @@ sub match_token_at_7 { $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { @@ -631,7 +643,7 @@ sub match_token_at_7 { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DocString'); $self->_build($context, $token); - return 41; + return 52; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -650,7 +662,7 @@ sub match_token_at_7 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -662,7 +674,7 @@ sub match_token_at_7 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -672,7 +684,7 @@ sub match_token_at_7 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -682,7 +694,7 @@ sub match_token_at_7 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { @@ -708,7 +720,7 @@ sub match_token_at_7 { return 7; } -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 sub match_token_at_8 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); @@ -720,7 +732,7 @@ sub match_token_at_8 { $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { @@ -728,6 +740,14 @@ sub match_token_at_8 { $self->_build($context, $token); return 8; } + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_start_rule($context, 'DocString'); + $self->_build($context, $token); + return 9; + } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; @@ -747,7 +767,7 @@ sub match_token_at_8 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -760,7 +780,7 @@ sub match_token_at_8 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -771,7 +791,7 @@ sub match_token_at_8 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -782,7 +802,7 @@ sub match_token_at_8 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { @@ -800,58 +820,180 @@ sub match_token_at_8 { $err = $self->_construct_parser_error( $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", + ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); return 8; } -# GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 sub match_token_at_9 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_TagLine($token); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 10; + } + ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); return 9; } + + + $err = $self->_construct_parser_error( + $token, + ["#DocStringSeparator", "#Other"], + "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 9; +} + +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +sub match_token_at_10 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 7; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 11; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'Tags'); + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); + return 12; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 10; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); return 10; } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 10; +} + +# GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 +sub match_token_at_11 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 11; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'Tags'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 12; + } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 9; + return 11; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 9; + return 11; } $err = $self->_construct_parser_error( $token, ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"], - "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0", + "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0", ); $self->add_error( $context, $err ); - return 9; + return 11; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -sub match_token_at_10 { +sub match_token_at_12 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -861,27 +1003,27 @@ sub match_token_at_10 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 11; + return 13; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 12; + return 14; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -890,7 +1032,7 @@ sub match_token_at_10 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -902,7 +1044,7 @@ sub match_token_at_10 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -914,7 +1056,7 @@ sub match_token_at_10 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -922,7 +1064,7 @@ sub match_token_at_10 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -932,7 +1074,7 @@ sub match_token_at_10 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -942,29 +1084,29 @@ sub match_token_at_10 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 11; + return 13; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", + "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", ); $self->add_error( $context, $err ); - return 10; + return 12; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_11 { +sub match_token_at_13 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -975,13 +1117,13 @@ sub match_token_at_11 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 11; + return 13; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -989,7 +1131,7 @@ sub match_token_at_11 { $self->_end_rule($context, 'Description'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 12; + return 14; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -999,7 +1141,7 @@ sub match_token_at_11 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1012,7 +1154,7 @@ sub match_token_at_11 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1025,7 +1167,7 @@ sub match_token_at_11 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1034,7 +1176,7 @@ sub match_token_at_11 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1045,7 +1187,7 @@ sub match_token_at_11 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1056,28 +1198,28 @@ sub match_token_at_11 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 11; + return 13; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 11; + return 13; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -sub match_token_at_12 { +sub match_token_at_14 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1088,21 +1230,21 @@ sub match_token_at_12 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DataTable'); $self->_build($context, $token); - return 13; + return 15; } ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DocString'); $self->_build($context, $token); - return 39; + return 49; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -1110,7 +1252,7 @@ sub match_token_at_12 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 12; + return 14; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1120,7 +1262,7 @@ sub match_token_at_12 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1133,7 +1275,7 @@ sub match_token_at_12 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1146,7 +1288,7 @@ sub match_token_at_12 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1155,7 +1297,7 @@ sub match_token_at_12 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1166,7 +1308,7 @@ sub match_token_at_12 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1177,34 +1319,34 @@ sub match_token_at_12 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 12; + return 14; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 12; + return 14; } $err = $self->_construct_parser_error( $token, ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", + "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", ); $self->add_error( $context, $err ); - return 12; + return 14; } -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_13 { +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +sub match_token_at_15 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1216,13 +1358,21 @@ sub match_token_at_13 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 13; + return 15; + } + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_start_rule($context, 'DocString'); + $self->_build($context, $token); + return 16; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -1231,7 +1381,7 @@ sub match_token_at_13 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 12; + return 14; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1242,7 +1392,7 @@ sub match_token_at_13 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1256,7 +1406,7 @@ sub match_token_at_13 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1270,7 +1420,7 @@ sub match_token_at_13 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1280,7 +1430,7 @@ sub match_token_at_13 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1292,7 +1442,7 @@ sub match_token_at_13 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1304,41 +1454,190 @@ sub match_token_at_13 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 15; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 15; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0", + ); + $self->add_error( $context, $err ); + + return 15; +} + +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +sub match_token_at_16 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 17; + } + ($ok, $err) = $context->token_matcher->match_Other($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 16; + } + + + $err = $self->_construct_parser_error( + $token, + ["#DocStringSeparator", "#Other"], + "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 16; +} + +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +sub match_token_at_17 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 14; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_1($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 18; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 11; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Examples'); + $self->_build($context, $token); return 19; } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 12; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 13; + return 17; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 13; + return 17; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", + ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 13; + return 17; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_14 { +sub match_token_at_18 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 14; + return 18; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1346,34 +1645,34 @@ sub match_token_at_14 { $self->_end_rule($context, 'Tags'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 14; + return 18; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 14; + return 18; } $err = $self->_construct_parser_error( $token, ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"], - "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", + "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", ); $self->add_error( $context, $err ); - return 14; + return 18; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -sub match_token_at_15 { +sub match_token_at_19 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1385,27 +1684,27 @@ sub match_token_at_15 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 16; + return 20; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'ExamplesTable'); $self->_build($context, $token); - return 17; + return 21; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1416,7 +1715,7 @@ sub match_token_at_15 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1430,7 +1729,7 @@ sub match_token_at_15 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1444,7 +1743,7 @@ sub match_token_at_15 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1454,7 +1753,7 @@ sub match_token_at_15 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1466,7 +1765,7 @@ sub match_token_at_15 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1478,29 +1777,29 @@ sub match_token_at_15 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 16; + return 20; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", + "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", ); $self->add_error( $context, $err ); - return 15; + return 19; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_16 { +sub match_token_at_20 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1513,13 +1812,13 @@ sub match_token_at_16 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 16; + return 20; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { @@ -1527,7 +1826,7 @@ sub match_token_at_16 { $self->_end_rule($context, 'Description'); $self->_start_rule($context, 'ExamplesTable'); $self->_build($context, $token); - return 17; + return 21; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1539,7 +1838,7 @@ sub match_token_at_16 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1554,7 +1853,7 @@ sub match_token_at_16 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1569,7 +1868,7 @@ sub match_token_at_16 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1580,7 +1879,7 @@ sub match_token_at_16 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1593,7 +1892,7 @@ sub match_token_at_16 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1606,28 +1905,28 @@ sub match_token_at_16 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 16; + return 20; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 16; + return 20; } # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -sub match_token_at_17 { +sub match_token_at_21 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1640,13 +1939,13 @@ sub match_token_at_17 { $self->_end_rule($context, 'ScenarioDefinition'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 17; + return 21; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1658,7 +1957,7 @@ sub match_token_at_17 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 14; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1673,7 +1972,7 @@ sub match_token_at_17 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1688,7 +1987,7 @@ sub match_token_at_17 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -1699,7 +1998,7 @@ sub match_token_at_17 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 15; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1712,7 +2011,7 @@ sub match_token_at_17 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1725,75 +2024,75 @@ sub match_token_at_17 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 17; + return 21; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 17; + return 21; } $err = $self->_construct_parser_error( $token, ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", + "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 17; + return 21; } # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 -sub match_token_at_18 { +sub match_token_at_22 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'Tags'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 18; + return 22; } $err = $self->_construct_parser_error( $token, ["#TagLine", "#RuleLine", "#Comment", "#Empty"], - "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0", + "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0", ); $self->add_error( $context, $err ); - return 18; + return 22; } # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 -sub match_token_at_19 { +sub match_token_at_23 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1803,20 +2102,20 @@ sub match_token_at_19 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 20; + return 24; } ($ok, $err) = $context->token_matcher->match_BackgroundLine($token); if ($ok) { @@ -1824,7 +2123,7 @@ sub match_token_at_19 { $self->_end_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Background'); $self->_build($context, $token); - return 21; + return 25; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1834,7 +2133,7 @@ sub match_token_at_19 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1846,7 +2145,7 @@ sub match_token_at_19 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1855,7 +2154,7 @@ sub match_token_at_19 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1865,29 +2164,29 @@ sub match_token_at_19 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 20; + return 24; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0", + "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0", ); $self->add_error( $context, $err ); - return 19; + return 23; } # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_20 { +sub match_token_at_24 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1898,13 +2197,13 @@ sub match_token_at_20 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 20; + return 24; } ($ok, $err) = $context->token_matcher->match_BackgroundLine($token); if ($ok) { @@ -1913,7 +2212,7 @@ sub match_token_at_20 { $self->_end_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Background'); $self->_build($context, $token); - return 21; + return 25; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -1924,7 +2223,7 @@ sub match_token_at_20 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -1937,7 +2236,7 @@ sub match_token_at_20 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -1947,7 +2246,7 @@ sub match_token_at_20 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -1958,28 +2257,28 @@ sub match_token_at_20 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 20; + return 24; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 20; + return 24; } # GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 -sub match_token_at_21 { +sub match_token_at_25 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -1989,27 +2288,27 @@ sub match_token_at_21 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 21; + return 25; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 22; + return 26; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 23; + return 27; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2019,7 +2318,7 @@ sub match_token_at_21 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2031,7 +2330,7 @@ sub match_token_at_21 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2040,7 +2339,7 @@ sub match_token_at_21 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2050,29 +2349,29 @@ sub match_token_at_21 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 22; + return 26; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0", + "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0", ); $self->add_error( $context, $err ); - return 21; + return 25; } # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_22 { +sub match_token_at_26 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2083,13 +2382,13 @@ sub match_token_at_22 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 22; + return 26; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2097,7 +2396,7 @@ sub match_token_at_22 { $self->_end_rule($context, 'Description'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 23; + return 27; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2108,7 +2407,7 @@ sub match_token_at_22 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2121,7 +2420,7 @@ sub match_token_at_22 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2131,7 +2430,7 @@ sub match_token_at_22 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2142,28 +2441,28 @@ sub match_token_at_22 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 22; + return 26; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 22; + return 26; } # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 -sub match_token_at_23 { +sub match_token_at_27 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2174,21 +2473,21 @@ sub match_token_at_23 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DataTable'); $self->_build($context, $token); - return 24; + return 28; } ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DocString'); $self->_build($context, $token); - return 37; + return 46; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2196,7 +2495,7 @@ sub match_token_at_23 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 23; + return 27; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2207,7 +2506,7 @@ sub match_token_at_23 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2220,7 +2519,7 @@ sub match_token_at_23 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2230,7 +2529,7 @@ sub match_token_at_23 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2241,34 +2540,34 @@ sub match_token_at_23 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 23; + return 27; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 23; + return 27; } $err = $self->_construct_parser_error( $token, ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0", + "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0", ); $self->add_error( $context, $err ); - return 23; + return 27; } -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_24 { +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +sub match_token_at_28 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2280,13 +2579,21 @@ sub match_token_at_24 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 24; + return 28; + } + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_start_rule($context, 'DocString'); + $self->_build($context, $token); + return 29; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2295,7 +2602,7 @@ sub match_token_at_24 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 23; + return 27; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2307,7 +2614,7 @@ sub match_token_at_24 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2321,7 +2628,7 @@ sub match_token_at_24 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2332,7 +2639,7 @@ sub match_token_at_24 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2344,128 +2651,253 @@ sub match_token_at_24 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 24; + return 28; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 24; + return 28; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", + ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 24; + return 28; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_25 { +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +sub match_token_at_29 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_TagLine($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_build($context, $token); - return 25; - } - ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'Tags'); - $self->_start_rule($context, 'Scenario'); - $self->_build($context, $token); - return 26; - } - ($ok, $err) = $context->token_matcher->match_Comment($token); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 25; + return 30; } - ($ok, $err) = $context->token_matcher->match_Empty($token); + ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 25; + return 29; } $err = $self->_construct_parser_error( $token, - ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"], - "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0", + ["#DocStringSeparator", "#Other"], + "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 25; + return 29; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 -sub match_token_at_26 { +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +sub match_token_at_30 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; - } - ($ok, $err) = $context->token_matcher->match_Empty($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_build($context, $token); - return 26; - } - ($ok, $err) = $context->token_matcher->match_Comment($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_start_rule($context, 'Description'); - $self->_build($context, $token); - return 27; + return 42; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 28; + return 27; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - if ($self->lookahead_1($context, $token)) { - $self->_start_rule($context, 'ExamplesDefinition'); + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'ScenarioDefinition'); - $self->_start_rule($context, 'Tags'); - $self->_build($context, $token); - return 25; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 30; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 30; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 30; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 +sub match_token_at_31 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 31; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'Tags'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 31; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 31; + } + + + $err = $self->_construct_parser_error( + $token, + ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"], + "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0", + ); + $self->add_error( $context, $err ); + + return 31; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 +sub match_token_at_32 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_start_rule($context, 'Description'); + $self->_build($context, $token); + return 33; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 34; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_1($context, $token)) { + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 38; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2478,7 +2910,7 @@ sub match_token_at_26 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -2486,7 +2918,7 @@ sub match_token_at_26 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2496,7 +2928,7 @@ sub match_token_at_26 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2507,29 +2939,29 @@ sub match_token_at_26 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 27; + return 33; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", + "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0", ); $self->add_error( $context, $err ); - return 26; + return 32; } # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_27 { +sub match_token_at_33 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2541,13 +2973,13 @@ sub match_token_at_27 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 27; + return 33; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2555,7 +2987,7 @@ sub match_token_at_27 { $self->_end_rule($context, 'Description'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 28; + return 34; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2565,7 +2997,7 @@ sub match_token_at_27 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2578,7 +3010,7 @@ sub match_token_at_27 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2592,7 +3024,7 @@ sub match_token_at_27 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -2601,7 +3033,7 @@ sub match_token_at_27 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2612,7 +3044,7 @@ sub match_token_at_27 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2624,28 +3056,28 @@ sub match_token_at_27 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 27; + return 33; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 27; + return 33; } # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 -sub match_token_at_28 { +sub match_token_at_34 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2657,21 +3089,21 @@ sub match_token_at_28 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DataTable'); $self->_build($context, $token); - return 29; + return 35; } ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'DocString'); $self->_build($context, $token); - return 35; + return 43; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2679,7 +3111,7 @@ sub match_token_at_28 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 28; + return 34; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2689,7 +3121,7 @@ sub match_token_at_28 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2702,7 +3134,7 @@ sub match_token_at_28 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2716,7 +3148,7 @@ sub match_token_at_28 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -2725,7 +3157,7 @@ sub match_token_at_28 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2736,7 +3168,7 @@ sub match_token_at_28 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2748,34 +3180,34 @@ sub match_token_at_28 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 28; + return 34; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 28; + return 34; } $err = $self->_construct_parser_error( $token, ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", + "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0", ); $self->add_error( $context, $err ); - return 28; + return 34; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 -sub match_token_at_29 { +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 +sub match_token_at_35 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2788,13 +3220,21 @@ sub match_token_at_29 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 29; + return 35; + } + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_start_rule($context, 'DocString'); + $self->_build($context, $token); + return 36; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -2803,7 +3243,7 @@ sub match_token_at_29 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 28; + return 34; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2814,7 +3254,7 @@ sub match_token_at_29 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2828,7 +3268,7 @@ sub match_token_at_29 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -2843,7 +3283,7 @@ sub match_token_at_29 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -2853,7 +3293,7 @@ sub match_token_at_29 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -2865,7 +3305,7 @@ sub match_token_at_29 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -2878,76 +3318,228 @@ sub match_token_at_29 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 29; + return 35; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 29; + return 35; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0", + ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 29; + return 35; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 -sub match_token_at_30 { +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 +sub match_token_at_36 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_TagLine($token); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 30; + return 37; } - ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + ($ok, $err) = $context->token_matcher->match_Other($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 36; + } + + + $err = $self->_construct_parser_error( + $token, + ["#DocStringSeparator", "#Other"], + "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 36; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 +sub match_token_at_37 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 34; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_1($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 38; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Examples'); + $self->_build($context, $token); + return 39; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 37; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 37; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 37; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 +sub match_token_at_38 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 38; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'Tags'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 30; + return 38; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 30; + return 38; } $err = $self->_construct_parser_error( $token, ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"], - "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", + "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0", ); $self->add_error( $context, $err ); - return 30; + return 38; } # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 -sub match_token_at_31 { +sub match_token_at_39 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -2960,27 +3552,27 @@ sub match_token_at_31 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 32; + return 40; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'ExamplesTable'); $self->_build($context, $token); - return 33; + return 41; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -2991,7 +3583,7 @@ sub match_token_at_31 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3005,7 +3597,7 @@ sub match_token_at_31 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3020,7 +3612,7 @@ sub match_token_at_31 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -3030,7 +3622,7 @@ sub match_token_at_31 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -3042,7 +3634,7 @@ sub match_token_at_31 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -3055,29 +3647,29 @@ sub match_token_at_31 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_start_rule($context, 'Description'); $self->_build($context, $token); - return 32; + return 40; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", + "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0", ); $self->add_error( $context, $err ); - return 31; + return 39; } # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 -sub match_token_at_32 { +sub match_token_at_40 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -3091,13 +3683,13 @@ sub match_token_at_32 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 32; + return 40; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { @@ -3105,7 +3697,7 @@ sub match_token_at_32 { $self->_end_rule($context, 'Description'); $self->_start_rule($context, 'ExamplesTable'); $self->_build($context, $token); - return 33; + return 41; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -3117,7 +3709,7 @@ sub match_token_at_32 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3132,7 +3724,7 @@ sub match_token_at_32 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3148,7 +3740,7 @@ sub match_token_at_32 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -3159,7 +3751,7 @@ sub match_token_at_32 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -3172,7 +3764,7 @@ sub match_token_at_32 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -3186,28 +3778,28 @@ sub match_token_at_32 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 32; + return 40; } $err = $self->_construct_parser_error( $token, ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"], - "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", + "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0", ); $self->add_error( $context, $err ); - return 32; + return 40; } # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 -sub match_token_at_33 { +sub match_token_at_41 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -3221,13 +3813,13 @@ sub match_token_at_33 { $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 33; + return 41; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -3239,7 +3831,7 @@ sub match_token_at_33 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 38; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3254,7 +3846,7 @@ sub match_token_at_33 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 31; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3270,7 +3862,7 @@ sub match_token_at_33 { $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -3281,7 +3873,7 @@ sub match_token_at_33 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 39; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -3294,7 +3886,7 @@ sub match_token_at_33 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 32; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -3308,62 +3900,588 @@ sub match_token_at_33 { $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 41; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 41; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", + ); + $self->add_error( $context, $err ); + + return 41; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +sub match_token_at_43 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 44; + } + ($ok, $err) = $context->token_matcher->match_Other($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 43; + } + + + $err = $self->_construct_parser_error( + $token, + ["#DocStringSeparator", "#Other"], + "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 43; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +sub match_token_at_44 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_TableRow($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_start_rule($context, 'DataTable'); + $self->_build($context, $token); + return 45; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 34; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_1($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 38; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Examples'); + $self->_build($context, $token); + return 39; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 44; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 44; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 44; +} + +# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +sub match_token_at_45 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_TableRow($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 45; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 34; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_1($context, $token)) { + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 38; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Examples'); + $self->_build($context, $token); + return 39; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 45; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 45; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0", + ); + $self->add_error( $context, $err ); + + return 45; +} + +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +sub match_token_at_46 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 47; + } + ($ok, $err) = $context->token_matcher->match_Other($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 46; + } + + + $err = $self->_construct_parser_error( + $token, + ["#DocStringSeparator", "#Other"], + "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 46; +} + +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +sub match_token_at_47 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_TableRow($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_start_rule($context, 'DataTable'); + $self->_build($context, $token); + return 48; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 27; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; + } + ($ok, $err) = $context->token_matcher->match_Comment($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 47; + } + ($ok, $err) = $context->token_matcher->match_Empty($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 47; + } + + + $err = $self->_construct_parser_error( + $token, + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0", + ); + $self->add_error( $context, $err ); + + return 47; +} + +# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +sub match_token_at_48 { + my ( $self, $token, $context ) = @_; + my ( $ok, $err ); + ($ok, $err) = $context->token_matcher->match_EOF($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Feature'); + $self->_build($context, $token); + return 42; + } + ($ok, $err) = $context->token_matcher->match_TableRow($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_build($context, $token); + return 48; + } + ($ok, $err) = $context->token_matcher->match_StepLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'Step'); + $self->_build($context, $token); + return 27; + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + if ($self->lookahead_0($context, $token)) { + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 31; + } + } + ($ok, $err) = $context->token_matcher->match_TagLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_start_rule($context, 'Tags'); + $self->_build($context, $token); + return 22; + } + ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_start_rule($context, 'ScenarioDefinition'); + $self->_start_rule($context, 'Scenario'); + $self->_build($context, $token); + return 32; + } + ($ok, $err) = $context->token_matcher->match_RuleLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Rule'); + $self->_start_rule($context, 'Rule'); + $self->_start_rule($context, 'RuleHeader'); + $self->_build($context, $token); + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 33; + return 48; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 33; + return 48; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0", + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 33; + return 48; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_35 { +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +sub match_token_at_49 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 36; + return 50; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 35; + return 49; } $err = $self->_construct_parser_error( $token, ["#DocStringSeparator", "#Other"], - "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", + "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 35; + return 49; } -# GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_36 { +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +sub match_token_at_50 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -3373,10 +4491,17 @@ sub match_token_at_36 { $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Scenario'); $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; + } + ($ok, $err) = $context->token_matcher->match_TableRow($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DocString'); + $self->_start_rule($context, 'DataTable'); + $self->_build($context, $token); + return 51; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { @@ -3385,7 +4510,7 @@ sub match_token_at_36 { $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 28; + return 14; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -3396,7 +4521,7 @@ sub match_token_at_36 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 30; + return 18; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3410,7 +4535,7 @@ sub match_token_at_36 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3420,12 +4545,11 @@ sub match_token_at_36 { $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Scenario'); $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); if ($ok) { @@ -3435,7 +4559,7 @@ sub match_token_at_36 { $self->_start_rule($context, 'ExamplesDefinition'); $self->_start_rule($context, 'Examples'); $self->_build($context, $token); - return 31; + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { @@ -3447,7 +4571,7 @@ sub match_token_at_36 { $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { @@ -3456,191 +4580,192 @@ sub match_token_at_36 { $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Scenario'); $self->_end_rule($context, 'ScenarioDefinition'); - $self->_end_rule($context, 'Rule'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 36; + return 50; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 36; + return 50; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 36; + return 50; } -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_37 { +# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +sub match_token_at_51 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + ($ok, $err) = $context->token_matcher->match_EOF($token); if ($ok) { $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 38; + return 42; } - ($ok, $err) = $context->token_matcher->match_Other($token); + ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 37; + return 51; } - - - $err = $self->_construct_parser_error( - $token, - ["#DocStringSeparator", "#Other"], - "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - $self->add_error( $context, $err ); - - return 37; -} - -# GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_38 { - my ( $self, $token, $context ) = @_; - my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_EOF($token); + ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); - $self->_end_rule($context, 'Feature'); + $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 34; + return 14; } - ($ok, $err) = $context->token_matcher->match_StepLine($token); + ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + if ($self->lookahead_1($context, $token)) { + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 23; + return 18; + } } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 25; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; + } + ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); + if ($ok) { + $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_start_rule($context, 'ExamplesDefinition'); + $self->_start_rule($context, 'Examples'); + $self->_build($context, $token); + return 19; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 26; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Rule'); + $self->_end_rule($context, 'Scenario'); + $self->_end_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 38; + return 51; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 38; + return 51; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 38; + return 51; } -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_39 { +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 +sub match_token_at_52 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 40; + return 53; } ($ok, $err) = $context->token_matcher->match_Other($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 39; + return 52; } $err = $self->_construct_parser_error( $token, ["#DocStringSeparator", "#Other"], - "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", + "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 39; + return 52; } -# GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_40 { +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 +sub match_token_at_53 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); ($ok, $err) = $context->token_matcher->match_EOF($token); @@ -3648,32 +4773,27 @@ sub match_token_at_40 { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Background'); $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 42; } - ($ok, $err) = $context->token_matcher->match_StepLine($token); + ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'Step'); + $self->_start_rule($context, 'DataTable'); $self->_build($context, $token); - return 12; + return 54; } - ($ok, $err) = $context->token_matcher->match_TagLine($token); + ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - if ($self->lookahead_1($context, $token)) { $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Tags'); + $self->_start_rule($context, 'Step'); $self->_build($context, $token); - return 14; - } + return 7; } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { @@ -3681,12 +4801,11 @@ sub match_token_at_40 { if ($self->lookahead_0($context, $token)) { $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); @@ -3694,118 +4813,83 @@ sub match_token_at_40 { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; - } - ($ok, $err) = $context->token_matcher->match_ExamplesLine($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_start_rule($context, 'ExamplesDefinition'); - $self->_start_rule($context, 'Examples'); - $self->_build($context, $token); - return 15; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_end_rule($context, 'DocString'); $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Scenario'); - $self->_end_rule($context, 'ScenarioDefinition'); + $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 40; + return 53; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 40; + return 53; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0", ); $self->add_error( $context, $err ); - return 40; + return 53; } -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 -sub match_token_at_41 { +# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 +sub match_token_at_54 { my ( $self, $token, $context ) = @_; my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_DocStringSeparator($token); + ($ok, $err) = $context->token_matcher->match_EOF($token); if ($ok) { $self->add_error( $context, $err ) if $err; + $self->_end_rule($context, 'DataTable'); + $self->_end_rule($context, 'Step'); + $self->_end_rule($context, 'Background'); + $self->_end_rule($context, 'Feature'); $self->_build($context, $token); return 42; } - ($ok, $err) = $context->token_matcher->match_Other($token); - if ($ok) { - $self->add_error( $context, $err ) if $err; - $self->_build($context, $token); - return 41; - } - - - $err = $self->_construct_parser_error( - $token, - ["#DocStringSeparator", "#Other"], - "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0", - ); - $self->add_error( $context, $err ); - - return 41; -} - -# GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 -sub match_token_at_42 { - my ( $self, $token, $context ) = @_; - my ( $ok, $err ); - ($ok, $err) = $context->token_matcher->match_EOF($token); + ($ok, $err) = $context->token_matcher->match_TableRow($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); - $self->_end_rule($context, 'Step'); - $self->_end_rule($context, 'Background'); - $self->_end_rule($context, 'Feature'); $self->_build($context, $token); - return 34; + return 54; } ($ok, $err) = $context->token_matcher->match_StepLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); $self->_start_rule($context, 'Step'); $self->_build($context, $token); @@ -3815,71 +4899,71 @@ sub match_token_at_42 { if ($ok) { $self->add_error( $context, $err ) if $err; if ($self->lookahead_0($context, $token)) { - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 9; + return 11; } } ($ok, $err) = $context->token_matcher->match_TagLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_start_rule($context, 'Tags'); $self->_build($context, $token); - return 18; + return 22; } ($ok, $err) = $context->token_matcher->match_ScenarioLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'ScenarioDefinition'); $self->_start_rule($context, 'Scenario'); $self->_build($context, $token); - return 10; + return 12; } ($ok, $err) = $context->token_matcher->match_RuleLine($token); if ($ok) { $self->add_error( $context, $err ) if $err; - $self->_end_rule($context, 'DocString'); + $self->_end_rule($context, 'DataTable'); $self->_end_rule($context, 'Step'); $self->_end_rule($context, 'Background'); $self->_start_rule($context, 'Rule'); $self->_start_rule($context, 'RuleHeader'); $self->_build($context, $token); - return 19; + return 23; } ($ok, $err) = $context->token_matcher->match_Comment($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 42; + return 54; } ($ok, $err) = $context->token_matcher->match_Empty($token); if ($ok) { $self->add_error( $context, $err ) if $err; $self->_build($context, $token); - return 42; + return 54; } $err = $self->_construct_parser_error( $token, - ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], - "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0", + ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"], + "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0", ); $self->add_error( $context, $err ); - return 42; + return 54; } ## use critic diff --git a/php/src-generated/Parser.php b/php/src-generated/Parser.php index efadd5dab..a71b220b9 100644 --- a/php/src-generated/Parser.php +++ b/php/src-generated/Parser.php @@ -242,6 +242,7 @@ private function matchToken(int $state, Token $token, ParserContext $context): i 31 => $this->matchTokenAt_31($token, $context), 32 => $this->matchTokenAt_32($token, $context), 33 => $this->matchTokenAt_33($token, $context), + 34 => $this->matchTokenAt_34($token, $context), 35 => $this->matchTokenAt_35($token, $context), 36 => $this->matchTokenAt_36($token, $context), 37 => $this->matchTokenAt_37($token, $context), @@ -249,7 +250,18 @@ private function matchToken(int $state, Token $token, ParserContext $context): i 39 => $this->matchTokenAt_39($token, $context), 40 => $this->matchTokenAt_40($token, $context), 41 => $this->matchTokenAt_41($token, $context), - 42 => $this->matchTokenAt_42($token, $context), + 43 => $this->matchTokenAt_43($token, $context), + 44 => $this->matchTokenAt_44($token, $context), + 45 => $this->matchTokenAt_45($token, $context), + 46 => $this->matchTokenAt_46($token, $context), + 47 => $this->matchTokenAt_47($token, $context), + 48 => $this->matchTokenAt_48($token, $context), + 49 => $this->matchTokenAt_49($token, $context), + 50 => $this->matchTokenAt_50($token, $context), + 51 => $this->matchTokenAt_51($token, $context), + 52 => $this->matchTokenAt_52($token, $context), + 53 => $this->matchTokenAt_53($token, $context), + 54 => $this->matchTokenAt_54($token, $context), default => throw new \LogicException("Unknown state: $state"), }; } @@ -260,7 +272,7 @@ private function matchTokenAt_0(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->build($context, $token); - return 34; + return 42; } if ($this->match_Language($context, $token)) { $this->startRule($context, RuleType::Feature); @@ -372,7 +384,7 @@ private function matchTokenAt_3(Token $token, ParserContext $context): int $this->endRule($context, RuleType::FeatureHeader); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); @@ -395,7 +407,7 @@ private function matchTokenAt_3(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -404,21 +416,21 @@ private function matchTokenAt_3(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::FeatureHeader); $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::FeatureHeader); $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); @@ -445,7 +457,7 @@ private function matchTokenAt_4(Token $token, ParserContext $context): int $this->endRule($context, RuleType::FeatureHeader); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); @@ -465,7 +477,7 @@ private function matchTokenAt_4(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -475,7 +487,7 @@ private function matchTokenAt_4(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -483,7 +495,7 @@ private function matchTokenAt_4(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -491,7 +503,7 @@ private function matchTokenAt_4(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); @@ -516,7 +528,7 @@ private function matchTokenAt_5(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); @@ -538,7 +550,7 @@ private function matchTokenAt_5(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -547,21 +559,21 @@ private function matchTokenAt_5(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Background); $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Background); $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); @@ -588,7 +600,7 @@ private function matchTokenAt_6(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); @@ -607,7 +619,7 @@ private function matchTokenAt_6(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -617,7 +629,7 @@ private function matchTokenAt_6(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -625,7 +637,7 @@ private function matchTokenAt_6(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -633,7 +645,7 @@ private function matchTokenAt_6(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); @@ -659,7 +671,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::DataTable); @@ -669,7 +681,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int if ($this->match_DocStringSeparator($context, $token)) { $this->startRule($context, RuleType::DocString); $this->build($context, $token); - return 41; + return 52; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -684,7 +696,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -694,7 +706,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -702,7 +714,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -710,7 +722,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); @@ -732,7 +744,7 @@ private function matchTokenAt_7(Token $token, ParserContext $context): int return 7; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 private function matchTokenAt_8(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { @@ -741,12 +753,18 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); return 8; } + if ($this->match_DocStringSeparator($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->startRule($context, RuleType::DocString); + $this->build($context, $token); + return 9; + } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DataTable); $this->endRule($context, RuleType::Step); @@ -762,7 +780,7 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -773,7 +791,7 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -782,7 +800,7 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -791,7 +809,7 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); @@ -802,8 +820,8 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int return 8; } - $stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); @@ -813,29 +831,129 @@ private function matchTokenAt_8(Token $token, ParserContext $context): int return 8; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 private function matchTokenAt_9(Token $token, ParserContext $context): int { - if ($this->match_TagLine($context, $token)) { + if ($this->match_DocStringSeparator($context, $token)) { + $this->build($context, $token); + return 10; + } + if ($this->match_Other($context, $token)) { $this->build($context, $token); return 9; } + + $stateComment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + $expectedTokens = ["#DocStringSeparator", "#Other"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 9; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_10(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 7; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 11; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } if ($this->match_ScenarioLine($context, $token)) { - $this->endRule($context, RuleType::Tags); + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 12; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 10; + } + if ($this->match_Empty($context, $token)) { $this->build($context, $token); return 10; } + + $stateComment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 10; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + private function matchTokenAt_11(Token $token, ParserContext $context): int + { + if ($this->match_TagLine($context, $token)) { + $this->build($context, $token); + return 11; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::Tags); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 12; + } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 9; + return 11; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 9; + return 11; } - $stateComment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + $stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; $expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -843,39 +961,39 @@ private function matchTokenAt_9(Token $token, ParserContext $context): int $this->addError($context, $error); - return 9; + return 11; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private function matchTokenAt_10(Token $token, ParserContext $context): int + private function matchTokenAt_12(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Scenario); $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 10; + return 12; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 11; + return 13; } if ($this->match_StepLine($context, $token)) { $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 12; + return 14; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -885,7 +1003,7 @@ private function matchTokenAt_10(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -895,13 +1013,13 @@ private function matchTokenAt_10(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Scenario); @@ -909,7 +1027,7 @@ private function matchTokenAt_10(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Scenario); @@ -917,15 +1035,15 @@ private function matchTokenAt_10(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 11; + return 13; } - $stateComment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + $stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -933,11 +1051,11 @@ private function matchTokenAt_10(Token $token, ParserContext $context): int $this->addError($context, $error); - return 10; + return 12; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_11(Token $token, ParserContext $context): int + private function matchTokenAt_13(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -945,17 +1063,17 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 11; + return 13; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 12; + return 14; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -963,7 +1081,7 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -974,7 +1092,7 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -985,14 +1103,14 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1001,7 +1119,7 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1010,14 +1128,14 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 11; + return 13; } - $stateComment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1025,11 +1143,11 @@ private function matchTokenAt_11(Token $token, ParserContext $context): int $this->addError($context, $error); - return 11; + return 13; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private function matchTokenAt_12(Token $token, ParserContext $context): int + private function matchTokenAt_14(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1037,23 +1155,23 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::DataTable); $this->build($context, $token); - return 13; + return 15; } if ($this->match_DocStringSeparator($context, $token)) { $this->startRule($context, RuleType::DocString); $this->build($context, $token); - return 39; + return 49; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 12; + return 14; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -1061,7 +1179,7 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -1072,7 +1190,7 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -1083,14 +1201,14 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1099,7 +1217,7 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1108,18 +1226,18 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 12; + return 14; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 12; + return 14; } - $stateComment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + $stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1127,11 +1245,11 @@ private function matchTokenAt_12(Token $token, ParserContext $context): int $this->addError($context, $error); - return 12; + return 14; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_13(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private function matchTokenAt_15(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -1140,18 +1258,24 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); - return 13; + return 15; + } + if ($this->match_DocStringSeparator($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->startRule($context, RuleType::DocString); + $this->build($context, $token); + return 16; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DataTable); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 12; + return 14; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -1160,7 +1284,7 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -1172,7 +1296,7 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -1184,7 +1308,7 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -1192,7 +1316,7 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -1202,7 +1326,7 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -1212,51 +1336,174 @@ private function matchTokenAt_13(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 13; + return 15; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 13; + return 15; } - $stateComment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 13; + return 15; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_16(Token $token, ParserContext $context): int + { + if ($this->match_DocStringSeparator($context, $token)) { + $this->build($context, $token); + return 17; + } + if ($this->match_Other($context, $token)) { + $this->build($context, $token); + return 16; + } + + $stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + $expectedTokens = ["#DocStringSeparator", "#Other"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 16; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_17(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 14; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_1($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 18; + } + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 11; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ExamplesLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Examples); + $this->build($context, $token); + return 19; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 12; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 17; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 17; + } + + $stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 17; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_14(Token $token, ParserContext $context): int + private function matchTokenAt_18(Token $token, ParserContext $context): int { if ($this->match_TagLine($context, $token)) { $this->build($context, $token); - return 14; + return 18; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Tags); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 14; + return 18; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 14; + return 18; } - $stateComment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + $stateComment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; $expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1264,11 +1511,11 @@ private function matchTokenAt_14(Token $token, ParserContext $context): int $this->addError($context, $error); - return 14; + return 18; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private function matchTokenAt_15(Token $token, ParserContext $context): int + private function matchTokenAt_19(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -1277,21 +1524,21 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 15; + return 19; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 16; + return 20; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::ExamplesTable); $this->build($context, $token); - return 17; + return 21; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -1300,7 +1547,7 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -1312,7 +1559,7 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -1324,7 +1571,7 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -1332,7 +1579,7 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -1342,7 +1589,7 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -1352,15 +1599,15 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 16; + return 20; } - $stateComment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + $stateComment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1368,11 +1615,11 @@ private function matchTokenAt_15(Token $token, ParserContext $context): int $this->addError($context, $error); - return 15; + return 19; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_16(Token $token, ParserContext $context): int + private function matchTokenAt_20(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1382,17 +1629,17 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 16; + return 20; } if ($this->match_TableRow($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::ExamplesTable); $this->build($context, $token); - return 17; + return 21; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -1402,7 +1649,7 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -1415,7 +1662,7 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -1428,7 +1675,7 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1437,7 +1684,7 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1448,7 +1695,7 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1459,14 +1706,14 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 16; + return 20; } - $stateComment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1474,11 +1721,11 @@ private function matchTokenAt_16(Token $token, ParserContext $context): int $this->addError($context, $error); - return 16; + return 20; } // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private function matchTokenAt_17(Token $token, ParserContext $context): int + private function matchTokenAt_21(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -1488,11 +1735,11 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); - return 17; + return 21; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -1502,7 +1749,7 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -1515,7 +1762,7 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -1528,7 +1775,7 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -1537,7 +1784,7 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -1548,7 +1795,7 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -1559,18 +1806,18 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 17; + return 21; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 17; + return 21; } - $stateComment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + $stateComment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; $expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1578,31 +1825,31 @@ private function matchTokenAt_17(Token $token, ParserContext $context): int $this->addError($context, $error); - return 17; + return 21; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - private function matchTokenAt_18(Token $token, ParserContext $context): int + private function matchTokenAt_22(Token $token, ParserContext $context): int { if ($this->match_TagLine($context, $token)) { $this->build($context, $token); - return 18; + return 22; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Tags); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 18; + return 22; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 18; + return 22; } - $stateComment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; + $stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0"; $expectedTokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1610,33 +1857,33 @@ private function matchTokenAt_18(Token $token, ParserContext $context): int $this->addError($context, $error); - return 18; + return 22; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - private function matchTokenAt_19(Token $token, ParserContext $context): int + private function matchTokenAt_23(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::RuleHeader); $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 20; + return 24; } if ($this->match_BackgroundLine($context, $token)) { $this->endRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Background); $this->build($context, $token); - return 21; + return 25; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -1644,7 +1891,7 @@ private function matchTokenAt_19(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -1654,14 +1901,14 @@ private function matchTokenAt_19(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::RuleHeader); @@ -1669,15 +1916,15 @@ private function matchTokenAt_19(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 20; + return 24; } - $stateComment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; + $stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1685,11 +1932,11 @@ private function matchTokenAt_19(Token $token, ParserContext $context): int $this->addError($context, $error); - return 19; + return 23; } // GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_20(Token $token, ParserContext $context): int + private function matchTokenAt_24(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1697,18 +1944,18 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 20; + return 24; } if ($this->match_BackgroundLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->endRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Background); $this->build($context, $token); - return 21; + return 25; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -1717,7 +1964,7 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -1728,7 +1975,7 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1736,7 +1983,7 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1745,14 +1992,14 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 20; + return 24; } - $stateComment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1760,32 +2007,32 @@ private function matchTokenAt_20(Token $token, ParserContext $context): int $this->addError($context, $error); - return 20; + return 24; } // GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - private function matchTokenAt_21(Token $token, ParserContext $context): int + private function matchTokenAt_25(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 21; + return 25; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 22; + return 26; } if ($this->match_StepLine($context, $token)) { $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 23; + return 27; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -1793,7 +2040,7 @@ private function matchTokenAt_21(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -1803,14 +2050,14 @@ private function matchTokenAt_21(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Background); $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Background); @@ -1818,15 +2065,15 @@ private function matchTokenAt_21(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 22; + return 26; } - $stateComment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; + $stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1834,11 +2081,11 @@ private function matchTokenAt_21(Token $token, ParserContext $context): int $this->addError($context, $error); - return 21; + return 25; } // GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_22(Token $token, ParserContext $context): int + private function matchTokenAt_26(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1846,17 +2093,17 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 22; + return 26; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 23; + return 27; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -1865,7 +2112,7 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -1876,7 +2123,7 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1884,7 +2131,7 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -1893,14 +2140,14 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 22; + return 26; } - $stateComment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1908,11 +2155,11 @@ private function matchTokenAt_22(Token $token, ParserContext $context): int $this->addError($context, $error); - return 22; + return 26; } // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - private function matchTokenAt_23(Token $token, ParserContext $context): int + private function matchTokenAt_27(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1920,23 +2167,23 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::DataTable); $this->build($context, $token); - return 24; + return 28; } if ($this->match_DocStringSeparator($context, $token)) { $this->startRule($context, RuleType::DocString); $this->build($context, $token); - return 37; + return 46; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 23; + return 27; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -1945,7 +2192,7 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -1956,7 +2203,7 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1964,7 +2211,7 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -1973,18 +2220,18 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 23; + return 27; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 23; + return 27; } - $stateComment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; + $stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0"; $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -1992,11 +2239,11 @@ private function matchTokenAt_23(Token $token, ParserContext $context): int $this->addError($context, $error); - return 23; + return 27; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_24(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private function matchTokenAt_28(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2005,18 +2252,24 @@ private function matchTokenAt_24(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); - return 24; + return 28; + } + if ($this->match_DocStringSeparator($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->startRule($context, RuleType::DocString); + $this->build($context, $token); + return 29; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DataTable); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 23; + return 27; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -2026,7 +2279,7 @@ private function matchTokenAt_24(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2038,7 +2291,7 @@ private function matchTokenAt_24(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2047,7 +2300,7 @@ private function matchTokenAt_24(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2057,51 +2310,154 @@ private function matchTokenAt_24(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 24; + return 28; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 24; + return 28; } - $stateComment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 24; + return 28; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_29(Token $token, ParserContext $context): int + { + if ($this->match_DocStringSeparator($context, $token)) { + $this->build($context, $token); + return 30; + } + if ($this->match_Other($context, $token)) { + $this->build($context, $token); + return 29; + } + + $stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + $expectedTokens = ["#DocStringSeparator", "#Other"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 29; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_30(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 27; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 31; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 32; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 30; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 30; + } + + $stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 30; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_25(Token $token, ParserContext $context): int + private function matchTokenAt_31(Token $token, ParserContext $context): int { if ($this->match_TagLine($context, $token)) { $this->build($context, $token); - return 25; + return 31; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Tags); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 25; + return 31; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 25; + return 31; } - $stateComment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; + $stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0"; $expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2109,11 +2465,11 @@ private function matchTokenAt_25(Token $token, ParserContext $context): int $this->addError($context, $error); - return 25; + return 31; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - private function matchTokenAt_26(Token $token, ParserContext $context): int + private function matchTokenAt_32(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Scenario); @@ -2121,28 +2477,28 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 26; + return 32; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 27; + return 33; } if ($this->match_StepLine($context, $token)) { $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 28; + return 34; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2152,7 +2508,7 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2163,13 +2519,13 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Scenario); @@ -2177,7 +2533,7 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Scenario); @@ -2186,15 +2542,15 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 27; + return 33; } - $stateComment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; + $stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2202,11 +2558,11 @@ private function matchTokenAt_26(Token $token, ParserContext $context): int $this->addError($context, $error); - return 26; + return 32; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_27(Token $token, ParserContext $context): int + private function matchTokenAt_33(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2215,17 +2571,17 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 27; + return 33; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 28; + return 34; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2233,7 +2589,7 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2244,7 +2600,7 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2256,14 +2612,14 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2272,7 +2628,7 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2282,14 +2638,14 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 27; + return 33; } - $stateComment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2297,11 +2653,11 @@ private function matchTokenAt_27(Token $token, ParserContext $context): int $this->addError($context, $error); - return 27; + return 33; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - private function matchTokenAt_28(Token $token, ParserContext $context): int + private function matchTokenAt_34(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Step); @@ -2310,23 +2666,23 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::DataTable); $this->build($context, $token); - return 29; + return 35; } if ($this->match_DocStringSeparator($context, $token)) { $this->startRule($context, RuleType::DocString); $this->build($context, $token); - return 35; + return 43; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 28; + return 34; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2334,7 +2690,7 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2345,7 +2701,7 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2357,14 +2713,14 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -2373,7 +2729,7 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Step); @@ -2383,18 +2739,18 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 28; + return 34; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 28; + return 34; } - $stateComment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; + $stateComment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0"; $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2402,11 +2758,11 @@ private function matchTokenAt_28(Token $token, ParserContext $context): int $this->addError($context, $error); - return 28; + return 34; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - private function matchTokenAt_29(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + private function matchTokenAt_35(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2416,18 +2772,24 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); - return 29; + return 35; + } + if ($this->match_DocStringSeparator($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->startRule($context, RuleType::DocString); + $this->build($context, $token); + return 36; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DataTable); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 28; + return 34; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2436,7 +2798,7 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2448,7 +2810,7 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2461,7 +2823,7 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2469,7 +2831,7 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2479,7 +2841,7 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DataTable); @@ -2490,51 +2852,177 @@ private function matchTokenAt_29(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 29; + return 35; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 29; + return 35; } - $stateComment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0"; - $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 29; + return 35; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_36(Token $token, ParserContext $context): int + { + if ($this->match_DocStringSeparator($context, $token)) { + $this->build($context, $token); + return 37; + } + if ($this->match_Other($context, $token)) { + $this->build($context, $token); + return 36; + } + + $stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0"; + $expectedTokens = ["#DocStringSeparator", "#Other"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 36; + } + + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_37(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 34; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_1($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 38; + } + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 31; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ExamplesLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Examples); + $this->build($context, $token); + return 39; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 32; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 37; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 37; + } + + $stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 37; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - private function matchTokenAt_30(Token $token, ParserContext $context): int + private function matchTokenAt_38(Token $token, ParserContext $context): int { if ($this->match_TagLine($context, $token)) { $this->build($context, $token); - return 30; + return 38; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Tags); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 30; + return 38; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 30; + return 38; } - $stateComment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; + $stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0"; $expectedTokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2542,11 +3030,11 @@ private function matchTokenAt_30(Token $token, ParserContext $context): int $this->addError($context, $error); - return 30; + return 38; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - private function matchTokenAt_31(Token $token, ParserContext $context): int + private function matchTokenAt_39(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -2556,21 +3044,21 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 31; + return 39; } if ($this->match_Comment($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 32; + return 40; } if ($this->match_TableRow($context, $token)) { $this->startRule($context, RuleType::ExamplesTable); $this->build($context, $token); - return 33; + return 41; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2579,7 +3067,7 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2591,7 +3079,7 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2604,7 +3092,7 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -2612,7 +3100,7 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -2622,7 +3110,7 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Examples); @@ -2633,15 +3121,15 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->startRule($context, RuleType::Description); $this->build($context, $token); - return 32; + return 40; } - $stateComment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; + $stateComment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0"; $expectedTokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2649,11 +3137,11 @@ private function matchTokenAt_31(Token $token, ParserContext $context): int $this->addError($context, $error); - return 31; + return 39; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - private function matchTokenAt_32(Token $token, ParserContext $context): int + private function matchTokenAt_40(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2664,17 +3152,17 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 32; + return 40; } if ($this->match_TableRow($context, $token)) { $this->endRule($context, RuleType::Description); $this->startRule($context, RuleType::ExamplesTable); $this->build($context, $token); - return 33; + return 41; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2684,7 +3172,7 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2697,7 +3185,7 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2711,7 +3199,7 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2720,7 +3208,7 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2731,7 +3219,7 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::Description); @@ -2743,14 +3231,14 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 32; + return 40; } - $stateComment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; + $stateComment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0"; $expectedTokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2758,11 +3246,11 @@ private function matchTokenAt_32(Token $token, ParserContext $context): int $this->addError($context, $error); - return 32; + return 40; } // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - private function matchTokenAt_33(Token $token, ParserContext $context): int + private function matchTokenAt_41(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -2773,11 +3261,11 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; } if ($this->match_TableRow($context, $token)) { $this->build($context, $token); - return 33; + return 41; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2787,7 +3275,7 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2800,7 +3288,7 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2814,7 +3302,7 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -2823,7 +3311,7 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -2834,7 +3322,7 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::ExamplesTable); @@ -2846,18 +3334,18 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 33; + return 41; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 33; + return 41; } - $stateComment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; + $stateComment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0"; $expectedTokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2865,22 +3353,22 @@ private function matchTokenAt_33(Token $token, ParserContext $context): int $this->addError($context, $error); - return 33; + return 41; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_35(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_43(Token $token, ParserContext $context): int { if ($this->match_DocStringSeparator($context, $token)) { $this->build($context, $token); - return 36; + return 44; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 35; + return 43; } - $stateComment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + $stateComment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; $expectedTokens = ["#DocStringSeparator", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -2888,11 +3376,11 @@ private function matchTokenAt_35(Token $token, ParserContext $context): int $this->addError($context, $error); - return 35; + return 43; } - // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_36(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_44(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -2902,14 +3390,20 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->startRule($context, RuleType::DataTable); + $this->build($context, $token); + return 45; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DocString); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 28; + return 34; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -2918,7 +3412,7 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 30; + return 38; } } if ($this->match_TagLine($context, $token)) { @@ -2930,7 +3424,7 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -2943,7 +3437,7 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -2951,7 +3445,7 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 31; + return 39; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -2961,7 +3455,7 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -2972,41 +3466,148 @@ private function matchTokenAt_36(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 36; + return 44; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 36; + return 44; } - $stateComment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 36; + return 44; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_37(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private function matchTokenAt_45(Token $token, ParserContext $context): int { - if ($this->match_DocStringSeparator($context, $token)) { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 38; + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->build($context, $token); + return 45; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 34; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_1($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 38; + } + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 31; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ExamplesLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Examples); + $this->build($context, $token); + return 39; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 32; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 45; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 45; + } + + $stateComment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 45; + } + + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_46(Token $token, ParserContext $context): int + { + if ($this->match_DocStringSeparator($context, $token)) { + $this->build($context, $token); + return 47; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 37; + return 46; } - $stateComment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + $stateComment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; $expectedTokens = ["#DocStringSeparator", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -3014,11 +3615,11 @@ private function matchTokenAt_37(Token $token, ParserContext $context): int $this->addError($context, $error); - return 37; + return 46; } - // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_38(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_47(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3027,14 +3628,20 @@ private function matchTokenAt_38(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Rule); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->startRule($context, RuleType::DataTable); + $this->build($context, $token); + return 48; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DocString); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 23; + return 27; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_0($context)) { @@ -3044,7 +3651,7 @@ private function matchTokenAt_38(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 25; + return 31; } } if ($this->match_TagLine($context, $token)) { @@ -3056,7 +3663,7 @@ private function matchTokenAt_38(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3065,7 +3672,7 @@ private function matchTokenAt_38(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 26; + return 32; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3075,41 +3682,125 @@ private function matchTokenAt_38(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 38; + return 47; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 38; + return 47; } - $stateComment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 38; + return 47; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_39(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private function matchTokenAt_48(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->build($context, $token); + return 48; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 27; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 31; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 32; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Rule); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 48; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 48; + } + + $stateComment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 48; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_49(Token $token, ParserContext $context): int { if ($this->match_DocStringSeparator($context, $token)) { $this->build($context, $token); - return 40; + return 50; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 39; + return 49; } - $stateComment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + $stateComment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; $expectedTokens = ["#DocStringSeparator", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -3117,11 +3808,11 @@ private function matchTokenAt_39(Token $token, ParserContext $context): int $this->addError($context, $error); - return 39; + return 49; } - // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_40(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_50(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3130,14 +3821,20 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->endRule($context, RuleType::ScenarioDefinition); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->startRule($context, RuleType::DataTable); + $this->build($context, $token); + return 51; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DocString); $this->endRule($context, RuleType::Step); $this->startRule($context, RuleType::Step); $this->build($context, $token); - return 12; + return 14; } if ($this->match_TagLine($context, $token)) { if ($this->lookahead_1($context)) { @@ -3146,7 +3843,7 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 14; + return 18; } } if ($this->match_TagLine($context, $token)) { @@ -3158,7 +3855,7 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -3170,7 +3867,7 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ExamplesLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3178,7 +3875,7 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ExamplesDefinition); $this->startRule($context, RuleType::Examples); $this->build($context, $token); - return 15; + return 19; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3188,7 +3885,7 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3198,41 +3895,145 @@ private function matchTokenAt_40(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 50; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 50; + } + + $stateComment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 50; + } + + // GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private function matchTokenAt_51(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->endRule($context, RuleType::Feature); + $this->build($context, $token); + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->build($context, $token); + return 51; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 14; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_1($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 18; + } + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 11; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ExamplesLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::ExamplesDefinition); + $this->startRule($context, RuleType::Examples); + $this->build($context, $token); return 19; } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 12; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Scenario); + $this->endRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 40; + return 51; } if ($this->match_Empty($context, $token)) { $this->build($context, $token); - return 40; + return 51; } - $stateComment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 40; + return 51; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - private function matchTokenAt_41(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + private function matchTokenAt_52(Token $token, ParserContext $context): int { if ($this->match_DocStringSeparator($context, $token)) { $this->build($context, $token); - return 42; + return 53; } if ($this->match_Other($context, $token)) { $this->build($context, $token); - return 41; + return 52; } - $stateComment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0"; + $stateComment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0"; $expectedTokens = ["#DocStringSeparator", "#Other"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) @@ -3240,11 +4041,11 @@ private function matchTokenAt_41(Token $token, ParserContext $context): int $this->addError($context, $error); - return 41; + return 52; } - // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - private function matchTokenAt_42(Token $token, ParserContext $context): int + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + private function matchTokenAt_53(Token $token, ParserContext $context): int { if ($this->match_EOF($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3252,7 +4053,13 @@ private function matchTokenAt_42(Token $token, ParserContext $context): int $this->endRule($context, RuleType::Background); $this->endRule($context, RuleType::Feature); $this->build($context, $token); - return 34; + return 42; + } + if ($this->match_TableRow($context, $token)) { + $this->endRule($context, RuleType::DocString); + $this->startRule($context, RuleType::DataTable); + $this->build($context, $token); + return 54; } if ($this->match_StepLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3269,7 +4076,7 @@ private function matchTokenAt_42(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 9; + return 11; } } if ($this->match_TagLine($context, $token)) { @@ -3280,7 +4087,7 @@ private function matchTokenAt_42(Token $token, ParserContext $context): int $this->startRule($context, RuleType::RuleHeader); $this->startRule($context, RuleType::Tags); $this->build($context, $token); - return 18; + return 22; } if ($this->match_ScenarioLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3289,7 +4096,7 @@ private function matchTokenAt_42(Token $token, ParserContext $context): int $this->startRule($context, RuleType::ScenarioDefinition); $this->startRule($context, RuleType::Scenario); $this->build($context, $token); - return 10; + return 12; } if ($this->match_RuleLine($context, $token)) { $this->endRule($context, RuleType::DocString); @@ -3298,26 +4105,107 @@ private function matchTokenAt_42(Token $token, ParserContext $context): int $this->startRule($context, RuleType::Rule); $this->startRule($context, RuleType::RuleHeader); $this->build($context, $token); - return 19; + return 23; } if ($this->match_Comment($context, $token)) { $this->build($context, $token); - return 42; + return 53; } if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 53; + } + + $stateComment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $error = $token->isEOF() + ? new UnexpectedEofException($token, $expectedTokens, $stateComment) + : new UnexpectedTokenException($token, $expectedTokens, $stateComment); + + $this->addError($context, $error); + + return 53; + } + + // GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + private function matchTokenAt_54(Token $token, ParserContext $context): int + { + if ($this->match_EOF($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->endRule($context, RuleType::Feature); $this->build($context, $token); return 42; } + if ($this->match_TableRow($context, $token)) { + $this->build($context, $token); + return 54; + } + if ($this->match_StepLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->startRule($context, RuleType::Step); + $this->build($context, $token); + return 7; + } + if ($this->match_TagLine($context, $token)) { + if ($this->lookahead_0($context)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 11; + } + } + if ($this->match_TagLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->startRule($context, RuleType::Tags); + $this->build($context, $token); + return 22; + } + if ($this->match_ScenarioLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::ScenarioDefinition); + $this->startRule($context, RuleType::Scenario); + $this->build($context, $token); + return 12; + } + if ($this->match_RuleLine($context, $token)) { + $this->endRule($context, RuleType::DataTable); + $this->endRule($context, RuleType::Step); + $this->endRule($context, RuleType::Background); + $this->startRule($context, RuleType::Rule); + $this->startRule($context, RuleType::RuleHeader); + $this->build($context, $token); + return 23; + } + if ($this->match_Comment($context, $token)) { + $this->build($context, $token); + return 54; + } + if ($this->match_Empty($context, $token)) { + $this->build($context, $token); + return 54; + } - $stateComment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0"; - $expectedTokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; + $stateComment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0"; + $expectedTokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"]; $error = $token->isEOF() ? new UnexpectedEofException($token, $expectedTokens, $stateComment) : new UnexpectedTokenException($token, $expectedTokens, $stateComment); $this->addError($context, $error); - return 42; + return 54; } diff --git a/php/src-generated/Parser/RuleType.php b/php/src-generated/Parser/RuleType.php index 56fe0c619..b970072da 100644 --- a/php/src-generated/Parser/RuleType.php +++ b/php/src-generated/Parser/RuleType.php @@ -42,7 +42,9 @@ enum RuleType case Examples; // Examples! := #ExamplesLine DescriptionHelper ExamplesTable? case ExamplesTable; // ExamplesTable! := #TableRow #TableRow* case Step; // Step! := #StepLine StepArg? - case StepArg; // StepArg := (DataTable | DocString) + case StepArg; // StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) + case DataTableAndMaybeDocString; // DataTableAndMaybeDocString := DataTable DocString? + case DocStringAndMaybeDataTable; // DocStringAndMaybeDataTable := DocString DataTable? case DataTable; // DataTable! := #TableRow+ case DocString; // DocString! := #DocStringSeparator #Other* #DocStringSeparator case Tags; // Tags! := #TagLine+ diff --git a/php/src/PickleCompiler.php b/php/src/PickleCompiler.php index 1ba9f5c12..09423f43a 100644 --- a/php/src/PickleCompiler.php +++ b/php/src/PickleCompiler.php @@ -189,13 +189,12 @@ private function pickleStep(Step $step, array $variableCells = [], ?TableRow $va $astNodeIds = $valuesRow ? [$step->id, $valuesRow->id] : [$step->id]; - if ($step->dataTable) { - $argument = new PickleStepArgument(dataTable: $this->pickleDataTable($step->dataTable, $variableCells, $valueCells)); - } elseif ($step->docString) { - $argument = new PickleStepArgument(docString: $this->pickleDocString($step->docString, $variableCells, $valueCells)); - } else { - $argument = null; - } + $argument = ($step->dataTable || $step->docString) + ? new PickleStepArgument( + docString: $step->docString ? $this->pickleDocString($step->docString, $variableCells, $valueCells) : null, + dataTable: $step->dataTable ? $this->pickleDataTable($step->dataTable, $variableCells, $valueCells) : null, + ) + : null; $this->lastKeywordType = $step->keywordType === Step\KeywordType::CONJUNCTION diff --git a/python/src/gherkin/ast_builder.py b/python/src/gherkin/ast_builder.py index 2e0d067b2..75321e796 100644 --- a/python/src/gherkin/ast_builder.py +++ b/python/src/gherkin/ast_builder.py @@ -164,15 +164,6 @@ def transform_node( ): if node.rule_type == "Step": step_line = node.get_token("StepLine") - step_argument_type = "dummy_type" - step_argument = None - if node.get_single("DataTable"): - step_argument_type = "dataTable" - step_argument = node.get_single("DataTable") - elif node.get_single("DocString"): - step_argument_type = "docString" - step_argument = node.get_single("DocString") - return self.reject_nones( { "id": self.id_generator.get_next_id(), @@ -180,7 +171,8 @@ def transform_node( "keyword": step_line.matched_keyword, "keywordType": step_line.matched_keyword_type, "text": step_line.matched_text, - step_argument_type: step_argument, + "dataTable": node.get_single("DataTable"), + "docString": node.get_single("DocString"), }, ) if node.rule_type == "DocString": diff --git a/python/src/gherkin/parser.py b/python/src/gherkin/parser.py index f9819093c..2c59dc43f 100644 --- a/python/src/gherkin/parser.py +++ b/python/src/gherkin/parser.py @@ -49,7 +49,9 @@ "Examples", # Examples! := #ExamplesLine DescriptionHelper ExamplesTable? "ExamplesTable", # ExamplesTable! := #TableRow #TableRow* "Step", # Step! := #StepLine StepArg? - "StepArg", # StepArg := (DataTable | DocString) + "StepArg", # StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) + "DataTableAndMaybeDocString", # DataTableAndMaybeDocString := DataTable DocString? + "DocStringAndMaybeDataTable", # DocStringAndMaybeDataTable := DocString DataTable? "DataTable", # DataTable! := #TableRow+ "DocString", # DocString! := #DocStringSeparator #Other* #DocStringSeparator "Tags", # Tags! := #TagLine+ @@ -306,6 +308,7 @@ def match_token(self, state: int, token: Token, context: ParserContext) -> int: 31: self.match_token_at_31, 32: self.match_token_at_32, 33: self.match_token_at_33, + 34: self.match_token_at_34, 35: self.match_token_at_35, 36: self.match_token_at_36, 37: self.match_token_at_37, @@ -313,7 +316,18 @@ def match_token(self, state: int, token: Token, context: ParserContext) -> int: 39: self.match_token_at_39, 40: self.match_token_at_40, 41: self.match_token_at_41, - 42: self.match_token_at_42, + 43: self.match_token_at_43, + 44: self.match_token_at_44, + 45: self.match_token_at_45, + 46: self.match_token_at_46, + 47: self.match_token_at_47, + 48: self.match_token_at_48, + 49: self.match_token_at_49, + 50: self.match_token_at_50, + 51: self.match_token_at_51, + 52: self.match_token_at_52, + 53: self.match_token_at_53, + 54: self.match_token_at_54, } if state not in state_map: @@ -325,7 +339,7 @@ def match_token(self, state: int, token: Token, context: ParserContext) -> int: def match_token_at_0(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.build(context, token) - return 34 + return 42 if self.match_Language(context, token): self.start_rule(context, "Feature") self.start_rule(context, "FeatureHeader") @@ -440,7 +454,7 @@ def match_token_at_3(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "FeatureHeader") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) return 3 @@ -459,26 +473,26 @@ def match_token_at_3(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "FeatureHeader") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "FeatureHeader") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "FeatureHeader") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) @@ -512,7 +526,7 @@ def match_token_at_4(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "FeatureHeader") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) return 4 @@ -529,7 +543,7 @@ def match_token_at_4(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "FeatureHeader") @@ -537,21 +551,21 @@ def match_token_at_4(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "FeatureHeader") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "FeatureHeader") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) return 4 @@ -582,7 +596,7 @@ def match_token_at_5(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Background") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) return 5 @@ -600,26 +614,26 @@ def match_token_at_5(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Background") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Background") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) @@ -653,7 +667,7 @@ def match_token_at_6(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Background") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) return 6 @@ -669,7 +683,7 @@ def match_token_at_6(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") @@ -677,21 +691,21 @@ def match_token_at_6(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) return 6 @@ -723,7 +737,7 @@ def match_token_at_7(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Background") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.start_rule(context, "DataTable") self.build(context, token) @@ -731,7 +745,7 @@ def match_token_at_7(self, token: Token, context: ParserContext) -> int: if self.match_DocStringSeparator(context, token): self.start_rule(context, "DocString") self.build(context, token) - return 41 + return 52 if self.match_StepLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "Step") @@ -744,7 +758,7 @@ def match_token_at_7(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") @@ -752,21 +766,21 @@ def match_token_at_7(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) return 7 @@ -796,7 +810,7 @@ def match_token_at_7(self, token: Token, context: ParserContext) -> int: self.add_error(context, error) return 7 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 def match_token_at_8(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DataTable") @@ -804,10 +818,15 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Background") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) return 8 + if self.match_DocStringSeparator(context, token): + self.end_rule(context, "DataTable") + self.start_rule(context, "DocString") + self.build(context, token) + return 9 if self.match_StepLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -822,7 +841,7 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -831,7 +850,7 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -839,7 +858,7 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -847,7 +866,7 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) return 8 @@ -855,10 +874,11 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.build(context, token) return 8 - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", + "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", @@ -876,24 +896,124 @@ def match_token_at_8(self, token: Token, context: ParserContext) -> int: self.add_error(context, error) return 8 - # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 def match_token_at_9(self, token: Token, context: ParserContext) -> int: - if self.match_TagLine(context, token): + if self.match_DocStringSeparator(context, token): + self.build(context, token) + return 10 + if self.match_Other(context, token): self.build(context, token) return 9 + + state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#DocStringSeparator", + "#Other", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 9 + + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_10(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_StepLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 7 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 11 + if self.match_TagLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 if self.match_ScenarioLine(context, token): - self.end_rule(context, "Tags") + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") + self.build(context, token) + return 12 + if self.match_RuleLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 10 + if self.match_Empty(context, token): self.build(context, token) return 10 + + state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#StepLine", + "#TagLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 10 + + # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + def match_token_at_11(self, token: Token, context: ParserContext) -> int: + if self.match_TagLine(context, token): + self.build(context, token) + return 11 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "Tags") + self.start_rule(context, "Scenario") + self.build(context, token) + return 12 if self.match_Comment(context, token): self.build(context, token) - return 9 + return 11 if self.match_Empty(context, token): self.build(context, token) - return 9 + return 11 - state_comment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" # fmt: skip + state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" # fmt: skip expected_tokens = [ "#TagLine", "#ScenarioLine", @@ -908,33 +1028,33 @@ def match_token_at_9(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 9 + return 11 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_10(self, token: Token, context: ParserContext) -> int: + def match_token_at_12(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 10 + return 12 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 11 + return 13 if self.match_StepLine(context, token): self.start_rule(context, "Step") self.build(context, token) - return 12 + return 14 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Scenario") @@ -942,7 +1062,7 @@ def match_token_at_10(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") @@ -950,32 +1070,32 @@ def match_token_at_10(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 11 + return 13 - state_comment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" # fmt: skip + state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -995,32 +1115,32 @@ def match_token_at_10(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 10 + return 12 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_11(self, token: Token, context: ParserContext) -> int: + def match_token_at_13(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 11 + return 13 if self.match_StepLine(context, token): self.end_rule(context, "Description") self.start_rule(context, "Step") self.build(context, token) - return 12 + return 14 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -1029,7 +1149,7 @@ def match_token_at_11(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -1038,13 +1158,13 @@ def match_token_at_11(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -1052,7 +1172,7 @@ def match_token_at_11(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -1060,12 +1180,12 @@ def match_token_at_11(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 11 + return 13 - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -1084,37 +1204,37 @@ def match_token_at_11(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 11 + return 13 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_12(self, token: Token, context: ParserContext) -> int: + def match_token_at_14(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.start_rule(context, "DataTable") self.build(context, token) - return 13 + return 15 if self.match_DocStringSeparator(context, token): self.start_rule(context, "DocString") self.build(context, token) - return 39 + return 49 if self.match_StepLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 12 + return 14 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Step") @@ -1123,7 +1243,7 @@ def match_token_at_12(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -1132,13 +1252,13 @@ def match_token_at_12(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -1146,7 +1266,7 @@ def match_token_at_12(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -1154,15 +1274,15 @@ def match_token_at_12(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 12 + return 14 if self.match_Empty(context, token): self.build(context, token) - return 12 + return 14 - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" # fmt: skip + state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", @@ -1183,10 +1303,10 @@ def match_token_at_12(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 12 + return 14 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_13(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_15(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -1194,16 +1314,21 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) - return 13 + return 15 + if self.match_DocStringSeparator(context, token): + self.end_rule(context, "DataTable") + self.start_rule(context, "DocString") + self.build(context, token) + return 16 if self.match_StepLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 12 + return 14 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "DataTable") @@ -1211,7 +1336,7 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DataTable") @@ -1221,7 +1346,7 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -1231,14 +1356,14 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -1247,7 +1372,7 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -1256,18 +1381,19 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 13 + return 15 if self.match_Empty(context, token): self.build(context, token) - return 13 + return 15 - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", + "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", @@ -1284,26 +1410,147 @@ def match_token_at_13(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 13 + return 15 + + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_16(self, token: Token, context: ParserContext) -> int: + if self.match_DocStringSeparator(context, token): + self.build(context, token) + return 17 + if self.match_Other(context, token): + self.build(context, token) + return 16 + + state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#DocStringSeparator", + "#Other", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 16 + + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_17(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_StepLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 14 + if self.match_TagLine(context, token): + if self.lookahead_1(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 18 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 11 + if self.match_TagLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ExamplesLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Examples") + self.build(context, token) + return 19 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 12 + if self.match_RuleLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 17 + if self.match_Empty(context, token): + self.build(context, token) + return 17 + + state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#StepLine", + "#TagLine", + "#ExamplesLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 17 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_14(self, token: Token, context: ParserContext) -> int: + def match_token_at_18(self, token: Token, context: ParserContext) -> int: if self.match_TagLine(context, token): self.build(context, token) - return 14 + return 18 if self.match_ExamplesLine(context, token): self.end_rule(context, "Tags") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_Comment(context, token): self.build(context, token) - return 14 + return 18 if self.match_Empty(context, token): self.build(context, token) - return 14 + return 18 - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" # fmt: skip + state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" # fmt: skip expected_tokens = [ "#TagLine", "#ExamplesLine", @@ -1318,10 +1565,10 @@ def match_token_at_14(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 14 + return 18 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_15(self, token: Token, context: ParserContext) -> int: + def match_token_at_19(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -1329,18 +1576,18 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 15 + return 19 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 16 + return 20 if self.match_TableRow(context, token): self.start_rule(context, "ExamplesTable") self.build(context, token) - return 17 + return 21 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Examples") @@ -1348,7 +1595,7 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Examples") @@ -1358,7 +1605,7 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -1368,14 +1615,14 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -1384,7 +1631,7 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -1393,13 +1640,13 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 16 + return 20 - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" # fmt: skip + state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -1419,10 +1666,10 @@ def match_token_at_15(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 15 + return 19 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_16(self, token: Token, context: ParserContext) -> int: + def match_token_at_20(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -1431,15 +1678,15 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 16 + return 20 if self.match_TableRow(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesTable") self.build(context, token) - return 17 + return 21 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Description") @@ -1448,7 +1695,7 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -1459,7 +1706,7 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -1470,7 +1717,7 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -1478,7 +1725,7 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -1488,7 +1735,7 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -1498,12 +1745,12 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 16 + return 20 - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -1522,10 +1769,10 @@ def match_token_at_16(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 16 + return 20 # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_17(self, token: Token, context: ParserContext) -> int: + def match_token_at_21(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -1534,10 +1781,10 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) - return 17 + return 21 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "ExamplesTable") @@ -1546,7 +1793,7 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "ExamplesTable") @@ -1557,7 +1804,7 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -1568,7 +1815,7 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -1576,7 +1823,7 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -1586,7 +1833,7 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -1596,15 +1843,15 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 17 + return 21 if self.match_Empty(context, token): self.build(context, token) - return 17 + return 21 - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", @@ -1623,25 +1870,25 @@ def match_token_at_17(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 17 + return 21 # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - def match_token_at_18(self, token: Token, context: ParserContext) -> int: + def match_token_at_22(self, token: Token, context: ParserContext) -> int: if self.match_TagLine(context, token): self.build(context, token) - return 18 + return 22 if self.match_RuleLine(context, token): self.end_rule(context, "Tags") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 18 + return 22 if self.match_Empty(context, token): self.build(context, token) - return 18 + return 22 - state_comment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" # fmt: skip + state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" # fmt: skip expected_tokens = [ "#TagLine", "#RuleLine", @@ -1656,35 +1903,35 @@ def match_token_at_18(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 18 + return 22 # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - def match_token_at_19(self, token: Token, context: ParserContext) -> int: + def match_token_at_23(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "RuleHeader") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 20 + return 24 if self.match_BackgroundLine(context, token): self.end_rule(context, "RuleHeader") self.start_rule(context, "Background") self.build(context, token) - return 21 + return 25 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "RuleHeader") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "RuleHeader") self.end_rule(context, "Rule") @@ -1692,26 +1939,26 @@ def match_token_at_19(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "RuleHeader") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "RuleHeader") self.end_rule(context, "Rule") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 20 + return 24 - state_comment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" # fmt: skip + state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -1730,26 +1977,26 @@ def match_token_at_19(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 19 + return 23 # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_20(self, token: Token, context: ParserContext) -> int: + def match_token_at_24(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "RuleHeader") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 20 + return 24 if self.match_BackgroundLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "RuleHeader") self.start_rule(context, "Background") self.build(context, token) - return 21 + return 25 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -1757,7 +2004,7 @@ def match_token_at_20(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "RuleHeader") @@ -1766,14 +2013,14 @@ def match_token_at_20(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "RuleHeader") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "RuleHeader") @@ -1781,12 +2028,12 @@ def match_token_at_20(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 20 + return 24 - state_comment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -1804,34 +2051,34 @@ def match_token_at_20(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 20 + return 24 # GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - def match_token_at_21(self, token: Token, context: ParserContext) -> int: + def match_token_at_25(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Background") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 21 + return 25 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 22 + return 26 if self.match_StepLine(context, token): self.start_rule(context, "Step") self.build(context, token) - return 23 + return 27 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Background") self.end_rule(context, "Rule") @@ -1839,26 +2086,26 @@ def match_token_at_21(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Background") self.end_rule(context, "Rule") self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 22 + return 26 - state_comment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" # fmt: skip + state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -1877,25 +2124,25 @@ def match_token_at_21(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 21 + return 25 # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_22(self, token: Token, context: ParserContext) -> int: + def match_token_at_26(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 22 + return 26 if self.match_StepLine(context, token): self.end_rule(context, "Description") self.start_rule(context, "Step") self.build(context, token) - return 23 + return 27 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -1903,7 +2150,7 @@ def match_token_at_22(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") @@ -1912,14 +2159,14 @@ def match_token_at_22(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Background") @@ -1927,12 +2174,12 @@ def match_token_at_22(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 22 + return 26 - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -1950,30 +2197,30 @@ def match_token_at_22(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 22 + return 26 # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - def match_token_at_23(self, token: Token, context: ParserContext) -> int: + def match_token_at_27(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.start_rule(context, "DataTable") self.build(context, token) - return 24 + return 28 if self.match_DocStringSeparator(context, token): self.start_rule(context, "DocString") self.build(context, token) - return 37 + return 46 if self.match_StepLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 23 + return 27 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Step") @@ -1981,7 +2228,7 @@ def match_token_at_23(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") @@ -1990,14 +2237,14 @@ def match_token_at_23(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Background") @@ -2005,15 +2252,15 @@ def match_token_at_23(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 23 + return 27 if self.match_Empty(context, token): self.build(context, token) - return 23 + return 27 - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" # fmt: skip + state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", @@ -2033,10 +2280,10 @@ def match_token_at_23(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 23 + return 27 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_24(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_28(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2044,16 +2291,21 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) - return 24 + return 28 + if self.match_DocStringSeparator(context, token): + self.end_rule(context, "DataTable") + self.start_rule(context, "DocString") + self.build(context, token) + return 29 if self.match_StepLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 23 + return 27 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DataTable") @@ -2062,7 +2314,7 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2072,7 +2324,7 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2080,7 +2332,7 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2089,18 +2341,19 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 24 + return 28 if self.match_Empty(context, token): self.build(context, token) - return 24 + return 28 - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", + "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", @@ -2116,26 +2369,129 @@ def match_token_at_24(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 24 + return 28 + + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_29(self, token: Token, context: ParserContext) -> int: + if self.match_DocStringSeparator(context, token): + self.build(context, token) + return 30 + if self.match_Other(context, token): + self.build(context, token) + return 29 + + state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#DocStringSeparator", + "#Other", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 29 + + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_30(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_StepLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 27 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 31 + if self.match_TagLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 32 + if self.match_RuleLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 30 + if self.match_Empty(context, token): + self.build(context, token) + return 30 + + state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#StepLine", + "#TagLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 30 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_25(self, token: Token, context: ParserContext) -> int: + def match_token_at_31(self, token: Token, context: ParserContext) -> int: if self.match_TagLine(context, token): self.build(context, token) - return 25 + return 31 if self.match_ScenarioLine(context, token): self.end_rule(context, "Tags") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_Comment(context, token): self.build(context, token) - return 25 + return 31 if self.match_Empty(context, token): self.build(context, token) - return 25 + return 31 - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" # fmt: skip + state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" # fmt: skip expected_tokens = [ "#TagLine", "#ScenarioLine", @@ -2150,34 +2506,34 @@ def match_token_at_25(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 25 + return 31 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_26(self, token: Token, context: ParserContext) -> int: + def match_token_at_32(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 26 + return 32 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 27 + return 33 if self.match_StepLine(context, token): self.start_rule(context, "Step") self.build(context, token) - return 28 + return 34 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Scenario") @@ -2185,7 +2541,7 @@ def match_token_at_26(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") @@ -2194,19 +2550,19 @@ def match_token_at_26(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Scenario") self.end_rule(context, "ScenarioDefinition") @@ -2214,13 +2570,13 @@ def match_token_at_26(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 27 + return 33 - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" # fmt: skip + state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -2240,10 +2596,10 @@ def match_token_at_26(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 26 + return 32 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_27(self, token: Token, context: ParserContext) -> int: + def match_token_at_33(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -2251,22 +2607,22 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 27 + return 33 if self.match_StepLine(context, token): self.end_rule(context, "Description") self.start_rule(context, "Step") self.build(context, token) - return 28 + return 34 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -2275,7 +2631,7 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -2285,13 +2641,13 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -2299,7 +2655,7 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Scenario") @@ -2308,12 +2664,12 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 27 + return 33 - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -2332,10 +2688,10 @@ def match_token_at_27(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 27 + return 33 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_28(self, token: Token, context: ParserContext) -> int: + def match_token_at_34(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -2343,27 +2699,27 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.start_rule(context, "DataTable") self.build(context, token) - return 29 + return 35 if self.match_DocStringSeparator(context, token): self.start_rule(context, "DocString") self.build(context, token) - return 35 + return 43 if self.match_StepLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 28 + return 34 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Step") @@ -2372,7 +2728,7 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -2382,13 +2738,13 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -2396,7 +2752,7 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Step") self.end_rule(context, "Scenario") @@ -2405,15 +2761,15 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 28 + return 34 if self.match_Empty(context, token): self.build(context, token) - return 28 + return 34 - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" # fmt: skip + state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", @@ -2434,10 +2790,10 @@ def match_token_at_28(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 28 + return 34 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_29(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_35(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2446,16 +2802,21 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) - return 29 + return 35 + if self.match_DocStringSeparator(context, token): + self.end_rule(context, "DataTable") + self.start_rule(context, "DocString") + self.build(context, token) + return 36 if self.match_StepLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 28 + return 34 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "DataTable") @@ -2463,7 +2824,7 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DataTable") @@ -2473,7 +2834,7 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2484,14 +2845,14 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2500,7 +2861,7 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "DataTable") self.end_rule(context, "Step") @@ -2510,18 +2871,19 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 29 + return 35 if self.match_Empty(context, token): self.build(context, token) - return 29 + return 35 - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", + "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", @@ -2538,26 +2900,150 @@ def match_token_at_29(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 29 + return 35 + + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_36(self, token: Token, context: ParserContext) -> int: + if self.match_DocStringSeparator(context, token): + self.build(context, token) + return 37 + if self.match_Other(context, token): + self.build(context, token) + return 36 + + state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#DocStringSeparator", + "#Other", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 36 + + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_37(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Rule") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_StepLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 34 + if self.match_TagLine(context, token): + if self.lookahead_1(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 38 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 31 + if self.match_TagLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ExamplesLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Examples") + self.build(context, token) + return 39 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 32 + if self.match_RuleLine(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 37 + if self.match_Empty(context, token): + self.build(context, token) + return 37 + + state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#StepLine", + "#TagLine", + "#ExamplesLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 37 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_30(self, token: Token, context: ParserContext) -> int: + def match_token_at_38(self, token: Token, context: ParserContext) -> int: if self.match_TagLine(context, token): self.build(context, token) - return 30 + return 38 if self.match_ExamplesLine(context, token): self.end_rule(context, "Tags") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_Comment(context, token): self.build(context, token) - return 30 + return 38 if self.match_Empty(context, token): self.build(context, token) - return 30 + return 38 - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" # fmt: skip + state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" # fmt: skip expected_tokens = [ "#TagLine", "#ExamplesLine", @@ -2572,10 +3058,10 @@ def match_token_at_30(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 30 + return 38 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_31(self, token: Token, context: ParserContext) -> int: + def match_token_at_39(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -2584,18 +3070,18 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Empty(context, token): self.build(context, token) - return 31 + return 39 if self.match_Comment(context, token): self.start_rule(context, "Description") self.build(context, token) - return 32 + return 40 if self.match_TableRow(context, token): self.start_rule(context, "ExamplesTable") self.build(context, token) - return 33 + return 41 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Examples") @@ -2603,7 +3089,7 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Examples") @@ -2613,7 +3099,7 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -2624,14 +3110,14 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -2640,7 +3126,7 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Examples") self.end_rule(context, "ExamplesDefinition") @@ -2650,13 +3136,13 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.start_rule(context, "Description") self.build(context, token) - return 32 + return 40 - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" # fmt: skip + state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" # fmt: skip expected_tokens = [ "#EOF", "#Empty", @@ -2676,10 +3162,10 @@ def match_token_at_31(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 31 + return 39 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_32(self, token: Token, context: ParserContext) -> int: + def match_token_at_40(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -2689,15 +3175,15 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_Comment(context, token): self.build(context, token) - return 32 + return 40 if self.match_TableRow(context, token): self.end_rule(context, "Description") self.start_rule(context, "ExamplesTable") self.build(context, token) - return 33 + return 41 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "Description") @@ -2706,7 +3192,7 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "Description") @@ -2717,7 +3203,7 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -2729,7 +3215,7 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -2737,7 +3223,7 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -2747,7 +3233,7 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "Description") self.end_rule(context, "Examples") @@ -2758,12 +3244,12 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Other(context, token): self.build(context, token) - return 32 + return 40 - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip + state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" # fmt: skip expected_tokens = [ "#EOF", "#Comment", @@ -2782,10 +3268,10 @@ def match_token_at_32(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 32 + return 40 # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_33(self, token: Token, context: ParserContext) -> int: + def match_token_at_41(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -2795,10 +3281,10 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 if self.match_TableRow(context, token): self.build(context, token) - return 33 + return 41 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "ExamplesTable") @@ -2807,7 +3293,7 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "ExamplesTable") @@ -2818,7 +3304,7 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -2830,7 +3316,7 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -2838,7 +3324,7 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -2848,7 +3334,7 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "ExamplesTable") self.end_rule(context, "Examples") @@ -2859,15 +3345,15 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 33 + return 41 if self.match_Empty(context, token): self.build(context, token) - return 33 + return 41 - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" # fmt: skip + state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", "#TableRow", @@ -2886,18 +3372,18 @@ def match_token_at_33(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 33 + return 41 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_35(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_43(self, token: Token, context: ParserContext) -> int: if self.match_DocStringSeparator(context, token): self.build(context, token) - return 36 + return 44 if self.match_Other(context, token): self.build(context, token) - return 35 + return 43 - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" # fmt: skip expected_tokens = [ "#DocStringSeparator", "#Other", @@ -2910,10 +3396,10 @@ def match_token_at_35(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 35 + return 43 - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_36(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_44(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -2922,13 +3408,18 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 + if self.match_TableRow(context, token): + self.end_rule(context, "DocString") + self.start_rule(context, "DataTable") + self.build(context, token) + return 45 if self.match_StepLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 28 + return 34 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "DocString") @@ -2936,7 +3427,7 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 30 + return 38 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DocString") @@ -2946,7 +3437,7 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -2957,14 +3448,14 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 31 + return 39 if self.match_ScenarioLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -2973,7 +3464,7 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -2983,17 +3474,18 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 36 + return 44 if self.match_Empty(context, token): self.build(context, token) - return 36 + return 44 - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" # fmt: skip expected_tokens = [ "#EOF", + "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", @@ -3010,48 +3502,157 @@ def match_token_at_36(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 36 - - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_37(self, token: Token, context: ParserContext) -> int: - if self.match_DocStringSeparator(context, token): - self.build(context, token) - return 38 - if self.match_Other(context, token): - self.build(context, token) - return 37 - - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" # fmt: skip - expected_tokens = [ - "#DocStringSeparator", - "#Other", - ] - error = ( - UnexpectedEOFException(token, expected_tokens, state_comment) - if token.eof() - else UnexpectedTokenException(token, expected_tokens, state_comment) - ) - if self.stop_at_first_error: - raise error - self.add_error(context, error) - return 37 + return 44 - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_38(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_45(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): - self.end_rule(context, "DocString") + self.end_rule(context, "DataTable") self.end_rule(context, "Step") - self.end_rule(context, "Background") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Rule") self.end_rule(context, "Feature") self.build(context, token) + return 42 + if self.match_TableRow(context, token): + self.build(context, token) + return 45 + if self.match_StepLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) return 34 + if self.match_TagLine(context, token): + if self.lookahead_1(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 38 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 31 + if self.match_TagLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ExamplesLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Examples") + self.build(context, token) + return 39 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 32 + if self.match_RuleLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 45 + if self.match_Empty(context, token): + self.build(context, token) + return 45 + + state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#TableRow", + "#StepLine", + "#TagLine", + "#ExamplesLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 45 + + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_46(self, token: Token, context: ParserContext) -> int: + if self.match_DocStringSeparator(context, token): + self.build(context, token) + return 47 + if self.match_Other(context, token): + self.build(context, token) + return 46 + + state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#DocStringSeparator", + "#Other", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 46 + + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_47(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DocString") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_TableRow(context, token): + self.end_rule(context, "DocString") + self.start_rule(context, "DataTable") + self.build(context, token) + return 48 if self.match_StepLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 23 + return 27 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DocString") @@ -3060,7 +3661,7 @@ def match_token_at_38(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 25 + return 31 if self.match_TagLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3070,7 +3671,7 @@ def match_token_at_38(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3078,7 +3679,7 @@ def match_token_at_38(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 26 + return 32 if self.match_RuleLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3087,17 +3688,18 @@ def match_token_at_38(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 38 + return 47 if self.match_Empty(context, token): self.build(context, token) - return 38 + return 47 - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" # fmt: skip expected_tokens = [ "#EOF", + "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", @@ -3113,18 +3715,101 @@ def match_token_at_38(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 38 + return 47 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_39(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_48(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_TableRow(context, token): + self.build(context, token) + return 48 + if self.match_StepLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 27 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 31 + if self.match_TagLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 32 + if self.match_RuleLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Rule") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 48 + if self.match_Empty(context, token): + self.build(context, token) + return 48 + + state_comment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#TableRow", + "#StepLine", + "#TagLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 48 + + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_49(self, token: Token, context: ParserContext) -> int: if self.match_DocStringSeparator(context, token): self.build(context, token) - return 40 + return 50 if self.match_Other(context, token): self.build(context, token) - return 39 + return 49 - state_comment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" # fmt: skip expected_tokens = [ "#DocStringSeparator", "#Other", @@ -3137,10 +3822,10 @@ def match_token_at_39(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 39 + return 49 - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_40(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_50(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3148,13 +3833,18 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.end_rule(context, "ScenarioDefinition") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 + if self.match_TableRow(context, token): + self.end_rule(context, "DocString") + self.start_rule(context, "DataTable") + self.build(context, token) + return 51 if self.match_StepLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.start_rule(context, "Step") self.build(context, token) - return 12 + return 14 if self.match_TagLine(context, token): if self.lookahead_1(context, token): self.end_rule(context, "DocString") @@ -3162,7 +3852,7 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 14 + return 18 if self.match_TagLine(context, token): if self.lookahead_0(context, token): self.end_rule(context, "DocString") @@ -3172,7 +3862,7 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3182,14 +3872,14 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ExamplesLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.start_rule(context, "ExamplesDefinition") self.start_rule(context, "Examples") self.build(context, token) - return 15 + return 19 if self.match_ScenarioLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3198,7 +3888,7 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3207,17 +3897,119 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 50 + if self.match_Empty(context, token): + self.build(context, token) + return 50 + + state_comment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#TableRow", + "#StepLine", + "#TagLine", + "#ExamplesLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 50 + + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_51(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.end_rule(context, "Feature") + self.build(context, token) + return 42 + if self.match_TableRow(context, token): + self.build(context, token) + return 51 + if self.match_StepLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 14 + if self.match_TagLine(context, token): + if self.lookahead_1(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 18 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 11 + if self.match_TagLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ExamplesLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "ExamplesDefinition") + self.start_rule(context, "Examples") + self.build(context, token) return 19 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 12 + if self.match_RuleLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Scenario") + self.end_rule(context, "ScenarioDefinition") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 if self.match_Comment(context, token): self.build(context, token) - return 40 + return 51 if self.match_Empty(context, token): self.build(context, token) - return 40 + return 51 - state_comment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", + "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", @@ -3234,18 +4026,18 @@ def match_token_at_40(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 40 + return 51 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_41(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_52(self, token: Token, context: ParserContext) -> int: if self.match_DocStringSeparator(context, token): self.build(context, token) - return 42 + return 53 if self.match_Other(context, token): self.build(context, token) - return 41 + return 52 - state_comment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" # fmt: skip expected_tokens = [ "#DocStringSeparator", "#Other", @@ -3258,17 +4050,22 @@ def match_token_at_41(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 41 + return 52 - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_42(self, token: Token, context: ParserContext) -> int: + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_53(self, token: Token, context: ParserContext) -> int: if self.match_EOF(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") self.end_rule(context, "Background") self.end_rule(context, "Feature") self.build(context, token) - return 34 + return 42 + if self.match_TableRow(context, token): + self.end_rule(context, "DocString") + self.start_rule(context, "DataTable") + self.build(context, token) + return 54 if self.match_StepLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3283,7 +4080,7 @@ def match_token_at_42(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Tags") self.build(context, token) - return 9 + return 11 if self.match_TagLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3292,7 +4089,7 @@ def match_token_at_42(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "RuleHeader") self.start_rule(context, "Tags") self.build(context, token) - return 18 + return 22 if self.match_ScenarioLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3300,7 +4097,7 @@ def match_token_at_42(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "ScenarioDefinition") self.start_rule(context, "Scenario") self.build(context, token) - return 10 + return 12 if self.match_RuleLine(context, token): self.end_rule(context, "DocString") self.end_rule(context, "Step") @@ -3308,17 +4105,98 @@ def match_token_at_42(self, token: Token, context: ParserContext) -> int: self.start_rule(context, "Rule") self.start_rule(context, "RuleHeader") self.build(context, token) - return 19 + return 23 if self.match_Comment(context, token): self.build(context, token) - return 42 + return 53 if self.match_Empty(context, token): + self.build(context, token) + return 53 + + state_comment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" # fmt: skip + expected_tokens = [ + "#EOF", + "#TableRow", + "#StepLine", + "#TagLine", + "#ScenarioLine", + "#RuleLine", + "#Comment", + "#Empty", + ] + error = ( + UnexpectedEOFException(token, expected_tokens, state_comment) + if token.eof() + else UnexpectedTokenException(token, expected_tokens, state_comment) + ) + if self.stop_at_first_error: + raise error + self.add_error(context, error) + return 53 + + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_54(self, token: Token, context: ParserContext) -> int: + if self.match_EOF(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.end_rule(context, "Feature") self.build(context, token) return 42 + if self.match_TableRow(context, token): + self.build(context, token) + return 54 + if self.match_StepLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.start_rule(context, "Step") + self.build(context, token) + return 7 + if self.match_TagLine(context, token): + if self.lookahead_0(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Tags") + self.build(context, token) + return 11 + if self.match_TagLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.start_rule(context, "Tags") + self.build(context, token) + return 22 + if self.match_ScenarioLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "ScenarioDefinition") + self.start_rule(context, "Scenario") + self.build(context, token) + return 12 + if self.match_RuleLine(context, token): + self.end_rule(context, "DataTable") + self.end_rule(context, "Step") + self.end_rule(context, "Background") + self.start_rule(context, "Rule") + self.start_rule(context, "RuleHeader") + self.build(context, token) + return 23 + if self.match_Comment(context, token): + self.build(context, token) + return 54 + if self.match_Empty(context, token): + self.build(context, token) + return 54 - state_comment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" # fmt: skip + state_comment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" # fmt: skip expected_tokens = [ "#EOF", + "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", @@ -3334,7 +4212,7 @@ def match_token_at_42(self, token: Token, context: ParserContext) -> int: if self.stop_at_first_error: raise error self.add_error(context, error) - return 42 + return 54 def lookahead_0(self, context: ParserContext, currentToken: Token) -> bool: token = None diff --git a/python/src/gherkin/pickles/compiler.py b/python/src/gherkin/pickles/compiler.py index 276a3186b..375f41f9c 100644 --- a/python/src/gherkin/pickles/compiler.py +++ b/python/src/gherkin/pickles/compiler.py @@ -60,6 +60,11 @@ class PickleArgumentDocStringEnvelope(PickleArgumentEnvelope): docString: PickleArgumentDocString +class PickleArgumentMixedEnvelope(PickleArgumentEnvelope): + dataTable: PickleArgumentDataTable + docString: PickleArgumentDocString + + class PickleStep(TypedDict): astNodeIds: list[str] id: str @@ -284,6 +289,7 @@ def _create_pickle_arguments( variables: Sequence[Cell], values: Sequence[Cell], ) -> PickleArgumentEnvelope | None: + argument: PickleArgumentEnvelope = {} if "dataTable" in step: table: PickleArgumentDataTable = {"rows": []} for row in step["dataTable"]["rows"]: @@ -292,20 +298,20 @@ def _create_pickle_arguments( for cell in row["cells"] ] table["rows"].append({"cells": cells}) - return PickleArgumentDataTableEnvelope(dataTable=table) + argument["dataTable"] = table if "docString" in step: - argument = step["docString"] + docstring_argument = step["docString"] docstring: PickleArgumentDocString = { - "content": self._interpolate(argument["content"], variables, values), + "content": self._interpolate(docstring_argument["content"], variables, values), } - if "mediaType" in argument: + if "mediaType" in docstring_argument: docstring["mediaType"] = self._interpolate( - argument["mediaType"], + docstring_argument["mediaType"], variables, values, ) - return PickleArgumentDocStringEnvelope(docString=docstring) - return None + argument["docString"] = docstring + return argument or None @overload def _interpolate( diff --git a/ruby/lib/gherkin/parser.rb b/ruby/lib/gherkin/parser.rb index 90cf93437..b6edc572b 100644 --- a/ruby/lib/gherkin/parser.rb +++ b/ruby/lib/gherkin/parser.rb @@ -35,7 +35,9 @@ module Gherkin :Examples, # Examples! := #ExamplesLine DescriptionHelper ExamplesTable? :ExamplesTable, # ExamplesTable! := #TableRow #TableRow* :Step, # Step! := #StepLine StepArg? - :StepArg, # StepArg := (DataTable | DocString) + :StepArg, # StepArg := (DataTableAndMaybeDocString | DocStringAndMaybeDataTable) + :DataTableAndMaybeDocString, # DataTableAndMaybeDocString := DataTable DocString? + :DocStringAndMaybeDataTable, # DocStringAndMaybeDataTable := DocString DataTable? :DataTable, # DataTable! := #TableRow+ :DocString, # DocString! := #DocStringSeparator #Other* #DocStringSeparator :Tags, # Tags! := #TagLine+ @@ -287,6 +289,8 @@ def match_token(state, token, context) match_token_at_state32(token, context) when 33 match_token_at_state33(token, context) + when 34 + match_token_at_state34(token, context) when 35 match_token_at_state35(token, context) when 36 @@ -301,8 +305,30 @@ def match_token(state, token, context) match_token_at_state40(token, context) when 41 match_token_at_state41(token, context) - when 42 - match_token_at_state42(token, context) + when 43 + match_token_at_state43(token, context) + when 44 + match_token_at_state44(token, context) + when 45 + match_token_at_state45(token, context) + when 46 + match_token_at_state46(token, context) + when 47 + match_token_at_state47(token, context) + when 48 + match_token_at_state48(token, context) + when 49 + match_token_at_state49(token, context) + when 50 + match_token_at_state50(token, context) + when 51 + match_token_at_state51(token, context) + when 52 + match_token_at_state52(token, context) + when 53 + match_token_at_state53(token, context) + when 54 + match_token_at_state54(token, context) else raise InvalidOperationException, "Unknown state: #{state}" end @@ -313,7 +339,7 @@ def match_token(state, token, context) def match_token_at_state0(token, context) if match_EOF(context, token) build(context, token); - return 34 + return 42 end if match_Language(context, token) start_rule(context, :Feature); @@ -410,7 +436,7 @@ def match_token_at_state3(token, context) end_rule(context, :FeatureHeader); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); @@ -433,7 +459,7 @@ def match_token_at_state3(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -442,21 +468,21 @@ def match_token_at_state3(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :FeatureHeader); start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :FeatureHeader); start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); @@ -478,7 +504,7 @@ def match_token_at_state4(token, context) end_rule(context, :FeatureHeader); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); @@ -498,7 +524,7 @@ def match_token_at_state4(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -508,7 +534,7 @@ def match_token_at_state4(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -516,7 +542,7 @@ def match_token_at_state4(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -524,7 +550,7 @@ def match_token_at_state4(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); @@ -544,7 +570,7 @@ def match_token_at_state5(token, context) end_rule(context, :Background); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); @@ -566,7 +592,7 @@ def match_token_at_state5(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -575,21 +601,21 @@ def match_token_at_state5(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Background); start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Background); start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); @@ -611,7 +637,7 @@ def match_token_at_state6(token, context) end_rule(context, :Background); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); @@ -630,7 +656,7 @@ def match_token_at_state6(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -640,7 +666,7 @@ def match_token_at_state6(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -648,7 +674,7 @@ def match_token_at_state6(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -656,7 +682,7 @@ def match_token_at_state6(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); @@ -677,7 +703,7 @@ def match_token_at_state7(token, context) end_rule(context, :Background); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) start_rule(context, :DataTable); @@ -687,7 +713,7 @@ def match_token_at_state7(token, context) if match_DocStringSeparator(context, token) start_rule(context, :DocString); build(context, token); - return 41 + return 52 end if match_StepLine(context, token) end_rule(context, :Step); @@ -702,7 +728,7 @@ def match_token_at_state7(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -712,7 +738,7 @@ def match_token_at_state7(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Step); @@ -720,7 +746,7 @@ def match_token_at_state7(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Step); @@ -728,7 +754,7 @@ def match_token_at_state7(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); @@ -746,7 +772,7 @@ def match_token_at_state7(token, context) add_error(context, error) return 7 end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 def match_token_at_state8(token, context) if match_EOF(context, token) end_rule(context, :DataTable); @@ -754,12 +780,18 @@ def match_token_at_state8(token, context) end_rule(context, :Background); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); return 8 end + if match_DocStringSeparator(context, token) + end_rule(context, :DataTable); + start_rule(context, :DocString); + build(context, token); + return 9 + end if match_StepLine(context, token) end_rule(context, :DataTable); end_rule(context, :Step); @@ -775,7 +807,7 @@ def match_token_at_state8(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -786,7 +818,7 @@ def match_token_at_state8(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :DataTable); @@ -795,7 +827,7 @@ def match_token_at_state8(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :DataTable); @@ -804,7 +836,7 @@ def match_token_at_state8(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); @@ -815,70 +847,160 @@ def match_token_at_state8(token, context) return 8 end - state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 8 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) return 8 end - # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 def match_token_at_state9(token, context) - if match_TagLine(context, token) + if match_DocStringSeparator(context, token) + build(context, token); + return 10 + end + if match_Other(context, token) build(context, token); return 9 end + + state_comment = "State: 9 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 9 + end + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_state10(token, context) + if match_EOF(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_StepLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 7 + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 11 + end + end + if match_TagLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end if match_ScenarioLine(context, token) - end_rule(context, :Tags); + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); + build(context, token); + return 12 + end + if match_RuleLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 10 + end + if match_Empty(context, token) build(context, token); return 10 end + + state_comment = "State: 10 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 10 + end + # GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0 + def match_token_at_state11(token, context) + if match_TagLine(context, token) + build(context, token); + return 11 + end + if match_ScenarioLine(context, token) + end_rule(context, :Tags); + start_rule(context, :Scenario); + build(context, token); + return 12 + end if match_Comment(context, token) build(context, token); - return 9 + return 11 end if match_Empty(context, token) build(context, token); - return 9 + return 11 end - state_comment = "State: 9 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 9 + return 11 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_state10(token, context) + def match_token_at_state12(token, context) if match_EOF(context, token) end_rule(context, :Scenario); end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 10 + return 12 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 11 + return 13 end if match_StepLine(context, token) start_rule(context, :Step); build(context, token); - return 12 + return 14 end if match_TagLine(context, token) if lookahead1(context, token) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -888,7 +1010,7 @@ def match_token_at_state10(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -898,13 +1020,13 @@ def match_token_at_state10(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :Scenario); @@ -912,7 +1034,7 @@ def match_token_at_state10(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Scenario); @@ -920,40 +1042,40 @@ def match_token_at_state10(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 11 + return 13 end - state_comment = "State: 10 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 10 + return 12 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state11(token, context) + def match_token_at_state13(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :Scenario); end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 11 + return 13 end if match_StepLine(context, token) end_rule(context, :Description); start_rule(context, :Step); build(context, token); - return 12 + return 14 end if match_TagLine(context, token) if lookahead1(context, token) @@ -961,7 +1083,7 @@ def match_token_at_state11(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -972,7 +1094,7 @@ def match_token_at_state11(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -983,14 +1105,14 @@ def match_token_at_state11(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Description); start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -999,7 +1121,7 @@ def match_token_at_state11(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -1008,45 +1130,45 @@ def match_token_at_state11(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 11 + return 13 end - state_comment = "State: 11 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 11 + return 13 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_state12(token, context) + def match_token_at_state14(token, context) if match_EOF(context, token) end_rule(context, :Step); end_rule(context, :Scenario); end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) start_rule(context, :DataTable); build(context, token); - return 13 + return 15 end if match_DocStringSeparator(context, token) start_rule(context, :DocString); build(context, token); - return 39 + return 49 end if match_StepLine(context, token) end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 12 + return 14 end if match_TagLine(context, token) if lookahead1(context, token) @@ -1054,7 +1176,7 @@ def match_token_at_state12(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -1065,7 +1187,7 @@ def match_token_at_state12(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -1076,14 +1198,14 @@ def match_token_at_state12(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Step); start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :Step); @@ -1092,7 +1214,7 @@ def match_token_at_state12(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Step); @@ -1101,26 +1223,26 @@ def match_token_at_state12(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 12 + return 14 end if match_Empty(context, token) build(context, token); - return 12 + return 14 end - state_comment = "State: 12 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 12 + return 14 end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_state13(token, context) + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_state15(token, context) if match_EOF(context, token) end_rule(context, :DataTable); end_rule(context, :Step); @@ -1128,18 +1250,24 @@ def match_token_at_state13(token, context) end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); - return 13 + return 15 + end + if match_DocStringSeparator(context, token) + end_rule(context, :DataTable); + start_rule(context, :DocString); + build(context, token); + return 16 end if match_StepLine(context, token) end_rule(context, :DataTable); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 12 + return 14 end if match_TagLine(context, token) if lookahead1(context, token) @@ -1148,7 +1276,7 @@ def match_token_at_state13(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -1160,7 +1288,7 @@ def match_token_at_state13(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -1172,7 +1300,7 @@ def match_token_at_state13(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :DataTable); @@ -1180,7 +1308,7 @@ def match_token_at_state13(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :DataTable); @@ -1190,7 +1318,7 @@ def match_token_at_state13(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :DataTable); @@ -1200,54 +1328,167 @@ def match_token_at_state13(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 13 + return 15 end if match_Empty(context, token) build(context, token); - return 13 + return 15 end - state_comment = "State: 13 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 13 + return 15 end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_state14(token, context) - if match_TagLine(context, token) + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_state16(token, context) + if match_DocStringSeparator(context, token) + build(context, token); + return 17 + end + if match_Other(context, token) + build(context, token); + return 16 + end + + state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 16 + end + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_state17(token, context) + if match_EOF(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_StepLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :Step); build(context, token); return 14 end + if match_TagLine(context, token) + if lookahead1(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Tags); + build(context, token); + return 18 + end + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 11 + end + end + if match_TagLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ExamplesLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Examples); + build(context, token); + return 19 + end + if match_ScenarioLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 12 + end + if match_RuleLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 17 + end + if match_Empty(context, token) + build(context, token); + return 17 + end + + state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 17 + end + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + def match_token_at_state18(token, context) + if match_TagLine(context, token) + build(context, token); + return 18 + end if match_ExamplesLine(context, token) end_rule(context, :Tags); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_Comment(context, token) build(context, token); - return 14 + return 18 end if match_Empty(context, token) build(context, token); - return 14 + return 18 end - state_comment = "State: 14 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + state_comment = "State: 18 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 14 + return 18 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_state15(token, context) + def match_token_at_state19(token, context) if match_EOF(context, token) end_rule(context, :Examples); end_rule(context, :ExamplesDefinition); @@ -1255,21 +1496,21 @@ def match_token_at_state15(token, context) end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 15 + return 19 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 16 + return 20 end if match_TableRow(context, token) start_rule(context, :ExamplesTable); build(context, token); - return 17 + return 21 end if match_TagLine(context, token) if lookahead1(context, token) @@ -1278,7 +1519,7 @@ def match_token_at_state15(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -1290,7 +1531,7 @@ def match_token_at_state15(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -1302,7 +1543,7 @@ def match_token_at_state15(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Examples); @@ -1310,7 +1551,7 @@ def match_token_at_state15(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :Examples); @@ -1320,7 +1561,7 @@ def match_token_at_state15(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Examples); @@ -1330,23 +1571,23 @@ def match_token_at_state15(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 16 + return 20 end - state_comment = "State: 15 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + state_comment = "State: 19 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 15 + return 19 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state16(token, context) + def match_token_at_state20(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :Examples); @@ -1355,17 +1596,17 @@ def match_token_at_state16(token, context) end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 16 + return 20 end if match_TableRow(context, token) end_rule(context, :Description); start_rule(context, :ExamplesTable); build(context, token); - return 17 + return 21 end if match_TagLine(context, token) if lookahead1(context, token) @@ -1375,7 +1616,7 @@ def match_token_at_state16(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -1388,7 +1629,7 @@ def match_token_at_state16(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -1401,7 +1642,7 @@ def match_token_at_state16(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Description); @@ -1410,7 +1651,7 @@ def match_token_at_state16(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -1421,7 +1662,7 @@ def match_token_at_state16(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -1432,22 +1673,22 @@ def match_token_at_state16(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 16 + return 20 end - state_comment = "State: 16 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 20 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 16 + return 20 end # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_state17(token, context) + def match_token_at_state21(token, context) if match_EOF(context, token) end_rule(context, :ExamplesTable); end_rule(context, :Examples); @@ -1456,11 +1697,11 @@ def match_token_at_state17(token, context) end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); - return 17 + return 21 end if match_TagLine(context, token) if lookahead1(context, token) @@ -1470,7 +1711,7 @@ def match_token_at_state17(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -1483,7 +1724,7 @@ def match_token_at_state17(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -1496,7 +1737,7 @@ def match_token_at_state17(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :ExamplesTable); @@ -1505,7 +1746,7 @@ def match_token_at_state17(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :ExamplesTable); @@ -1516,7 +1757,7 @@ def match_token_at_state17(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :ExamplesTable); @@ -1527,74 +1768,74 @@ def match_token_at_state17(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 17 + return 21 end if match_Empty(context, token) build(context, token); - return 17 + return 21 end - state_comment = "State: 17 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + state_comment = "State: 21 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 17 + return 21 end # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0 - def match_token_at_state18(token, context) + def match_token_at_state22(token, context) if match_TagLine(context, token) build(context, token); - return 18 + return 22 end if match_RuleLine(context, token) end_rule(context, :Tags); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 18 + return 22 end if match_Empty(context, token) build(context, token); - return 18 + return 22 end - state_comment = "State: 18 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" + state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 18 + return 22 end # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0 - def match_token_at_state19(token, context) + def match_token_at_state23(token, context) if match_EOF(context, token) end_rule(context, :RuleHeader); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 19 + return 23 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 20 + return 24 end if match_BackgroundLine(context, token) end_rule(context, :RuleHeader); start_rule(context, :Background); build(context, token); - return 21 + return 25 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1602,7 +1843,7 @@ def match_token_at_state19(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1612,14 +1853,14 @@ def match_token_at_state19(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :RuleHeader); start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :RuleHeader); @@ -1627,41 +1868,41 @@ def match_token_at_state19(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 20 + return 24 end - state_comment = "State: 19 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" + state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:1>#RuleLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 19 + return 23 end # GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state20(token, context) + def match_token_at_state24(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :RuleHeader); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 20 + return 24 end if match_BackgroundLine(context, token) end_rule(context, :Description); end_rule(context, :RuleHeader); start_rule(context, :Background); build(context, token); - return 21 + return 25 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1670,7 +1911,7 @@ def match_token_at_state20(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1681,7 +1922,7 @@ def match_token_at_state20(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -1689,7 +1930,7 @@ def match_token_at_state20(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -1698,42 +1939,42 @@ def match_token_at_state20(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 20 + return 24 end - state_comment = "State: 20 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:0>RuleHeader:2>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 20 + return 24 end # GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0 - def match_token_at_state21(token, context) + def match_token_at_state25(token, context) if match_EOF(context, token) end_rule(context, :Background); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 21 + return 25 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 22 + return 26 end if match_StepLine(context, token) start_rule(context, :Step); build(context, token); - return 23 + return 27 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1741,7 +1982,7 @@ def match_token_at_state21(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1751,14 +1992,14 @@ def match_token_at_state21(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Background); start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Background); @@ -1766,40 +2007,40 @@ def match_token_at_state21(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 22 + return 26 end - state_comment = "State: 21 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" + state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:1>Background:0>#BackgroundLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 21 + return 25 end # GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state22(token, context) + def match_token_at_state26(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :Background); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 22 + return 26 end if match_StepLine(context, token) end_rule(context, :Description); start_rule(context, :Step); build(context, token); - return 23 + return 27 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1808,7 +2049,7 @@ def match_token_at_state22(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1819,7 +2060,7 @@ def match_token_at_state22(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -1827,7 +2068,7 @@ def match_token_at_state22(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -1836,45 +2077,45 @@ def match_token_at_state22(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 22 + return 26 end - state_comment = "State: 22 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 22 + return 26 end # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0 - def match_token_at_state23(token, context) + def match_token_at_state27(token, context) if match_EOF(context, token) end_rule(context, :Step); end_rule(context, :Background); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) start_rule(context, :DataTable); build(context, token); - return 24 + return 28 end if match_DocStringSeparator(context, token) start_rule(context, :DocString); build(context, token); - return 37 + return 46 end if match_StepLine(context, token) end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 23 + return 27 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1883,7 +2124,7 @@ def match_token_at_state23(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1894,7 +2135,7 @@ def match_token_at_state23(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :Step); @@ -1902,7 +2143,7 @@ def match_token_at_state23(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Step); @@ -1911,26 +2152,26 @@ def match_token_at_state23(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 23 + return 27 end if match_Empty(context, token) build(context, token); - return 23 + return 27 end - state_comment = "State: 23 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" + state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 23 + return 27 end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_state24(token, context) + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_state28(token, context) if match_EOF(context, token) end_rule(context, :DataTable); end_rule(context, :Step); @@ -1938,18 +2179,24 @@ def match_token_at_state24(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); - return 24 + return 28 + end + if match_DocStringSeparator(context, token) + end_rule(context, :DataTable); + start_rule(context, :DocString); + build(context, token); + return 29 end if match_StepLine(context, token) end_rule(context, :DataTable); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 23 + return 27 end if match_TagLine(context, token) if lookahead0(context, token) @@ -1959,7 +2206,7 @@ def match_token_at_state24(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -1971,7 +2218,7 @@ def match_token_at_state24(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :DataTable); @@ -1980,7 +2227,7 @@ def match_token_at_state24(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :DataTable); @@ -1990,82 +2237,175 @@ def match_token_at_state24(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 24 + return 28 end if match_Empty(context, token) build(context, token); - return 24 + return 28 end - state_comment = "State: 24 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 24 + return 28 + end + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_state29(token, context) + if match_DocStringSeparator(context, token) + build(context, token); + return 30 + end + if match_Other(context, token) + build(context, token); + return 29 + end + + state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 29 + end + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_state30(token, context) + if match_EOF(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_StepLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 27 + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 31 + end + end + if match_TagLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ScenarioLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 32 + end + if match_RuleLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 30 + end + if match_Empty(context, token) + build(context, token); + return 30 + end + + state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 30 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0 - def match_token_at_state25(token, context) + def match_token_at_state31(token, context) if match_TagLine(context, token) build(context, token); - return 25 + return 31 end if match_ScenarioLine(context, token) end_rule(context, :Tags); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_Comment(context, token) build(context, token); - return 25 + return 31 end if match_Empty(context, token) build(context, token); - return 25 + return 31 end - state_comment = "State: 25 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" + state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 25 + return 31 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0 - def match_token_at_state26(token, context) + def match_token_at_state32(token, context) if match_EOF(context, token) end_rule(context, :Scenario); end_rule(context, :ScenarioDefinition); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 26 + return 32 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 27 + return 33 end if match_StepLine(context, token) start_rule(context, :Step); build(context, token); - return 28 + return 34 end if match_TagLine(context, token) if lookahead1(context, token) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2075,7 +2415,7 @@ def match_token_at_state26(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2086,13 +2426,13 @@ def match_token_at_state26(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :Scenario); @@ -2100,7 +2440,7 @@ def match_token_at_state26(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Scenario); @@ -2109,23 +2449,23 @@ def match_token_at_state26(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 27 + return 33 end - state_comment = "State: 26 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" + state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 26 + return 32 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state27(token, context) + def match_token_at_state33(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :Scenario); @@ -2133,17 +2473,17 @@ def match_token_at_state27(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 27 + return 33 end if match_StepLine(context, token) end_rule(context, :Description); start_rule(context, :Step); build(context, token); - return 28 + return 34 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2151,7 +2491,7 @@ def match_token_at_state27(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2162,7 +2502,7 @@ def match_token_at_state27(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2174,14 +2514,14 @@ def match_token_at_state27(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Description); start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -2190,7 +2530,7 @@ def match_token_at_state27(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -2200,22 +2540,22 @@ def match_token_at_state27(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 27 + return 33 end - state_comment = "State: 27 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 27 + return 33 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0 - def match_token_at_state28(token, context) + def match_token_at_state34(token, context) if match_EOF(context, token) end_rule(context, :Step); end_rule(context, :Scenario); @@ -2223,23 +2563,23 @@ def match_token_at_state28(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) start_rule(context, :DataTable); build(context, token); - return 29 + return 35 end if match_DocStringSeparator(context, token) start_rule(context, :DocString); build(context, token); - return 35 + return 43 end if match_StepLine(context, token) end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 28 + return 34 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2247,7 +2587,7 @@ def match_token_at_state28(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2258,7 +2598,7 @@ def match_token_at_state28(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2270,14 +2610,14 @@ def match_token_at_state28(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Step); start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :Step); @@ -2286,7 +2626,7 @@ def match_token_at_state28(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Step); @@ -2296,26 +2636,26 @@ def match_token_at_state28(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 28 + return 34 end if match_Empty(context, token) build(context, token); - return 28 + return 34 end - state_comment = "State: 28 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" + state_comment = "State: 34 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0" expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 28 + return 34 end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0 - def match_token_at_state29(token, context) + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0 + def match_token_at_state35(token, context) if match_EOF(context, token) end_rule(context, :DataTable); end_rule(context, :Step); @@ -2324,18 +2664,24 @@ def match_token_at_state29(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); - return 29 + return 35 + end + if match_DocStringSeparator(context, token) + end_rule(context, :DataTable); + start_rule(context, :DocString); + build(context, token); + return 36 end if match_StepLine(context, token) end_rule(context, :DataTable); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 28 + return 34 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2344,7 +2690,7 @@ def match_token_at_state29(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2356,7 +2702,7 @@ def match_token_at_state29(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2369,7 +2715,7 @@ def match_token_at_state29(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :DataTable); @@ -2377,7 +2723,7 @@ def match_token_at_state29(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :DataTable); @@ -2387,7 +2733,7 @@ def match_token_at_state29(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :DataTable); @@ -2398,54 +2744,170 @@ def match_token_at_state29(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 29 + return 35 end if match_Empty(context, token) build(context, token); - return 29 + return 35 end - state_comment = "State: 29 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0" - expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:0>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#DocStringSeparator", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 29 + return 35 end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 - def match_token_at_state30(token, context) - if match_TagLine(context, token) - build(context, token); - return 30 + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0 + def match_token_at_state36(token, context) + if match_DocStringSeparator(context, token) + build(context, token); + return 37 + end + if match_Other(context, token) + build(context, token); + return 36 + end + + state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 36 + end + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0 + def match_token_at_state37(token, context) + if match_EOF(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Rule); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_StepLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 34 + end + if match_TagLine(context, token) + if lookahead1(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Tags); + build(context, token); + return 38 + end + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 31 + end + end + if match_TagLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ExamplesLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Examples); + build(context, token); + return 39 + end + if match_ScenarioLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 32 + end + if match_RuleLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 37 + end + if match_Empty(context, token) + build(context, token); + return 37 + end + + state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTableAndMaybeDocString:1>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 37 + end + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0 + def match_token_at_state38(token, context) + if match_TagLine(context, token) + build(context, token); + return 38 end if match_ExamplesLine(context, token) end_rule(context, :Tags); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_Comment(context, token) build(context, token); - return 30 + return 38 end if match_Empty(context, token) build(context, token); - return 30 + return 38 end - state_comment = "State: 30 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" + state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0" expected_tokens = ["#TagLine", "#ExamplesLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 30 + return 38 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0 - def match_token_at_state31(token, context) + def match_token_at_state39(token, context) if match_EOF(context, token) end_rule(context, :Examples); end_rule(context, :ExamplesDefinition); @@ -2454,21 +2916,21 @@ def match_token_at_state31(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Empty(context, token) build(context, token); - return 31 + return 39 end if match_Comment(context, token) start_rule(context, :Description); build(context, token); - return 32 + return 40 end if match_TableRow(context, token) start_rule(context, :ExamplesTable); build(context, token); - return 33 + return 41 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2477,7 +2939,7 @@ def match_token_at_state31(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2489,7 +2951,7 @@ def match_token_at_state31(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2502,7 +2964,7 @@ def match_token_at_state31(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Examples); @@ -2510,7 +2972,7 @@ def match_token_at_state31(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :Examples); @@ -2520,7 +2982,7 @@ def match_token_at_state31(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Examples); @@ -2531,23 +2993,23 @@ def match_token_at_state31(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) start_rule(context, :Description); build(context, token); - return 32 + return 40 end - state_comment = "State: 31 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" + state_comment = "State: 39 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0" expected_tokens = ["#EOF", "#Empty", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 31 + return 39 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0 - def match_token_at_state32(token, context) + def match_token_at_state40(token, context) if match_EOF(context, token) end_rule(context, :Description); end_rule(context, :Examples); @@ -2557,17 +3019,17 @@ def match_token_at_state32(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_Comment(context, token) build(context, token); - return 32 + return 40 end if match_TableRow(context, token) end_rule(context, :Description); start_rule(context, :ExamplesTable); build(context, token); - return 33 + return 41 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2577,7 +3039,7 @@ def match_token_at_state32(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2590,7 +3052,7 @@ def match_token_at_state32(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2604,7 +3066,7 @@ def match_token_at_state32(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :Description); @@ -2613,7 +3075,7 @@ def match_token_at_state32(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :Description); @@ -2624,7 +3086,7 @@ def match_token_at_state32(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :Description); @@ -2636,22 +3098,22 @@ def match_token_at_state32(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Other(context, token) build(context, token); - return 32 + return 40 end - state_comment = "State: 32 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" + state_comment = "State: 40 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0" expected_tokens = ["#EOF", "#Comment", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 32 + return 40 end # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0 - def match_token_at_state33(token, context) + def match_token_at_state41(token, context) if match_EOF(context, token) end_rule(context, :ExamplesTable); end_rule(context, :Examples); @@ -2661,11 +3123,11 @@ def match_token_at_state33(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 end if match_TableRow(context, token) build(context, token); - return 33 + return 41 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2675,7 +3137,7 @@ def match_token_at_state33(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2688,7 +3150,7 @@ def match_token_at_state33(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2702,7 +3164,7 @@ def match_token_at_state33(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :ExamplesTable); @@ -2711,7 +3173,7 @@ def match_token_at_state33(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :ExamplesTable); @@ -2722,7 +3184,7 @@ def match_token_at_state33(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :ExamplesTable); @@ -2734,44 +3196,44 @@ def match_token_at_state33(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 33 + return 41 end if match_Empty(context, token) build(context, token); - return 33 + return 41 end - state_comment = "State: 33 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" + state_comment = "State: 41 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0" expected_tokens = ["#EOF", "#TableRow", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 33 + return 41 end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_state35(token, context) + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_state43(token, context) if match_DocStringSeparator(context, token) build(context, token); - return 36 + return 44 end if match_Other(context, token) build(context, token); - return 35 + return 43 end - state_comment = "State: 35 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + state_comment = "State: 43 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 35 + return 43 end - # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_state36(token, context) + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_state44(token, context) if match_EOF(context, token) end_rule(context, :DocString); end_rule(context, :Step); @@ -2780,14 +3242,20 @@ def match_token_at_state36(token, context) end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 + end + if match_TableRow(context, token) + end_rule(context, :DocString); + start_rule(context, :DataTable); + build(context, token); + return 45 end if match_StepLine(context, token) end_rule(context, :DocString); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 28 + return 34 end if match_TagLine(context, token) if lookahead1(context, token) @@ -2796,7 +3264,7 @@ def match_token_at_state36(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 30 + return 38 end end if match_TagLine(context, token) @@ -2808,7 +3276,7 @@ def match_token_at_state36(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 31 end end if match_TagLine(context, token) @@ -2821,7 +3289,7 @@ def match_token_at_state36(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :DocString); @@ -2829,7 +3297,7 @@ def match_token_at_state36(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 31 + return 39 end if match_ScenarioLine(context, token) end_rule(context, :DocString); @@ -2839,7 +3307,7 @@ def match_token_at_state36(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :DocString); @@ -2850,81 +3318,189 @@ def match_token_at_state36(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 36 + return 44 end if match_Empty(context, token) build(context, token); - return 36 - end - - state_comment = "State: 36 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] - error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) - raise error if (stop_at_first_error) - add_error(context, error) - return 36 - end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_state37(token, context) - if match_DocStringSeparator(context, token) - build(context, token); - return 38 - end - if match_Other(context, token) - build(context, token); - return 37 + return 44 end - state_comment = "State: 37 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" - expected_tokens = ["#DocStringSeparator", "#Other"] + state_comment = "State: 44 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 37 + return 44 end - # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_state38(token, context) + # GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_state45(token, context) if match_EOF(context, token) - end_rule(context, :DocString); + end_rule(context, :DataTable); end_rule(context, :Step); - end_rule(context, :Background); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); end_rule(context, :Rule); end_rule(context, :Feature); build(context, token); - return 34 + return 42 + end + if match_TableRow(context, token) + build(context, token); + return 45 end if match_StepLine(context, token) - end_rule(context, :DocString); + end_rule(context, :DataTable); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 23 + return 34 end if match_TagLine(context, token) - if lookahead0(context, token) - end_rule(context, :DocString); + if lookahead1(context, token) + end_rule(context, :DataTable); end_rule(context, :Step); - end_rule(context, :Background); - start_rule(context, :ScenarioDefinition); + start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 25 + return 38 end end if match_TagLine(context, token) - end_rule(context, :DocString); - end_rule(context, :Step); - end_rule(context, :Background); - end_rule(context, :Rule); - start_rule(context, :Rule); + if lookahead0(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 31 + end + end + if match_TagLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Rule); + start_rule(context, :Rule); start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 + end + if match_ExamplesLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Examples); + build(context, token); + return 39 + end + if match_ScenarioLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 32 + end + if match_RuleLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 45 + end + if match_Empty(context, token) + build(context, token); + return 45 + end + + state_comment = "State: 45 - GherkinDocument:0>Feature:3>Rule:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 45 + end + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_state46(token, context) + if match_DocStringSeparator(context, token) + build(context, token); + return 47 + end + if match_Other(context, token) + build(context, token); + return 46 + end + + state_comment = "State: 46 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" + expected_tokens = ["#DocStringSeparator", "#Other"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 46 + end + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_state47(token, context) + if match_EOF(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_TableRow(context, token) + end_rule(context, :DocString); + start_rule(context, :DataTable); + build(context, token); + return 48 + end + if match_StepLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 27 + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 31 + end + end + if match_TagLine(context, token) + end_rule(context, :DocString); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 end if match_ScenarioLine(context, token) end_rule(context, :DocString); @@ -2933,7 +3509,7 @@ def match_token_at_state38(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 26 + return 32 end if match_RuleLine(context, token) end_rule(context, :DocString); @@ -2943,44 +3519,123 @@ def match_token_at_state38(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 38 + return 47 end if match_Empty(context, token) build(context, token); - return 38 + return 47 end - state_comment = "State: 38 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 47 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 38 + return 47 end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_state39(token, context) + # GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_state48(token, context) + if match_EOF(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_TableRow(context, token) + build(context, token); + return 48 + end + if match_StepLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 27 + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 31 + end + end + if match_TagLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ScenarioLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 32 + end + if match_RuleLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Rule); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 48 + end + if match_Empty(context, token) + build(context, token); + return 48 + end + + state_comment = "State: 48 - GherkinDocument:0>Feature:3>Rule:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 48 + end + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_state49(token, context) if match_DocStringSeparator(context, token) build(context, token); - return 40 + return 50 end if match_Other(context, token) build(context, token); - return 39 + return 49 end - state_comment = "State: 39 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + state_comment = "State: 49 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 39 + return 49 end - # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_state40(token, context) + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_state50(token, context) if match_EOF(context, token) end_rule(context, :DocString); end_rule(context, :Step); @@ -2988,14 +3643,20 @@ def match_token_at_state40(token, context) end_rule(context, :ScenarioDefinition); end_rule(context, :Feature); build(context, token); - return 34 + return 42 + end + if match_TableRow(context, token) + end_rule(context, :DocString); + start_rule(context, :DataTable); + build(context, token); + return 51 end if match_StepLine(context, token) end_rule(context, :DocString); end_rule(context, :Step); start_rule(context, :Step); build(context, token); - return 12 + return 14 end if match_TagLine(context, token) if lookahead1(context, token) @@ -3004,7 +3665,7 @@ def match_token_at_state40(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Tags); build(context, token); - return 14 + return 18 end end if match_TagLine(context, token) @@ -3016,7 +3677,7 @@ def match_token_at_state40(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -3028,7 +3689,7 @@ def match_token_at_state40(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ExamplesLine(context, token) end_rule(context, :DocString); @@ -3036,7 +3697,7 @@ def match_token_at_state40(token, context) start_rule(context, :ExamplesDefinition); start_rule(context, :Examples); build(context, token); - return 15 + return 19 end if match_ScenarioLine(context, token) end_rule(context, :DocString); @@ -3046,7 +3707,7 @@ def match_token_at_state40(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :DocString); @@ -3056,51 +3717,156 @@ def match_token_at_state40(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 50 + end + if match_Empty(context, token) + build(context, token); + return 50 + end + + state_comment = "State: 50 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 50 + end + # GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_state51(token, context) + if match_EOF(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + end_rule(context, :Feature); + build(context, token); + return 42 + end + if match_TableRow(context, token) + build(context, token); + return 51 + end + if match_StepLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 14 + end + if match_TagLine(context, token) + if lookahead1(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Tags); + build(context, token); + return 18 + end + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 11 + end + end + if match_TagLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ExamplesLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :ExamplesDefinition); + start_rule(context, :Examples); + build(context, token); return 19 end + if match_ScenarioLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 12 + end + if match_RuleLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Scenario); + end_rule(context, :ScenarioDefinition); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end if match_Comment(context, token) build(context, token); - return 40 + return 51 end if match_Empty(context, token) build(context, token); - return 40 + return 51 end - state_comment = "State: 40 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 51 - GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ExamplesLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 40 + return 51 end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0 - def match_token_at_state41(token, context) + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0 + def match_token_at_state52(token, context) if match_DocStringSeparator(context, token) build(context, token); - return 42 + return 53 end if match_Other(context, token) build(context, token); - return 41 + return 52 end - state_comment = "State: 41 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:0>#DocStringSeparator:0" + state_comment = "State: 52 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:0>#DocStringSeparator:0" expected_tokens = ["#DocStringSeparator", "#Other"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 41 + return 52 end - # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0 - def match_token_at_state42(token, context) + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0 + def match_token_at_state53(token, context) if match_EOF(context, token) end_rule(context, :DocString); end_rule(context, :Step); end_rule(context, :Background); end_rule(context, :Feature); build(context, token); - return 34 + return 42 + end + if match_TableRow(context, token) + end_rule(context, :DocString); + start_rule(context, :DataTable); + build(context, token); + return 54 end if match_StepLine(context, token) end_rule(context, :DocString); @@ -3117,7 +3883,7 @@ def match_token_at_state42(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Tags); build(context, token); - return 9 + return 11 end end if match_TagLine(context, token) @@ -3128,7 +3894,7 @@ def match_token_at_state42(token, context) start_rule(context, :RuleHeader); start_rule(context, :Tags); build(context, token); - return 18 + return 22 end if match_ScenarioLine(context, token) end_rule(context, :DocString); @@ -3137,7 +3903,7 @@ def match_token_at_state42(token, context) start_rule(context, :ScenarioDefinition); start_rule(context, :Scenario); build(context, token); - return 10 + return 12 end if match_RuleLine(context, token) end_rule(context, :DocString); @@ -3146,23 +3912,99 @@ def match_token_at_state42(token, context) start_rule(context, :Rule); start_rule(context, :RuleHeader); build(context, token); - return 19 + return 23 end if match_Comment(context, token) build(context, token); - return 42 + return 53 end if match_Empty(context, token) + build(context, token); + return 53 + end + + state_comment = "State: 53 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:0>DocString:2>#DocStringSeparator:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) + raise error if (stop_at_first_error) + add_error(context, error) + return 53 + end + # GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0 + def match_token_at_state54(token, context) + if match_EOF(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + end_rule(context, :Feature); build(context, token); return 42 end + if match_TableRow(context, token) + build(context, token); + return 54 + end + if match_StepLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + start_rule(context, :Step); + build(context, token); + return 7 + end + if match_TagLine(context, token) + if lookahead0(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Tags); + build(context, token); + return 11 + end + end + if match_TagLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + start_rule(context, :Tags); + build(context, token); + return 22 + end + if match_ScenarioLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :ScenarioDefinition); + start_rule(context, :Scenario); + build(context, token); + return 12 + end + if match_RuleLine(context, token) + end_rule(context, :DataTable); + end_rule(context, :Step); + end_rule(context, :Background); + start_rule(context, :Rule); + start_rule(context, :RuleHeader); + build(context, token); + return 23 + end + if match_Comment(context, token) + build(context, token); + return 54 + end + if match_Empty(context, token) + build(context, token); + return 54 + end - state_comment = "State: 42 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocString:2>#DocStringSeparator:0" - expected_tokens = ["#EOF", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] + state_comment = "State: 54 - GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:1>DocStringAndMaybeDataTable:1>DataTable:0>#TableRow:0" + expected_tokens = ["#EOF", "#TableRow", "#StepLine", "#TagLine", "#ScenarioLine", "#RuleLine", "#Comment", "#Empty"] error = token.eof? ? UnexpectedEOFException.new(token, expected_tokens, state_comment) : UnexpectedTokenException.new(token, expected_tokens, state_comment) raise error if (stop_at_first_error) add_error(context, error) - return 42 + return 54 end def lookahead0(context, current_token) diff --git a/ruby/lib/gherkin/pickles/compiler.rb b/ruby/lib/gherkin/pickles/compiler.rb index bf63b3968..61502ef63 100644 --- a/ruby/lib/gherkin/pickles/compiler.rb +++ b/ruby/lib/gherkin/pickles/compiler.rb @@ -158,17 +158,11 @@ def pickle_step_props(step, variable_cells, values_row, keyword_type) } props[:ast_node_ids].push(values_row.id) if values_row - if step.data_table - data_table = Cucumber::Messages::PickleStepArgument.new( - data_table: pickle_data_table(step.data_table, variable_cells, value_cells) + if step.data_table || step.doc_string + props[:argument] = Cucumber::Messages::PickleStepArgument.new( + data_table: step.data_table ? pickle_data_table(step.data_table, variable_cells, value_cells) : nil, + doc_string: step.doc_string ? pickle_doc_string(step.doc_string, variable_cells, value_cells) : nil ) - props[:argument] = data_table - end - if step.doc_string - doc_string = Cucumber::Messages::PickleStepArgument.new( - doc_string: pickle_doc_string(step.doc_string, variable_cells, value_cells) - ) - props[:argument] = doc_string end props end diff --git a/testdata/bad/repeated_step_docstring.feature b/testdata/bad/repeated_step_docstring.feature new file mode 100644 index 000000000..991dec865 --- /dev/null +++ b/testdata/bad/repeated_step_docstring.feature @@ -0,0 +1,10 @@ +Feature: Repeated step DocString + + Scenario: repeated DocString + Given a step with repeated docstrings +""" +one +""" +""" +two +""" diff --git a/testdata/bad/repeated_step_docstring.feature.errors.ndjson b/testdata/bad/repeated_step_docstring.feature.errors.ndjson new file mode 100644 index 000000000..791e1ebfe --- /dev/null +++ b/testdata/bad/repeated_step_docstring.feature.errors.ndjson @@ -0,0 +1,3 @@ +{"parseError":{"message":"(8:1): expected: #EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty, got '\"\"\"'","source":{"location":{"column":1,"line":8},"uri":"../testdata/bad/repeated_step_docstring.feature"}}} +{"parseError":{"message":"(9:1): expected: #EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty, got 'two'","source":{"location":{"column":1,"line":9},"uri":"../testdata/bad/repeated_step_docstring.feature"}}} +{"parseError":{"message":"(10:1): expected: #EOF, #TableRow, #StepLine, #TagLine, #ExamplesLine, #ScenarioLine, #RuleLine, #Comment, #Empty, got '\"\"\"'","source":{"location":{"column":1,"line":10},"uri":"../testdata/bad/repeated_step_docstring.feature"}}} diff --git a/testdata/good/step_with_datatable_and_docstring.feature b/testdata/good/step_with_datatable_and_docstring.feature new file mode 100644 index 000000000..1fd9d2005 --- /dev/null +++ b/testdata/good/step_with_datatable_and_docstring.feature @@ -0,0 +1,17 @@ +Feature: Step with DataTable and DocString + + Scenario: DataTable followed by DocString + Given a step with both arguments + | id | name | + | 1 | bob | + """ + hello + """ + + Scenario: DocString followed by DataTable + Given a step with both arguments + """ + hello + """ + | id | name | + | 1 | bob | diff --git a/testdata/good/step_with_datatable_and_docstring.feature.ast.ndjson b/testdata/good/step_with_datatable_and_docstring.feature.ast.ndjson new file mode 100644 index 000000000..6c7be5642 --- /dev/null +++ b/testdata/good/step_with_datatable_and_docstring.feature.ast.ndjson @@ -0,0 +1 @@ +{"gherkinDocument":{"comments":[],"feature":{"children":[{"scenario":{"description":"","examples":[],"id":"3","keyword":"Scenario","location":{"column":3,"line":3},"name":"DataTable followed by DocString","steps":[{"dataTable":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"id"},{"location":{"column":14,"line":5},"value":"name"}],"id":"0","location":{"column":7,"line":5}},{"cells":[{"location":{"column":9,"line":6},"value":"1"},{"location":{"column":14,"line":6},"value":"bob"}],"id":"1","location":{"column":7,"line":6}}]},"docString":{"content":"hello","delimiter":"\"\"\"","location":{"column":7,"line":7}},"id":"2","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":4},"text":"a step with both arguments"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"7","keyword":"Scenario","location":{"column":3,"line":11},"name":"DocString followed by DataTable","steps":[{"dataTable":{"location":{"column":7,"line":16},"rows":[{"cells":[{"location":{"column":9,"line":16},"value":"id"},{"location":{"column":14,"line":16},"value":"name"}],"id":"4","location":{"column":7,"line":16}},{"cells":[{"location":{"column":9,"line":17},"value":"1"},{"location":{"column":14,"line":17},"value":"bob"}],"id":"5","location":{"column":7,"line":17}}]},"docString":{"content":"hello","delimiter":"\"\"\"","location":{"column":7,"line":13}},"id":"6","keyword":"Given ","keywordType":"Context","location":{"column":5,"line":12},"text":"a step with both arguments"}],"tags":[]}}],"description":"","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Step with DataTable and DocString","tags":[]},"uri":"../testdata/good/step_with_datatable_and_docstring.feature"}} diff --git a/testdata/good/step_with_datatable_and_docstring.feature.pickles.ndjson b/testdata/good/step_with_datatable_and_docstring.feature.pickles.ndjson new file mode 100644 index 000000000..70b0a49ea --- /dev/null +++ b/testdata/good/step_with_datatable_and_docstring.feature.pickles.ndjson @@ -0,0 +1,2 @@ +{"pickle":{"astNodeIds":["3"],"id":"9","language":"en","location":{"column":3,"line":3},"name":"DataTable followed by DocString","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"id"},{"value":"name"}]},{"cells":[{"value":"1"},{"value":"bob"}]}]},"docString":{"content":"hello"}},"astNodeIds":["2"],"id":"8","text":"a step with both arguments","type":"Context"}],"tags":[],"uri":"../testdata/good/step_with_datatable_and_docstring.feature"}} +{"pickle":{"astNodeIds":["7"],"id":"11","language":"en","location":{"column":3,"line":11},"name":"DocString followed by DataTable","steps":[{"argument":{"dataTable":{"rows":[{"cells":[{"value":"id"},{"value":"name"}]},{"cells":[{"value":"1"},{"value":"bob"}]}]},"docString":{"content":"hello"}},"astNodeIds":["6"],"id":"10","text":"a step with both arguments","type":"Context"}],"tags":[],"uri":"../testdata/good/step_with_datatable_and_docstring.feature"}} diff --git a/testdata/good/step_with_datatable_and_docstring.feature.source.ndjson b/testdata/good/step_with_datatable_and_docstring.feature.source.ndjson new file mode 100644 index 000000000..728f54f2f --- /dev/null +++ b/testdata/good/step_with_datatable_and_docstring.feature.source.ndjson @@ -0,0 +1 @@ +{"source":{"data":"Feature: Step with DataTable and DocString\n\n Scenario: DataTable followed by DocString\n Given a step with both arguments\n | id | name |\n | 1 | bob |\n \"\"\"\n hello\n \"\"\"\n\n Scenario: DocString followed by DataTable\n Given a step with both arguments\n \"\"\"\n hello\n \"\"\"\n | id | name |\n | 1 | bob |\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/step_with_datatable_and_docstring.feature"}} diff --git a/testdata/good/step_with_datatable_and_docstring.feature.tokens b/testdata/good/step_with_datatable_and_docstring.feature.tokens new file mode 100644 index 000000000..f17027183 --- /dev/null +++ b/testdata/good/step_with_datatable_and_docstring.feature.tokens @@ -0,0 +1,18 @@ +(1:1)FeatureLine:()Feature/Step with DataTable and DocString/ +(2:1)Empty:// +(3:3)ScenarioLine:()Scenario/DataTable followed by DocString/ +(4:5)StepLine:(Context)Given /a step with both arguments/ +(5:7)TableRow://9:id,14:name +(6:7)TableRow://9:1,14:bob +(7:7)DocStringSeparator:()"""// +(8:1)Other:/hello/ +(9:7)DocStringSeparator:()"""// +(10:1)Empty:// +(11:3)ScenarioLine:()Scenario/DocString followed by DataTable/ +(12:5)StepLine:(Context)Given /a step with both arguments/ +(13:7)DocStringSeparator:()"""// +(14:1)Other:/hello/ +(15:7)DocStringSeparator:()"""// +(16:7)TableRow://9:id,14:name +(17:7)TableRow://9:1,14:bob +EOF