@cucumber/gherkin
Version:
Gherkin parser
1,534 lines (1,475 loc) • 111 kB
text/typescript
// This file is generated. Do not edit! Edit gherkin-javascript.razor instead.
import * as messages from '@cucumber/messages'
import {
AstBuilderException,
CompositeParserException,
NoSuchLanguageException,
ParserException,
} from './Errors'
import {
UnexpectedEOFException,
UnexpectedTokenException,
} from './TokenExceptions'
import TokenScanner from './TokenScanner'
import ITokenMatcher from './ITokenMatcher'
import GherkinLine from './GherkinLine'
import IToken, { Item } from './IToken'
import { IAstBuilder } from './IAstBuilder'
export class Token implements IToken<TokenType> {
public isEof: boolean
public matchedText?: string
public matchedType: TokenType
public matchedItems: readonly Item[]
public matchedKeyword: string
public matchedIndent: number
public matchedGherkinDialect: string
public matchedKeywordType: messages.StepKeywordType
constructor(
public readonly line: GherkinLine,
public readonly location: messages.Location
) {
this.isEof = !line
}
public getTokenValue(): string {
return this.isEof ? 'EOF' : this.line.getLineText(-1)
}
public detach() {
// TODO: Detach line, but is this really needed?
}
}
export enum TokenType {
None,
EOF,
Empty,
Comment,
TagLine,
FeatureLine,
RuleLine,
BackgroundLine,
ScenarioLine,
ExamplesLine,
StepLine,
DocStringSeparator,
TableRow,
Language,
Other,
}
export 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)+
}
interface Context {
tokenScanner: TokenScanner<TokenType>
tokenQueue: IToken<TokenType>[]
errors: Error[]
}
export default class Parser<AstNode> {
public stopAtFirstError = false
private context: Context
constructor(
private readonly builder: IAstBuilder<AstNode, TokenType, RuleType>,
private readonly tokenMatcher: ITokenMatcher<TokenType>
) {}
public parse(gherkinSource: string): messages.GherkinDocument {
const tokenScanner = new TokenScanner(
gherkinSource,
(line: string, location: messages.Location) => {
const gherkinLine =
line === null || line === undefined
? null
: new GherkinLine(line, location.line)
return new Token(gherkinLine, location)
}
)
this.builder.reset()
this.tokenMatcher.reset()
this.context = {
tokenScanner,
tokenQueue: [],
errors: [],
}
this.startRule(this.context, RuleType.GherkinDocument)
let state = 0
let token: IToken<TokenType> = null
while (true) {
token = this.readToken(this.context) as Token
state = this.matchToken(state, token, this.context)
if (token.isEof) break
}
this.endRule(this.context)
if (this.context.errors.length > 0) {
throw CompositeParserException.create(this.context.errors)
}
return this.getResult()
}
private addError(context: Context, error: Error) {
if (!context.errors.map(e => { return e.message }).includes(error.message)) {
context.errors.push(error)
if (context.errors.length > 10)
throw CompositeParserException.create(context.errors)
}
}
private startRule(context: Context, ruleType: RuleType) {
this.handleAstError(context, () => this.builder.startRule(ruleType))
}
private endRule(context: Context) {
this.handleAstError(context, () => this.builder.endRule())
}
private build(context: Context, token: IToken<TokenType>) {
this.handleAstError(context, () => this.builder.build(token))
}
private getResult() {
return this.builder.getResult()
}
private handleAstError(context: Context, action: () => any) {
this.handleExternalError(context, true, action)
}
private handleExternalError<T>(
context: Context,
defaultValue: T,
action: () => T
) {
if (this.stopAtFirstError) return action()
try {
return action()
} catch (e) {
if (e instanceof CompositeParserException) {
e.errors.forEach((error: Error) => this.addError(context, error))
} else if (
e instanceof ParserException ||
e instanceof AstBuilderException ||
e instanceof UnexpectedTokenException ||
e instanceof NoSuchLanguageException
) {
this.addError(context, e)
} else {
throw e
}
}
return defaultValue
}
private readToken(context: Context) {
return context.tokenQueue.length > 0
? context.tokenQueue.shift()
: context.tokenScanner.read()
}
private matchToken(state: number, token: IToken<TokenType>, context: Context) {
switch(state) {
case 0:
return this.matchTokenAt_0(token, context);
case 1:
return this.matchTokenAt_1(token, context);
case 2:
return this.matchTokenAt_2(token, context);
case 3:
return this.matchTokenAt_3(token, context);
case 4:
return this.matchTokenAt_4(token, context);
case 5:
return this.matchTokenAt_5(token, context);
case 6:
return this.matchTokenAt_6(token, context);
case 7:
return this.matchTokenAt_7(token, context);
case 8:
return this.matchTokenAt_8(token, context);
case 9:
return this.matchTokenAt_9(token, context);
case 10:
return this.matchTokenAt_10(token, context);
case 11:
return this.matchTokenAt_11(token, context);
case 12:
return this.matchTokenAt_12(token, context);
case 13:
return this.matchTokenAt_13(token, context);
case 14:
return this.matchTokenAt_14(token, context);
case 15:
return this.matchTokenAt_15(token, context);
case 16:
return this.matchTokenAt_16(token, context);
case 17:
return this.matchTokenAt_17(token, context);
case 18:
return this.matchTokenAt_18(token, context);
case 19:
return this.matchTokenAt_19(token, context);
case 20:
return this.matchTokenAt_20(token, context);
case 21:
return this.matchTokenAt_21(token, context);
case 22:
return this.matchTokenAt_22(token, context);
case 23:
return this.matchTokenAt_23(token, context);
case 24:
return this.matchTokenAt_24(token, context);
case 25:
return this.matchTokenAt_25(token, context);
case 26:
return this.matchTokenAt_26(token, context);
case 27:
return this.matchTokenAt_27(token, context);
case 28:
return this.matchTokenAt_28(token, context);
case 29:
return this.matchTokenAt_29(token, context);
case 30:
return this.matchTokenAt_30(token, context);
case 31:
return this.matchTokenAt_31(token, context);
case 32:
return this.matchTokenAt_32(token, context);
case 33:
return this.matchTokenAt_33(token, context);
case 35:
return this.matchTokenAt_35(token, context);
case 36:
return this.matchTokenAt_36(token, context);
case 37:
return this.matchTokenAt_37(token, context);
case 38:
return this.matchTokenAt_38(token, context);
case 39:
return this.matchTokenAt_39(token, context);
case 40:
return this.matchTokenAt_40(token, context);
case 41:
return this.matchTokenAt_41(token, context);
case 42:
return this.matchTokenAt_42(token, context);
default:
throw new Error("Unknown state: " + state);
}
}
// Start
private matchTokenAt_0(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.build(context, token);
return 34;
}
if(this.match_Language(context, token)) {
this.startRule(context, RuleType.Feature);
this.startRule(context, RuleType.FeatureHeader);
this.build(context, token);
return 1;
}
if(this.match_TagLine(context, token)) {
this.startRule(context, RuleType.Feature);
this.startRule(context, RuleType.FeatureHeader);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 2;
}
if(this.match_FeatureLine(context, token)) {
this.startRule(context, RuleType.Feature);
this.startRule(context, RuleType.FeatureHeader);
this.build(context, token);
return 3;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 0;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 0;
}
token.detach();
const expectedTokens = ["#EOF", "#Language", "#TagLine", "#FeatureLine", "#Comment", "#Empty"];
const error = token.isEof ?
UnexpectedEOFException.create(token, expectedTokens) :
UnexpectedTokenException.create(token, expectedTokens);
if (this.stopAtFirstError) throw error;
this.addError(context, error);
return 0; }
// GherkinDocument:0>Feature:0>FeatureHeader:0>#Language:0
private matchTokenAt_1(token: IToken<TokenType>, context: Context) {
if(this.match_TagLine(context, token)) {
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 2;
}
if(this.match_FeatureLine(context, token)) {
this.build(context, token);
return 3;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 1;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 1;
}
token.detach();
const expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"];
const error = token.isEof ?
UnexpectedEOFException.create(token, expectedTokens) :
UnexpectedTokenException.create(token, expectedTokens);
if (this.stopAtFirstError) throw error;
this.addError(context, error);
return 1; }
// GherkinDocument:0>Feature:0>FeatureHeader:1>Tags:0>#TagLine:0
private matchTokenAt_2(token: IToken<TokenType>, context: Context) {
if(this.match_TagLine(context, token)) {
this.build(context, token);
return 2;
}
if(this.match_FeatureLine(context, token)) {
this.endRule(context);
this.build(context, token);
return 3;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 2;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 2;
}
token.detach();
const expectedTokens = ["#TagLine", "#FeatureLine", "#Comment", "#Empty"];
const error = token.isEof ?
UnexpectedEOFException.create(token, expectedTokens) :
UnexpectedTokenException.create(token, expectedTokens);
if (this.stopAtFirstError) throw error;
this.addError(context, error);
return 2; }
// GherkinDocument:0>Feature:0>FeatureHeader:2>#FeatureLine:0
private matchTokenAt_3(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 3;
}
if(this.match_Comment(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 4;
}
if(this.match_BackgroundLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Background);
this.build(context, token);
return 5;
}
if(this.match_TagLine(context, token)) {
if(this.lookahead_0(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Rule);
this.startRule(context, RuleType.RuleHeader);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 18;
}
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;
}
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;
}
if(this.match_Other(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 4;
}
token.detach();
const expectedTokens = ["#EOF", "#Empty", "#Comment", "#BackgroundLine", "#TagLine", "#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 3; }
// GherkinDocument:0>Feature:0>FeatureHeader:3>DescriptionHelper:1>Description:0>__alt1:0>#Other:0
private matchTokenAt_4(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 4;
}
if(this.match_BackgroundLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.Background);
this.build(context, token);
return 5;
}
if(this.match_TagLine(context, token)) {
if(this.lookahead_0(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
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;
}
if(this.match_ScenarioLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Scenario);
this.build(context, token);
return 10;
}
if(this.match_RuleLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.Rule);
this.startRule(context, RuleType.RuleHeader);
this.build(context, token);
return 19;
}
if(this.match_Other(context, token)) {
this.build(context, token);
return 4;
}
token.detach();
const expectedTokens = ["#EOF", "#Comment", "#BackgroundLine", "#TagLine", "#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 4; }
// GherkinDocument:0>Feature:1>Background:0>#BackgroundLine:0
private matchTokenAt_5(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 5;
}
if(this.match_Comment(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 6;
}
if(this.match_StepLine(context, token)) {
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.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Rule);
this.startRule(context, RuleType.RuleHeader);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 18;
}
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;
}
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;
}
if(this.match_Other(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 6;
}
token.detach();
const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#TagLine", "#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 5; }
// GherkinDocument:0>Feature:1>Background:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0
private matchTokenAt_6(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 6;
}
if(this.match_StepLine(context, token)) {
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.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
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;
}
if(this.match_ScenarioLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Scenario);
this.build(context, token);
return 10;
}
if(this.match_RuleLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.Rule);
this.startRule(context, RuleType.RuleHeader);
this.build(context, token);
return 19;
}
if(this.match_Other(context, token)) {
this.build(context, token);
return 6;
}
token.detach();
const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#TagLine", "#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 6; }
// GherkinDocument:0>Feature:1>Background:2>Step:0>#StepLine:0
private matchTokenAt_7(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_TableRow(context, token)) {
this.startRule(context, RuleType.DataTable);
this.build(context, token);
return 8;
}
if(this.match_DocStringSeparator(context, token)) {
this.startRule(context, RuleType.DocString);
this.build(context, token);
return 41;
}
if(this.match_StepLine(context, token)) {
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.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
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;
}
if(this.match_ScenarioLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Scenario);
this.build(context, token);
return 10;
}
if(this.match_RuleLine(context, token)) {
this.endRule(context);
this.endRule(context);
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 7;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 7;
}
token.detach();
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 7; }
// GherkinDocument:0>Feature:1>Background:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
private matchTokenAt_8(token: IToken<TokenType>, 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;
}
if(this.match_TableRow(context, token)) {
this.build(context, token);
return 8;
}
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 9;
}
}
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 18;
}
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 10;
}
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 19;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 8;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 8;
}
token.detach();
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 8; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:0>Tags:0>#TagLine:0
private matchTokenAt_9(token: IToken<TokenType>, context: Context) {
if(this.match_TagLine(context, token)) {
this.build(context, token);
return 9;
}
if(this.match_ScenarioLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Scenario);
this.build(context, token);
return 10;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 9;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 9;
}
token.detach();
const expectedTokens = ["#TagLine", "#ScenarioLine", "#Comment", "#Empty"];
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:2>ScenarioDefinition:1>Scenario:0>#ScenarioLine:0
private matchTokenAt_10(token: IToken<TokenType>, context: Context) {
if(this.match_EOF(context, token)) {
this.endRule(context);
this.endRule(context);
this.endRule(context);
this.build(context, token);
return 34;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 10;
}
if(this.match_Comment(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 11;
}
if(this.match_StepLine(context, token)) {
this.startRule(context, RuleType.Step);
this.build(context, token);
return 12;
}
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;
}
}
if(this.match_TagLine(context, token)) {
if(this.lookahead_0(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(context, token)) {
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;
}
if(this.match_ExamplesLine(context, token)) {
this.startRule(context, RuleType.ExamplesDefinition);
this.startRule(context, RuleType.Examples);
this.build(context, token);
return 15;
}
if(this.match_ScenarioLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Scenario);
this.build(context, token);
return 10;
}
if(this.match_RuleLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.Rule);
this.startRule(context, RuleType.RuleHeader);
this.build(context, token);
return 19;
}
if(this.match_Other(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 11;
}
token.detach();
const expectedTokens = ["#EOF", "#Empty", "#Comment", "#StepLine", "#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 10; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:1>DescriptionHelper:1>Description:0>__alt1:0>#Other:0
private matchTokenAt_11(token: IToken<TokenType>, 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;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 11;
}
if(this.match_StepLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Step);
this.build(context, token);
return 12;
}
if(this.match_TagLine(context, token)) {
if(this.lookahead_1(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.ExamplesDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 14;
}
}
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 9;
}
}
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 18;
}
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;
}
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 10;
}
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 19;
}
if(this.match_Other(context, token)) {
this.build(context, token);
return 11;
}
token.detach();
const expectedTokens = ["#EOF", "#Comment", "#StepLine", "#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 11; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:0>#StepLine:0
private matchTokenAt_12(token: IToken<TokenType>, 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;
}
if(this.match_TableRow(context, token)) {
this.startRule(context, RuleType.DataTable);
this.build(context, token);
return 13;
}
if(this.match_DocStringSeparator(context, token)) {
this.startRule(context, RuleType.DocString);
this.build(context, token);
return 39;
}
if(this.match_StepLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Step);
this.build(context, token);
return 12;
}
if(this.match_TagLine(context, token)) {
if(this.lookahead_1(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.ExamplesDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 14;
}
}
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 9;
}
}
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 18;
}
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;
}
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 10;
}
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 19;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 12;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 12;
}
token.detach();
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 12; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:2>Step:1>StepArg:0>__alt0:0>DataTable:0>#TableRow:0
private matchTokenAt_13(token: IToken<TokenType>, 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;
}
if(this.match_TableRow(context, token)) {
this.build(context, token);
return 13;
}
if(this.match_StepLine(context, token)) {
this.endRule(context);
this.endRule(context);
this.startRule(context, RuleType.Step);
this.build(context, token);
return 12;
}
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 14;
}
}
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 9;
}
}
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;
}
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 15;
}
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 10;
}
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;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 13;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 13;
}
token.detach();
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 13; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:0>Tags:0>#TagLine:0
private matchTokenAt_14(token: IToken<TokenType>, context: Context) {
if(this.match_TagLine(context, token)) {
this.build(context, token);
return 14;
}
if(this.match_ExamplesLine(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.Examples);
this.build(context, token);
return 15;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 14;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 14;
}
token.detach();
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 14; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:0>#ExamplesLine:0
private matchTokenAt_15(token: IToken<TokenType>, 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;
}
if(this.match_Empty(context, token)) {
this.build(context, token);
return 15;
}
if(this.match_Comment(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 16;
}
if(this.match_TableRow(context, token)) {
this.startRule(context, RuleType.ExamplesTable);
this.build(context, token);
return 17;
}
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 14;
}
}
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 9;
}
}
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;
}
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 15;
}
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 10;
}
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;
}
if(this.match_Other(context, token)) {
this.startRule(context, RuleType.Description);
this.build(context, token);
return 16;
}
token.detach();
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 15; }
// 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<TokenType>, 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;
}
if(this.match_Comment(context, token)) {
this.build(context, token);
return 16;
}
if(this.match_TableRow(context, token)) {
this.endRule(context);
this.startRule(context, RuleType.ExamplesTable);
this.build(context, token);
return 17;
}
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 14;
}
}
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.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(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.startRule(context, RuleType.Tags);
this.build(context, token);
return 18;
}
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 15;
}
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 10;
}
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;
}
if(this.match_Other(context, token)) {
this.build(context, token);
return 16;
}
token.detach();
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 16; }
// GherkinDocument:0>Feature:2>ScenarioDefinition:1>Scenario:3>ExamplesDefinition:1>Examples:2>ExamplesTable:0>#TableRow:0
private matchTokenAt_17(token: IToken<TokenType>, 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;
}
if(this.match_TableRow(context, token)) {
this.build(context, token);
return 17;
}
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 14;
}
}
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.endRule(context);
this.startRule(context, RuleType.ScenarioDefinition);
this.startRule(context, RuleType.Tags);
this.build(context, token);
return 9;
}
}
if(this.match_TagLine(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.startRule(context, RuleType.Tags);
this.build(context, token);
return 18;
}
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 15;
}
if