diff --git a/server/src/d.ts b/server/src/d.ts new file mode 100644 index 0000000..97f1fd9 --- /dev/null +++ b/server/src/d.ts @@ -0,0 +1,175 @@ +import { CharStreams, CommonTokenStream, ParserRuleContext } from "antlr4ts"; +import { DLexer } from "./dparser/DLexer"; +import { AppendDActionContext, BeginDActionContext, DParser, ExternTransitionTargetContext, GotoTransitionTargetContext, IfThenStateContext, ReplaceDActionContext, StringRuleContext } from "./dparser/DParser"; +import { DParserVisitor } from "./dparser/DParserVisitor"; +import { AbstractParseTreeVisitor, ErrorNode, ParseTree, RuleNode } from "antlr4ts/tree" +import { HeaderData } from "./language"; +import { Location, Position } from "vscode-languageserver"; + + +export function loadFileData(uri: string, str: string): HeaderData { + const definedStates = collectStatesFromFile(str); + const definitions: [string, Location][] = definedStates.map(s => [`${s.dlg}@${s.label}`, { + range: { + start: { + line: s.line, + character: s.start + }, + end: { + line: s.line, + character: s.end + }, + }, + uri: uri + }]) + return { + definition: new Map(definitions), + hover: new Map(), + completion: [] + } +} + +function collectStatesFromFile(str: string) { + const parseTree = parseSilently(str); + const statesCollector = new StateDefinitionCollector(); + const collectedStates = parseTree.accept(statesCollector); + return collectedStates; +} + +export function findSymbolAtPosition(str: string, pos: Position): string { + const allSymbols = parseSilently(str).accept(new SymbolCollector()) + const foundSymbol = allSymbols.find(s => { + return s.location.range.start.line <= pos.line && s.location.range.end.line >= pos.line + && s.location.range.start.character <= pos.character && s.location.range.end.character >= pos.character + }) + return foundSymbol?.id || "" +} + +function parseSilently(str: string) { + const charStream = CharStreams.fromString(str); + const lexer = new DLexer(charStream); + const tokenStream = new CommonTokenStream(lexer); + const parser = new DParser(tokenStream); + parser.removeErrorListeners(); + return parser.dFileRule(); +} + +function cleanString(str: string) { + if (str.startsWith('~~~~~')) { + return str.substring(5, str.length - 5); + } else if (str.length > 0 && str[0] == '~' || str[0] == "\"" || str[0] == '%') { + return str.substring(1, str.length - 1) + } else { + return str + } +} + + +abstract class DlgAwareErroResistantVisitor extends AbstractParseTreeVisitor implements DParserVisitor { + dlgStack: string[] = []; + + protected visitChildrenWithUpdatedDlg(dlg: string, ctx: RuleNode): T { + this.dlgStack.push(dlg); + const res = this.visitChildren(ctx); + this.dlgStack.pop(); + return res; + } + + get currentDlg() { + return this.dlgStack.at(-1) + } + + visitChildren(node: RuleNode): T { + for (let i = node.childCount; i < node.childCount; i++) { + if (node instanceof ErrorNode) { + return this.defaultResult(); + } + } + return super.visitChildren(node); + } + + visitBeginDAction?: ((ctx: BeginDActionContext) => T) = ctx => this.visitChildrenWithUpdatedDlg(cleanString(ctx._dlg.text), ctx); + + visitAppendDAction?: ((ctx: AppendDActionContext) => T) = ctx => this.visitChildrenWithUpdatedDlg(cleanString(ctx._dlg.text), ctx); + + visitReplaceDAction?: ((ctx: ReplaceDActionContext) => T) = ctx => this.visitChildrenWithUpdatedDlg(cleanString(ctx._dlg.text), ctx); +} + + +interface Symbol { + id: string, + location: Omit +} + + +class SymbolCollector extends DlgAwareErroResistantVisitor { + dlgStack: string[] = []; + + protected defaultResult(): Symbol[] { + return []; + } + + protected aggregateResult(aggregate: Symbol[], nextResult: Symbol[]): Symbol[] { + return aggregate.concat(nextResult) + } + + + visitExternTransitionTarget?: ((ctx: ExternTransitionTargetContext) => Symbol[]) = ctx => { + return [{ + id: `${cleanString(ctx._dlg.text)}@${cleanString(ctx._label.text)}`, + location: makePartialLocationFromParseTree(ctx) + }] + } + + visitGotoTransitionTarget?: ((ctx: GotoTransitionTargetContext) => Symbol[]) = ctx => { + return [{ + id: `${this.currentDlg!}@${cleanString(ctx._label.text)}`, + location: makePartialLocationFromParseTree(ctx) + }] + } +} + +interface LocalStateDefinition { + dlg: string + label: string + line: number + start: number + end: number +} + +class StateDefinitionCollector extends DlgAwareErroResistantVisitor { + + protected defaultResult(): LocalStateDefinition[] { + return []; + } + + protected aggregateResult(aggregate: LocalStateDefinition[], nextResult: LocalStateDefinition[]): LocalStateDefinition[] { + return aggregate.concat(nextResult); + } + + visitIfThenState?: ((ctx: IfThenStateContext) => LocalStateDefinition[]) = ctx => { + return [{ + dlg: this.currentDlg!, + label: cleanString(ctx._label.text), + start: ctx._label.start.charPositionInLine, + end: ctx._label.start.charPositionInLine + ctx._label.text.length, + line: ctx._label.start.line - 1, + }] + } +} + +function makePartialLocationFromParseTree(ctx: ParserRuleContext) { + return { + range: { + start: { + line: ctx.start.line - 1, + character: ctx.start.charPositionInLine + }, + end: { + line: ctx.stop!.line - 1, + character: ctx.stop!.charPositionInLine + ctx.stop!.text!.length + } + } + } +} + diff --git a/server/src/dparser/DLexer.interp b/server/src/dparser/DLexer.interp new file mode 100644 index 0000000..63ba123 --- /dev/null +++ b/server/src/dparser/DLexer.interp @@ -0,0 +1,249 @@ +token literal names: +null +null +null +'BEGIN' +'END' +'IF' +'UNLESS' +'WEIGHT' +'THEN' +'=' +'==' +'BRANCH' +'+' +'COPY_TRANS' +'COPY_TRANS_LATE' +'DO' +'JOURNAL' +'SOLVED_JOURNAL' +'UNSOLVED_JOURNAL' +'FLAGS' +'GOTO' +'APPENDI' +'CHAIN2' +'SAFE' +'EXTERN' +'REPLY' +'EXIT' +'SAY' +'IF_FILE_EXISTS' +'(' +')' +'AT' +'APPEND' +'APPEND_EARLY' +null +'INTERJECT' +'EXTEND_TOP' +null +null +'ADD_TRANS_ACTION' +'REPLACE_TRANS_ACTION' +'REPLACE_TRANS_TRIGGER' +'ALTER_TRANS' +'REPLACE' +'SET_WEIGHT' +null +null +'REPLACE_TRIGGER_TEXT_REGEXP' +null +'REPLACE_ACTION_TEXT_REGEXP' +'REPLACE_ACTION_TEXT_PROCESS' +null +'REPLACE_SAY' +null +null +null +null +null +null +null +null +null +null +null +null +'^' +null +null +null +null +'*/' +null +null +null + +token symbolic names: +null +BLOCK_COMMENT +WHITESPACE +BEGIN +END +IF +UNLESS +WEIGHT +THEN +EQ +EQEQ +BRANCH +PLUS +COPY_TRANS +COPY_TRANS_LATE +DO +JOURNAL +SOLVED_JOURNAL +UNSOLVED_JOURNAL +FLAGS +GOTO +APPENDI +CHAIN2 +SAFE +EXTERN +REPLY +EXIT +SAY +IF_FILE_EXISTS +PAREN_OPEN +PAREN_CLOSE +AT +APPEND +APPEND_EARLY +CHAIN +INTERJECT +EXTEND_TOP +ADD_STATE_TRIGGER +ADD_TRANS_TRIGGER +ADD_TRANS_ACTION +REPLACE_TRANS_ACTION +REPLACE_TRANS_TRIGGER +ALTER_TRANS +REPLACE +SET_WEIGHT +REPLACE_STATE_TRIGGER +REPLACE_TRIGGER_TEXT +REPLACE_TRIGGER_TEXT_REGEXP +REPLACE_ACTION_TEXT +REPLACE_ACTION_TEXT_REGEXP +REPLACE_ACTION_TEXT_PROCESS +REPLACE_ACTION_TEXT_PROCESS_REGEXP +REPLACE_SAY +EXTEND_BOTTOM +INTERJECT_COPY_TRANS +INTERJECT_COPY_TRANS2 +INTERJECT_COPY_TRANS3 +INTERJECT_COPY_TRANS4 +SHARP_NUMBER +SOUND_STRING +TILDE_STRING +QUOTE_STRING +PERCENT_STRING +FORCED_STRING_REFERENCE +TRANSLATION_REFERENCE +CONCAT +LINE_COMMENT +IDENTIFIER +LONG_TILDE_STRING +LONG_TILDE_STRING_UNTERMINATED +BLOCK_COMMENT_END +UNTERMINATED_BLOCK_COMMENT +LONG_TILDE_STRING_START +BLOCK_COMMENT_START + +rule names: +WHITESPACE +BEGIN +END +IF +UNLESS +WEIGHT +THEN +EQ +EQEQ +BRANCH +PLUS +COPY_TRANS +COPY_TRANS_LATE +DO +JOURNAL +SOLVED_JOURNAL +UNSOLVED_JOURNAL +FLAGS +GOTO +APPENDI +CHAIN2 +SAFE +EXTERN +REPLY +EXIT +SAY +IF_FILE_EXISTS +PAREN_OPEN +PAREN_CLOSE +AT +APPEND +APPEND_EARLY +CHAIN +INTERJECT +EXTEND_TOP +ADD_STATE_TRIGGER +ADD_TRANS_TRIGGER +ADD_TRANS_ACTION +REPLACE_TRANS_ACTION +REPLACE_TRANS_TRIGGER +ALTER_TRANS +REPLACE +SET_WEIGHT +REPLACE_STATE_TRIGGER +REPLACE_TRIGGER_TEXT +REPLACE_TRIGGER_TEXT_REGEXP +REPLACE_ACTION_TEXT +REPLACE_ACTION_TEXT_REGEXP +REPLACE_ACTION_TEXT_PROCESS +REPLACE_ACTION_TEXT_PROCESS_REGEXP +REPLACE_SAY +EXTEND_BOTTOM +INTERJECT_COPY_TRANS +INTERJECT_COPY_TRANS2 +INTERJECT_COPY_TRANS3 +INTERJECT_COPY_TRANS4 +LETTER +ALPHANUM +BIN_DIGIT +OCT_DIGIT +DEC_DIGIT +HEX_DIGIT +OCT_LITERAL_PREFIX +BIN_LITERAL_PREFIX +HEX_LITERAL_PREFIX +SHARP_NUMBER +SOUND_STRING +TILDE_STRING +QUOTE_STRING +PERCENT_STRING +FORCED_STRING_REFERENCE +TRANSLATION_REFERENCE +CONCAT +LONG_TILDE_STRING_START +LINE_COMMENT +BLOCK_COMMENT_START +IDENTIFIER +LONG_TILDE_STRING_BODY +LONG_TILDE_STRING +LONG_TILDE_STRING_UNTERMINATED +BLOCK_COMMENT_NEST +BLOCK_COMMENT_CHAR +BLOCK_COMMENT_END +UNTERMINATED_BLOCK_COMMENT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE +LONG_TILDE_STRING_MODE +BLOCK_COMMENT_MODE + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 75, 1076, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 3, 2, 6, 2, 175, 10, 2, 13, 2, 14, 2, 176, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 403, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 448, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 472, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 591, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 618, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 672, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 772, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 805, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 832, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 861, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 890, 10, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 919, 10, 57, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 925, 10, 59, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 3, 62, 3, 63, 3, 63, 5, 63, 935, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 5, 67, 948, 10, 67, 3, 67, 6, 67, 951, 10, 67, 13, 67, 14, 67, 952, 3, 68, 3, 68, 7, 68, 957, 10, 68, 12, 68, 14, 68, 960, 11, 68, 3, 68, 3, 68, 3, 69, 3, 69, 7, 69, 966, 10, 69, 12, 69, 14, 69, 969, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 7, 70, 975, 10, 70, 12, 70, 14, 70, 978, 11, 70, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 984, 10, 71, 12, 71, 14, 71, 987, 11, 71, 3, 71, 3, 71, 3, 72, 3, 72, 6, 72, 993, 10, 72, 13, 72, 14, 72, 994, 3, 73, 3, 73, 6, 73, 999, 10, 73, 13, 73, 14, 73, 1000, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 7, 76, 1017, 10, 76, 12, 76, 14, 76, 1020, 11, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 5, 78, 1032, 10, 78, 3, 78, 3, 78, 7, 78, 1036, 10, 78, 12, 78, 14, 78, 1039, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 6, 958, 967, 976, 985, 2, 2, 86, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 2, 119, 2, 2, 121, 2, 2, 123, 2, 2, 125, 2, 2, 127, 2, 2, 129, 2, 2, 131, 2, 2, 133, 2, 2, 135, 2, 60, 137, 2, 61, 139, 2, 62, 141, 2, 63, 143, 2, 64, 145, 2, 65, 147, 2, 66, 149, 2, 67, 151, 2, 74, 153, 2, 68, 155, 2, 75, 157, 2, 69, 159, 2, 2, 161, 2, 70, 163, 2, 71, 165, 2, 2, 167, 2, 2, 169, 2, 72, 171, 2, 73, 5, 2, 3, 4, 10, 5, 2, 11, 12, 15, 15, 34, 34, 4, 2, 67, 92, 99, 124, 3, 2, 50, 51, 3, 2, 50, 57, 3, 2, 50, 59, 4, 2, 67, 72, 99, 104, 3, 2, 12, 12, 6, 2, 37, 37, 41, 41, 47, 48, 97, 97, 2, 1091, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 3, 159, 3, 2, 2, 2, 3, 161, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 4, 165, 3, 2, 2, 2, 4, 167, 3, 2, 2, 2, 4, 169, 3, 2, 2, 2, 4, 171, 3, 2, 2, 2, 5, 174, 3, 2, 2, 2, 7, 180, 3, 2, 2, 2, 9, 186, 3, 2, 2, 2, 11, 190, 3, 2, 2, 2, 13, 193, 3, 2, 2, 2, 15, 200, 3, 2, 2, 2, 17, 207, 3, 2, 2, 2, 19, 212, 3, 2, 2, 2, 21, 214, 3, 2, 2, 2, 23, 217, 3, 2, 2, 2, 25, 224, 3, 2, 2, 2, 27, 226, 3, 2, 2, 2, 29, 237, 3, 2, 2, 2, 31, 253, 3, 2, 2, 2, 33, 256, 3, 2, 2, 2, 35, 264, 3, 2, 2, 2, 37, 279, 3, 2, 2, 2, 39, 296, 3, 2, 2, 2, 41, 302, 3, 2, 2, 2, 43, 307, 3, 2, 2, 2, 45, 315, 3, 2, 2, 2, 47, 322, 3, 2, 2, 2, 49, 327, 3, 2, 2, 2, 51, 334, 3, 2, 2, 2, 53, 340, 3, 2, 2, 2, 55, 345, 3, 2, 2, 2, 57, 349, 3, 2, 2, 2, 59, 364, 3, 2, 2, 2, 61, 366, 3, 2, 2, 2, 63, 368, 3, 2, 2, 2, 65, 371, 3, 2, 2, 2, 67, 378, 3, 2, 2, 2, 69, 402, 3, 2, 2, 2, 71, 404, 3, 2, 2, 2, 73, 414, 3, 2, 2, 2, 75, 447, 3, 2, 2, 2, 77, 471, 3, 2, 2, 2, 79, 473, 3, 2, 2, 2, 81, 490, 3, 2, 2, 2, 83, 511, 3, 2, 2, 2, 85, 533, 3, 2, 2, 2, 87, 545, 3, 2, 2, 2, 89, 553, 3, 2, 2, 2, 91, 590, 3, 2, 2, 2, 93, 617, 3, 2, 2, 2, 95, 619, 3, 2, 2, 2, 97, 671, 3, 2, 2, 2, 99, 673, 3, 2, 2, 2, 101, 700, 3, 2, 2, 2, 103, 771, 3, 2, 2, 2, 105, 773, 3, 2, 2, 2, 107, 804, 3, 2, 2, 2, 109, 831, 3, 2, 2, 2, 111, 860, 3, 2, 2, 2, 113, 889, 3, 2, 2, 2, 115, 918, 3, 2, 2, 2, 117, 920, 3, 2, 2, 2, 119, 924, 3, 2, 2, 2, 121, 926, 3, 2, 2, 2, 123, 928, 3, 2, 2, 2, 125, 930, 3, 2, 2, 2, 127, 934, 3, 2, 2, 2, 129, 936, 3, 2, 2, 2, 131, 939, 3, 2, 2, 2, 133, 942, 3, 2, 2, 2, 135, 945, 3, 2, 2, 2, 137, 954, 3, 2, 2, 2, 139, 963, 3, 2, 2, 2, 141, 972, 3, 2, 2, 2, 143, 981, 3, 2, 2, 2, 145, 990, 3, 2, 2, 2, 147, 996, 3, 2, 2, 2, 149, 1002, 3, 2, 2, 2, 151, 1004, 3, 2, 2, 2, 153, 1013, 3, 2, 2, 2, 155, 1023, 3, 2, 2, 2, 157, 1031, 3, 2, 2, 2, 159, 1040, 3, 2, 2, 2, 161, 1044, 3, 2, 2, 2, 163, 1052, 3, 2, 2, 2, 165, 1056, 3, 2, 2, 2, 167, 1062, 3, 2, 2, 2, 169, 1066, 3, 2, 2, 2, 171, 1072, 3, 2, 2, 2, 173, 175, 9, 2, 2, 2, 174, 173, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 179, 8, 2, 2, 2, 179, 6, 3, 2, 2, 2, 180, 181, 7, 68, 2, 2, 181, 182, 7, 71, 2, 2, 182, 183, 7, 73, 2, 2, 183, 184, 7, 75, 2, 2, 184, 185, 7, 80, 2, 2, 185, 8, 3, 2, 2, 2, 186, 187, 7, 71, 2, 2, 187, 188, 7, 80, 2, 2, 188, 189, 7, 70, 2, 2, 189, 10, 3, 2, 2, 2, 190, 191, 7, 75, 2, 2, 191, 192, 7, 72, 2, 2, 192, 12, 3, 2, 2, 2, 193, 194, 7, 87, 2, 2, 194, 195, 7, 80, 2, 2, 195, 196, 7, 78, 2, 2, 196, 197, 7, 71, 2, 2, 197, 198, 7, 85, 2, 2, 198, 199, 7, 85, 2, 2, 199, 14, 3, 2, 2, 2, 200, 201, 7, 89, 2, 2, 201, 202, 7, 71, 2, 2, 202, 203, 7, 75, 2, 2, 203, 204, 7, 73, 2, 2, 204, 205, 7, 74, 2, 2, 205, 206, 7, 86, 2, 2, 206, 16, 3, 2, 2, 2, 207, 208, 7, 86, 2, 2, 208, 209, 7, 74, 2, 2, 209, 210, 7, 71, 2, 2, 210, 211, 7, 80, 2, 2, 211, 18, 3, 2, 2, 2, 212, 213, 7, 63, 2, 2, 213, 20, 3, 2, 2, 2, 214, 215, 7, 63, 2, 2, 215, 216, 7, 63, 2, 2, 216, 22, 3, 2, 2, 2, 217, 218, 7, 68, 2, 2, 218, 219, 7, 84, 2, 2, 219, 220, 7, 67, 2, 2, 220, 221, 7, 80, 2, 2, 221, 222, 7, 69, 2, 2, 222, 223, 7, 74, 2, 2, 223, 24, 3, 2, 2, 2, 224, 225, 7, 45, 2, 2, 225, 26, 3, 2, 2, 2, 226, 227, 7, 69, 2, 2, 227, 228, 7, 81, 2, 2, 228, 229, 7, 82, 2, 2, 229, 230, 7, 91, 2, 2, 230, 231, 7, 97, 2, 2, 231, 232, 7, 86, 2, 2, 232, 233, 7, 84, 2, 2, 233, 234, 7, 67, 2, 2, 234, 235, 7, 80, 2, 2, 235, 236, 7, 85, 2, 2, 236, 28, 3, 2, 2, 2, 237, 238, 7, 69, 2, 2, 238, 239, 7, 81, 2, 2, 239, 240, 7, 82, 2, 2, 240, 241, 7, 91, 2, 2, 241, 242, 7, 97, 2, 2, 242, 243, 7, 86, 2, 2, 243, 244, 7, 84, 2, 2, 244, 245, 7, 67, 2, 2, 245, 246, 7, 80, 2, 2, 246, 247, 7, 85, 2, 2, 247, 248, 7, 97, 2, 2, 248, 249, 7, 78, 2, 2, 249, 250, 7, 67, 2, 2, 250, 251, 7, 86, 2, 2, 251, 252, 7, 71, 2, 2, 252, 30, 3, 2, 2, 2, 253, 254, 7, 70, 2, 2, 254, 255, 7, 81, 2, 2, 255, 32, 3, 2, 2, 2, 256, 257, 7, 76, 2, 2, 257, 258, 7, 81, 2, 2, 258, 259, 7, 87, 2, 2, 259, 260, 7, 84, 2, 2, 260, 261, 7, 80, 2, 2, 261, 262, 7, 67, 2, 2, 262, 263, 7, 78, 2, 2, 263, 34, 3, 2, 2, 2, 264, 265, 7, 85, 2, 2, 265, 266, 7, 81, 2, 2, 266, 267, 7, 78, 2, 2, 267, 268, 7, 88, 2, 2, 268, 269, 7, 71, 2, 2, 269, 270, 7, 70, 2, 2, 270, 271, 7, 97, 2, 2, 271, 272, 7, 76, 2, 2, 272, 273, 7, 81, 2, 2, 273, 274, 7, 87, 2, 2, 274, 275, 7, 84, 2, 2, 275, 276, 7, 80, 2, 2, 276, 277, 7, 67, 2, 2, 277, 278, 7, 78, 2, 2, 278, 36, 3, 2, 2, 2, 279, 280, 7, 87, 2, 2, 280, 281, 7, 80, 2, 2, 281, 282, 7, 85, 2, 2, 282, 283, 7, 81, 2, 2, 283, 284, 7, 78, 2, 2, 284, 285, 7, 88, 2, 2, 285, 286, 7, 71, 2, 2, 286, 287, 7, 70, 2, 2, 287, 288, 7, 97, 2, 2, 288, 289, 7, 76, 2, 2, 289, 290, 7, 81, 2, 2, 290, 291, 7, 87, 2, 2, 291, 292, 7, 84, 2, 2, 292, 293, 7, 80, 2, 2, 293, 294, 7, 67, 2, 2, 294, 295, 7, 78, 2, 2, 295, 38, 3, 2, 2, 2, 296, 297, 7, 72, 2, 2, 297, 298, 7, 78, 2, 2, 298, 299, 7, 67, 2, 2, 299, 300, 7, 73, 2, 2, 300, 301, 7, 85, 2, 2, 301, 40, 3, 2, 2, 2, 302, 303, 7, 73, 2, 2, 303, 304, 7, 81, 2, 2, 304, 305, 7, 86, 2, 2, 305, 306, 7, 81, 2, 2, 306, 42, 3, 2, 2, 2, 307, 308, 7, 67, 2, 2, 308, 309, 7, 82, 2, 2, 309, 310, 7, 82, 2, 2, 310, 311, 7, 71, 2, 2, 311, 312, 7, 80, 2, 2, 312, 313, 7, 70, 2, 2, 313, 314, 7, 75, 2, 2, 314, 44, 3, 2, 2, 2, 315, 316, 7, 69, 2, 2, 316, 317, 7, 74, 2, 2, 317, 318, 7, 67, 2, 2, 318, 319, 7, 75, 2, 2, 319, 320, 7, 80, 2, 2, 320, 321, 7, 52, 2, 2, 321, 46, 3, 2, 2, 2, 322, 323, 7, 85, 2, 2, 323, 324, 7, 67, 2, 2, 324, 325, 7, 72, 2, 2, 325, 326, 7, 71, 2, 2, 326, 48, 3, 2, 2, 2, 327, 328, 7, 71, 2, 2, 328, 329, 7, 90, 2, 2, 329, 330, 7, 86, 2, 2, 330, 331, 7, 71, 2, 2, 331, 332, 7, 84, 2, 2, 332, 333, 7, 80, 2, 2, 333, 50, 3, 2, 2, 2, 334, 335, 7, 84, 2, 2, 335, 336, 7, 71, 2, 2, 336, 337, 7, 82, 2, 2, 337, 338, 7, 78, 2, 2, 338, 339, 7, 91, 2, 2, 339, 52, 3, 2, 2, 2, 340, 341, 7, 71, 2, 2, 341, 342, 7, 90, 2, 2, 342, 343, 7, 75, 2, 2, 343, 344, 7, 86, 2, 2, 344, 54, 3, 2, 2, 2, 345, 346, 7, 85, 2, 2, 346, 347, 7, 67, 2, 2, 347, 348, 7, 91, 2, 2, 348, 56, 3, 2, 2, 2, 349, 350, 7, 75, 2, 2, 350, 351, 7, 72, 2, 2, 351, 352, 7, 97, 2, 2, 352, 353, 7, 72, 2, 2, 353, 354, 7, 75, 2, 2, 354, 355, 7, 78, 2, 2, 355, 356, 7, 71, 2, 2, 356, 357, 7, 97, 2, 2, 357, 358, 7, 71, 2, 2, 358, 359, 7, 90, 2, 2, 359, 360, 7, 75, 2, 2, 360, 361, 7, 85, 2, 2, 361, 362, 7, 86, 2, 2, 362, 363, 7, 85, 2, 2, 363, 58, 3, 2, 2, 2, 364, 365, 7, 42, 2, 2, 365, 60, 3, 2, 2, 2, 366, 367, 7, 43, 2, 2, 367, 62, 3, 2, 2, 2, 368, 369, 7, 67, 2, 2, 369, 370, 7, 86, 2, 2, 370, 64, 3, 2, 2, 2, 371, 372, 7, 67, 2, 2, 372, 373, 7, 82, 2, 2, 373, 374, 7, 82, 2, 2, 374, 375, 7, 71, 2, 2, 375, 376, 7, 80, 2, 2, 376, 377, 7, 70, 2, 2, 377, 66, 3, 2, 2, 2, 378, 379, 7, 67, 2, 2, 379, 380, 7, 82, 2, 2, 380, 381, 7, 82, 2, 2, 381, 382, 7, 71, 2, 2, 382, 383, 7, 80, 2, 2, 383, 384, 7, 70, 2, 2, 384, 385, 7, 97, 2, 2, 385, 386, 7, 71, 2, 2, 386, 387, 7, 67, 2, 2, 387, 388, 7, 84, 2, 2, 388, 389, 7, 78, 2, 2, 389, 390, 7, 91, 2, 2, 390, 68, 3, 2, 2, 2, 391, 392, 7, 69, 2, 2, 392, 393, 7, 74, 2, 2, 393, 394, 7, 67, 2, 2, 394, 395, 7, 75, 2, 2, 395, 403, 7, 80, 2, 2, 396, 397, 7, 69, 2, 2, 397, 398, 7, 74, 2, 2, 398, 399, 7, 67, 2, 2, 399, 400, 7, 75, 2, 2, 400, 401, 7, 80, 2, 2, 401, 403, 7, 53, 2, 2, 402, 391, 3, 2, 2, 2, 402, 396, 3, 2, 2, 2, 403, 70, 3, 2, 2, 2, 404, 405, 7, 75, 2, 2, 405, 406, 7, 80, 2, 2, 406, 407, 7, 86, 2, 2, 407, 408, 7, 71, 2, 2, 408, 409, 7, 84, 2, 2, 409, 410, 7, 76, 2, 2, 410, 411, 7, 71, 2, 2, 411, 412, 7, 69, 2, 2, 412, 413, 7, 86, 2, 2, 413, 72, 3, 2, 2, 2, 414, 415, 7, 71, 2, 2, 415, 416, 7, 90, 2, 2, 416, 417, 7, 86, 2, 2, 417, 418, 7, 71, 2, 2, 418, 419, 7, 80, 2, 2, 419, 420, 7, 70, 2, 2, 420, 421, 7, 97, 2, 2, 421, 422, 7, 86, 2, 2, 422, 423, 7, 81, 2, 2, 423, 424, 7, 82, 2, 2, 424, 74, 3, 2, 2, 2, 425, 426, 7, 67, 2, 2, 426, 427, 7, 70, 2, 2, 427, 428, 7, 70, 2, 2, 428, 429, 7, 97, 2, 2, 429, 430, 7, 85, 2, 2, 430, 431, 7, 86, 2, 2, 431, 432, 7, 67, 2, 2, 432, 433, 7, 86, 2, 2, 433, 434, 7, 71, 2, 2, 434, 435, 7, 97, 2, 2, 435, 436, 7, 86, 2, 2, 436, 437, 7, 84, 2, 2, 437, 438, 7, 75, 2, 2, 438, 439, 7, 73, 2, 2, 439, 440, 7, 73, 2, 2, 440, 441, 7, 71, 2, 2, 441, 448, 7, 84, 2, 2, 442, 443, 7, 67, 2, 2, 443, 444, 7, 97, 2, 2, 444, 445, 7, 85, 2, 2, 445, 446, 7, 97, 2, 2, 446, 448, 7, 86, 2, 2, 447, 425, 3, 2, 2, 2, 447, 442, 3, 2, 2, 2, 448, 76, 3, 2, 2, 2, 449, 450, 7, 67, 2, 2, 450, 451, 7, 70, 2, 2, 451, 452, 7, 70, 2, 2, 452, 453, 7, 97, 2, 2, 453, 454, 7, 86, 2, 2, 454, 455, 7, 84, 2, 2, 455, 456, 7, 67, 2, 2, 456, 457, 7, 80, 2, 2, 457, 458, 7, 85, 2, 2, 458, 459, 7, 97, 2, 2, 459, 460, 7, 86, 2, 2, 460, 461, 7, 84, 2, 2, 461, 462, 7, 75, 2, 2, 462, 463, 7, 73, 2, 2, 463, 464, 7, 73, 2, 2, 464, 465, 7, 71, 2, 2, 465, 472, 7, 84, 2, 2, 466, 467, 7, 67, 2, 2, 467, 468, 7, 97, 2, 2, 468, 469, 7, 86, 2, 2, 469, 470, 7, 97, 2, 2, 470, 472, 7, 86, 2, 2, 471, 449, 3, 2, 2, 2, 471, 466, 3, 2, 2, 2, 472, 78, 3, 2, 2, 2, 473, 474, 7, 67, 2, 2, 474, 475, 7, 70, 2, 2, 475, 476, 7, 70, 2, 2, 476, 477, 7, 97, 2, 2, 477, 478, 7, 86, 2, 2, 478, 479, 7, 84, 2, 2, 479, 480, 7, 67, 2, 2, 480, 481, 7, 80, 2, 2, 481, 482, 7, 85, 2, 2, 482, 483, 7, 97, 2, 2, 483, 484, 7, 67, 2, 2, 484, 485, 7, 69, 2, 2, 485, 486, 7, 86, 2, 2, 486, 487, 7, 75, 2, 2, 487, 488, 7, 81, 2, 2, 488, 489, 7, 80, 2, 2, 489, 80, 3, 2, 2, 2, 490, 491, 7, 84, 2, 2, 491, 492, 7, 71, 2, 2, 492, 493, 7, 82, 2, 2, 493, 494, 7, 78, 2, 2, 494, 495, 7, 67, 2, 2, 495, 496, 7, 69, 2, 2, 496, 497, 7, 71, 2, 2, 497, 498, 7, 97, 2, 2, 498, 499, 7, 86, 2, 2, 499, 500, 7, 84, 2, 2, 500, 501, 7, 67, 2, 2, 501, 502, 7, 80, 2, 2, 502, 503, 7, 85, 2, 2, 503, 504, 7, 97, 2, 2, 504, 505, 7, 67, 2, 2, 505, 506, 7, 69, 2, 2, 506, 507, 7, 86, 2, 2, 507, 508, 7, 75, 2, 2, 508, 509, 7, 81, 2, 2, 509, 510, 7, 80, 2, 2, 510, 82, 3, 2, 2, 2, 511, 512, 7, 84, 2, 2, 512, 513, 7, 71, 2, 2, 513, 514, 7, 82, 2, 2, 514, 515, 7, 78, 2, 2, 515, 516, 7, 67, 2, 2, 516, 517, 7, 69, 2, 2, 517, 518, 7, 71, 2, 2, 518, 519, 7, 97, 2, 2, 519, 520, 7, 86, 2, 2, 520, 521, 7, 84, 2, 2, 521, 522, 7, 67, 2, 2, 522, 523, 7, 80, 2, 2, 523, 524, 7, 85, 2, 2, 524, 525, 7, 97, 2, 2, 525, 526, 7, 86, 2, 2, 526, 527, 7, 84, 2, 2, 527, 528, 7, 75, 2, 2, 528, 529, 7, 73, 2, 2, 529, 530, 7, 73, 2, 2, 530, 531, 7, 71, 2, 2, 531, 532, 7, 84, 2, 2, 532, 84, 3, 2, 2, 2, 533, 534, 7, 67, 2, 2, 534, 535, 7, 78, 2, 2, 535, 536, 7, 86, 2, 2, 536, 537, 7, 71, 2, 2, 537, 538, 7, 84, 2, 2, 538, 539, 7, 97, 2, 2, 539, 540, 7, 86, 2, 2, 540, 541, 7, 84, 2, 2, 541, 542, 7, 67, 2, 2, 542, 543, 7, 80, 2, 2, 543, 544, 7, 85, 2, 2, 544, 86, 3, 2, 2, 2, 545, 546, 7, 84, 2, 2, 546, 547, 7, 71, 2, 2, 547, 548, 7, 82, 2, 2, 548, 549, 7, 78, 2, 2, 549, 550, 7, 67, 2, 2, 550, 551, 7, 69, 2, 2, 551, 552, 7, 71, 2, 2, 552, 88, 3, 2, 2, 2, 553, 554, 7, 85, 2, 2, 554, 555, 7, 71, 2, 2, 555, 556, 7, 86, 2, 2, 556, 557, 7, 97, 2, 2, 557, 558, 7, 89, 2, 2, 558, 559, 7, 71, 2, 2, 559, 560, 7, 75, 2, 2, 560, 561, 7, 73, 2, 2, 561, 562, 7, 74, 2, 2, 562, 563, 7, 86, 2, 2, 563, 90, 3, 2, 2, 2, 564, 565, 7, 84, 2, 2, 565, 566, 7, 71, 2, 2, 566, 567, 7, 82, 2, 2, 567, 568, 7, 78, 2, 2, 568, 569, 7, 67, 2, 2, 569, 570, 7, 69, 2, 2, 570, 571, 7, 71, 2, 2, 571, 572, 7, 97, 2, 2, 572, 573, 7, 85, 2, 2, 573, 574, 7, 86, 2, 2, 574, 575, 7, 67, 2, 2, 575, 576, 7, 86, 2, 2, 576, 577, 7, 71, 2, 2, 577, 578, 7, 97, 2, 2, 578, 579, 7, 86, 2, 2, 579, 580, 7, 84, 2, 2, 580, 581, 7, 75, 2, 2, 581, 582, 7, 73, 2, 2, 582, 583, 7, 73, 2, 2, 583, 584, 7, 71, 2, 2, 584, 591, 7, 84, 2, 2, 585, 586, 7, 84, 2, 2, 586, 587, 7, 97, 2, 2, 587, 588, 7, 85, 2, 2, 588, 589, 7, 97, 2, 2, 589, 591, 7, 86, 2, 2, 590, 564, 3, 2, 2, 2, 590, 585, 3, 2, 2, 2, 591, 92, 3, 2, 2, 2, 592, 593, 7, 84, 2, 2, 593, 594, 7, 71, 2, 2, 594, 595, 7, 82, 2, 2, 595, 596, 7, 78, 2, 2, 596, 597, 7, 67, 2, 2, 597, 598, 7, 69, 2, 2, 598, 599, 7, 71, 2, 2, 599, 600, 7, 97, 2, 2, 600, 601, 7, 86, 2, 2, 601, 602, 7, 84, 2, 2, 602, 603, 7, 75, 2, 2, 603, 604, 7, 73, 2, 2, 604, 605, 7, 73, 2, 2, 605, 606, 7, 71, 2, 2, 606, 607, 7, 84, 2, 2, 607, 608, 7, 97, 2, 2, 608, 609, 7, 86, 2, 2, 609, 610, 7, 71, 2, 2, 610, 611, 7, 90, 2, 2, 611, 618, 7, 86, 2, 2, 612, 613, 7, 84, 2, 2, 613, 614, 7, 97, 2, 2, 614, 615, 7, 86, 2, 2, 615, 616, 7, 97, 2, 2, 616, 618, 7, 86, 2, 2, 617, 592, 3, 2, 2, 2, 617, 612, 3, 2, 2, 2, 618, 94, 3, 2, 2, 2, 619, 620, 7, 84, 2, 2, 620, 621, 7, 71, 2, 2, 621, 622, 7, 82, 2, 2, 622, 623, 7, 78, 2, 2, 623, 624, 7, 67, 2, 2, 624, 625, 7, 69, 2, 2, 625, 626, 7, 71, 2, 2, 626, 627, 7, 97, 2, 2, 627, 628, 7, 86, 2, 2, 628, 629, 7, 84, 2, 2, 629, 630, 7, 75, 2, 2, 630, 631, 7, 73, 2, 2, 631, 632, 7, 73, 2, 2, 632, 633, 7, 71, 2, 2, 633, 634, 7, 84, 2, 2, 634, 635, 7, 97, 2, 2, 635, 636, 7, 86, 2, 2, 636, 637, 7, 71, 2, 2, 637, 638, 7, 90, 2, 2, 638, 639, 7, 86, 2, 2, 639, 640, 7, 97, 2, 2, 640, 641, 7, 84, 2, 2, 641, 642, 7, 71, 2, 2, 642, 643, 7, 73, 2, 2, 643, 644, 7, 71, 2, 2, 644, 645, 7, 90, 2, 2, 645, 646, 7, 82, 2, 2, 646, 96, 3, 2, 2, 2, 647, 648, 7, 84, 2, 2, 648, 649, 7, 71, 2, 2, 649, 650, 7, 82, 2, 2, 650, 651, 7, 78, 2, 2, 651, 652, 7, 67, 2, 2, 652, 653, 7, 69, 2, 2, 653, 654, 7, 71, 2, 2, 654, 655, 7, 97, 2, 2, 655, 656, 7, 67, 2, 2, 656, 657, 7, 69, 2, 2, 657, 658, 7, 86, 2, 2, 658, 659, 7, 75, 2, 2, 659, 660, 7, 81, 2, 2, 660, 661, 7, 80, 2, 2, 661, 662, 7, 97, 2, 2, 662, 663, 7, 86, 2, 2, 663, 664, 7, 71, 2, 2, 664, 665, 7, 90, 2, 2, 665, 672, 7, 86, 2, 2, 666, 667, 7, 84, 2, 2, 667, 668, 7, 97, 2, 2, 668, 669, 7, 67, 2, 2, 669, 670, 7, 97, 2, 2, 670, 672, 7, 86, 2, 2, 671, 647, 3, 2, 2, 2, 671, 666, 3, 2, 2, 2, 672, 98, 3, 2, 2, 2, 673, 674, 7, 84, 2, 2, 674, 675, 7, 71, 2, 2, 675, 676, 7, 82, 2, 2, 676, 677, 7, 78, 2, 2, 677, 678, 7, 67, 2, 2, 678, 679, 7, 69, 2, 2, 679, 680, 7, 71, 2, 2, 680, 681, 7, 97, 2, 2, 681, 682, 7, 67, 2, 2, 682, 683, 7, 69, 2, 2, 683, 684, 7, 86, 2, 2, 684, 685, 7, 75, 2, 2, 685, 686, 7, 81, 2, 2, 686, 687, 7, 80, 2, 2, 687, 688, 7, 97, 2, 2, 688, 689, 7, 86, 2, 2, 689, 690, 7, 71, 2, 2, 690, 691, 7, 90, 2, 2, 691, 692, 7, 86, 2, 2, 692, 693, 7, 97, 2, 2, 693, 694, 7, 84, 2, 2, 694, 695, 7, 71, 2, 2, 695, 696, 7, 73, 2, 2, 696, 697, 7, 71, 2, 2, 697, 698, 7, 90, 2, 2, 698, 699, 7, 82, 2, 2, 699, 100, 3, 2, 2, 2, 700, 701, 7, 84, 2, 2, 701, 702, 7, 71, 2, 2, 702, 703, 7, 82, 2, 2, 703, 704, 7, 78, 2, 2, 704, 705, 7, 67, 2, 2, 705, 706, 7, 69, 2, 2, 706, 707, 7, 71, 2, 2, 707, 708, 7, 97, 2, 2, 708, 709, 7, 67, 2, 2, 709, 710, 7, 69, 2, 2, 710, 711, 7, 86, 2, 2, 711, 712, 7, 75, 2, 2, 712, 713, 7, 81, 2, 2, 713, 714, 7, 80, 2, 2, 714, 715, 7, 97, 2, 2, 715, 716, 7, 86, 2, 2, 716, 717, 7, 71, 2, 2, 717, 718, 7, 90, 2, 2, 718, 719, 7, 86, 2, 2, 719, 720, 7, 97, 2, 2, 720, 721, 7, 82, 2, 2, 721, 722, 7, 84, 2, 2, 722, 723, 7, 81, 2, 2, 723, 724, 7, 69, 2, 2, 724, 725, 7, 71, 2, 2, 725, 726, 7, 85, 2, 2, 726, 727, 7, 85, 2, 2, 727, 102, 3, 2, 2, 2, 728, 729, 7, 84, 2, 2, 729, 730, 7, 97, 2, 2, 730, 731, 7, 67, 2, 2, 731, 732, 7, 97, 2, 2, 732, 733, 7, 86, 2, 2, 733, 734, 7, 97, 2, 2, 734, 735, 7, 82, 2, 2, 735, 736, 7, 97, 2, 2, 736, 772, 7, 84, 2, 2, 737, 738, 7, 84, 2, 2, 738, 739, 7, 71, 2, 2, 739, 740, 7, 82, 2, 2, 740, 741, 7, 78, 2, 2, 741, 742, 7, 67, 2, 2, 742, 743, 7, 69, 2, 2, 743, 744, 7, 71, 2, 2, 744, 745, 7, 97, 2, 2, 745, 746, 7, 67, 2, 2, 746, 747, 7, 69, 2, 2, 747, 748, 7, 86, 2, 2, 748, 749, 7, 75, 2, 2, 749, 750, 7, 81, 2, 2, 750, 751, 7, 80, 2, 2, 751, 752, 7, 97, 2, 2, 752, 753, 7, 86, 2, 2, 753, 754, 7, 71, 2, 2, 754, 755, 7, 90, 2, 2, 755, 756, 7, 86, 2, 2, 756, 757, 7, 97, 2, 2, 757, 758, 7, 82, 2, 2, 758, 759, 7, 84, 2, 2, 759, 760, 7, 81, 2, 2, 760, 761, 7, 69, 2, 2, 761, 762, 7, 71, 2, 2, 762, 763, 7, 85, 2, 2, 763, 764, 7, 85, 2, 2, 764, 765, 7, 97, 2, 2, 765, 766, 7, 84, 2, 2, 766, 767, 7, 71, 2, 2, 767, 768, 7, 73, 2, 2, 768, 769, 7, 71, 2, 2, 769, 770, 7, 90, 2, 2, 770, 772, 7, 82, 2, 2, 771, 728, 3, 2, 2, 2, 771, 737, 3, 2, 2, 2, 772, 104, 3, 2, 2, 2, 773, 774, 7, 84, 2, 2, 774, 775, 7, 71, 2, 2, 775, 776, 7, 82, 2, 2, 776, 777, 7, 78, 2, 2, 777, 778, 7, 67, 2, 2, 778, 779, 7, 69, 2, 2, 779, 780, 7, 71, 2, 2, 780, 781, 7, 97, 2, 2, 781, 782, 7, 85, 2, 2, 782, 783, 7, 67, 2, 2, 783, 784, 7, 91, 2, 2, 784, 106, 3, 2, 2, 2, 785, 786, 7, 71, 2, 2, 786, 787, 7, 90, 2, 2, 787, 788, 7, 86, 2, 2, 788, 789, 7, 71, 2, 2, 789, 790, 7, 80, 2, 2, 790, 791, 7, 70, 2, 2, 791, 792, 7, 97, 2, 2, 792, 793, 7, 68, 2, 2, 793, 794, 7, 81, 2, 2, 794, 795, 7, 86, 2, 2, 795, 796, 7, 86, 2, 2, 796, 797, 7, 81, 2, 2, 797, 805, 7, 79, 2, 2, 798, 799, 7, 71, 2, 2, 799, 800, 7, 90, 2, 2, 800, 801, 7, 86, 2, 2, 801, 802, 7, 71, 2, 2, 802, 803, 7, 80, 2, 2, 803, 805, 7, 70, 2, 2, 804, 785, 3, 2, 2, 2, 804, 798, 3, 2, 2, 2, 805, 108, 3, 2, 2, 2, 806, 807, 7, 75, 2, 2, 807, 808, 7, 80, 2, 2, 808, 809, 7, 86, 2, 2, 809, 810, 7, 71, 2, 2, 810, 811, 7, 84, 2, 2, 811, 812, 7, 76, 2, 2, 812, 813, 7, 71, 2, 2, 813, 814, 7, 69, 2, 2, 814, 815, 7, 86, 2, 2, 815, 816, 7, 97, 2, 2, 816, 817, 7, 69, 2, 2, 817, 818, 7, 81, 2, 2, 818, 819, 7, 82, 2, 2, 819, 820, 7, 91, 2, 2, 820, 821, 7, 97, 2, 2, 821, 822, 7, 86, 2, 2, 822, 823, 7, 84, 2, 2, 823, 824, 7, 67, 2, 2, 824, 825, 7, 80, 2, 2, 825, 832, 7, 85, 2, 2, 826, 827, 7, 75, 2, 2, 827, 828, 7, 97, 2, 2, 828, 829, 7, 69, 2, 2, 829, 830, 7, 97, 2, 2, 830, 832, 7, 86, 2, 2, 831, 806, 3, 2, 2, 2, 831, 826, 3, 2, 2, 2, 832, 110, 3, 2, 2, 2, 833, 834, 7, 75, 2, 2, 834, 835, 7, 80, 2, 2, 835, 836, 7, 86, 2, 2, 836, 837, 7, 71, 2, 2, 837, 838, 7, 84, 2, 2, 838, 839, 7, 76, 2, 2, 839, 840, 7, 71, 2, 2, 840, 841, 7, 69, 2, 2, 841, 842, 7, 86, 2, 2, 842, 843, 7, 97, 2, 2, 843, 844, 7, 69, 2, 2, 844, 845, 7, 81, 2, 2, 845, 846, 7, 82, 2, 2, 846, 847, 7, 91, 2, 2, 847, 848, 7, 97, 2, 2, 848, 849, 7, 86, 2, 2, 849, 850, 7, 84, 2, 2, 850, 851, 7, 67, 2, 2, 851, 852, 7, 80, 2, 2, 852, 853, 7, 85, 2, 2, 853, 861, 7, 52, 2, 2, 854, 855, 7, 75, 2, 2, 855, 856, 7, 97, 2, 2, 856, 857, 7, 69, 2, 2, 857, 858, 7, 97, 2, 2, 858, 859, 7, 86, 2, 2, 859, 861, 7, 52, 2, 2, 860, 833, 3, 2, 2, 2, 860, 854, 3, 2, 2, 2, 861, 112, 3, 2, 2, 2, 862, 863, 7, 75, 2, 2, 863, 864, 7, 80, 2, 2, 864, 865, 7, 86, 2, 2, 865, 866, 7, 71, 2, 2, 866, 867, 7, 84, 2, 2, 867, 868, 7, 76, 2, 2, 868, 869, 7, 71, 2, 2, 869, 870, 7, 69, 2, 2, 870, 871, 7, 86, 2, 2, 871, 872, 7, 97, 2, 2, 872, 873, 7, 69, 2, 2, 873, 874, 7, 81, 2, 2, 874, 875, 7, 82, 2, 2, 875, 876, 7, 91, 2, 2, 876, 877, 7, 97, 2, 2, 877, 878, 7, 86, 2, 2, 878, 879, 7, 84, 2, 2, 879, 880, 7, 67, 2, 2, 880, 881, 7, 80, 2, 2, 881, 882, 7, 85, 2, 2, 882, 890, 7, 53, 2, 2, 883, 884, 7, 75, 2, 2, 884, 885, 7, 97, 2, 2, 885, 886, 7, 69, 2, 2, 886, 887, 7, 97, 2, 2, 887, 888, 7, 86, 2, 2, 888, 890, 7, 53, 2, 2, 889, 862, 3, 2, 2, 2, 889, 883, 3, 2, 2, 2, 890, 114, 3, 2, 2, 2, 891, 892, 7, 75, 2, 2, 892, 893, 7, 80, 2, 2, 893, 894, 7, 86, 2, 2, 894, 895, 7, 71, 2, 2, 895, 896, 7, 84, 2, 2, 896, 897, 7, 76, 2, 2, 897, 898, 7, 71, 2, 2, 898, 899, 7, 69, 2, 2, 899, 900, 7, 86, 2, 2, 900, 901, 7, 97, 2, 2, 901, 902, 7, 69, 2, 2, 902, 903, 7, 81, 2, 2, 903, 904, 7, 82, 2, 2, 904, 905, 7, 91, 2, 2, 905, 906, 7, 97, 2, 2, 906, 907, 7, 86, 2, 2, 907, 908, 7, 84, 2, 2, 908, 909, 7, 67, 2, 2, 909, 910, 7, 80, 2, 2, 910, 911, 7, 85, 2, 2, 911, 919, 7, 54, 2, 2, 912, 913, 7, 75, 2, 2, 913, 914, 7, 97, 2, 2, 914, 915, 7, 69, 2, 2, 915, 916, 7, 97, 2, 2, 916, 917, 7, 86, 2, 2, 917, 919, 7, 54, 2, 2, 918, 891, 3, 2, 2, 2, 918, 912, 3, 2, 2, 2, 919, 116, 3, 2, 2, 2, 920, 921, 9, 3, 2, 2, 921, 118, 3, 2, 2, 2, 922, 925, 5, 117, 58, 2, 923, 925, 5, 125, 62, 2, 924, 922, 3, 2, 2, 2, 924, 923, 3, 2, 2, 2, 925, 120, 3, 2, 2, 2, 926, 927, 9, 4, 2, 2, 927, 122, 3, 2, 2, 2, 928, 929, 9, 5, 2, 2, 929, 124, 3, 2, 2, 2, 930, 931, 9, 6, 2, 2, 931, 126, 3, 2, 2, 2, 932, 935, 5, 125, 62, 2, 933, 935, 9, 7, 2, 2, 934, 932, 3, 2, 2, 2, 934, 933, 3, 2, 2, 2, 935, 128, 3, 2, 2, 2, 936, 937, 7, 50, 2, 2, 937, 938, 7, 113, 2, 2, 938, 130, 3, 2, 2, 2, 939, 940, 7, 50, 2, 2, 940, 941, 7, 100, 2, 2, 941, 132, 3, 2, 2, 2, 942, 943, 7, 50, 2, 2, 943, 944, 7, 122, 2, 2, 944, 134, 3, 2, 2, 2, 945, 947, 7, 37, 2, 2, 946, 948, 7, 47, 2, 2, 947, 946, 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 950, 3, 2, 2, 2, 949, 951, 5, 125, 62, 2, 950, 949, 3, 2, 2, 2, 951, 952, 3, 2, 2, 2, 952, 950, 3, 2, 2, 2, 952, 953, 3, 2, 2, 2, 953, 136, 3, 2, 2, 2, 954, 958, 7, 93, 2, 2, 955, 957, 11, 2, 2, 2, 956, 955, 3, 2, 2, 2, 957, 960, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 958, 956, 3, 2, 2, 2, 959, 961, 3, 2, 2, 2, 960, 958, 3, 2, 2, 2, 961, 962, 7, 95, 2, 2, 962, 138, 3, 2, 2, 2, 963, 967, 7, 128, 2, 2, 964, 966, 11, 2, 2, 2, 965, 964, 3, 2, 2, 2, 966, 969, 3, 2, 2, 2, 967, 968, 3, 2, 2, 2, 967, 965, 3, 2, 2, 2, 968, 970, 3, 2, 2, 2, 969, 967, 3, 2, 2, 2, 970, 971, 7, 128, 2, 2, 971, 140, 3, 2, 2, 2, 972, 976, 7, 36, 2, 2, 973, 975, 11, 2, 2, 2, 974, 973, 3, 2, 2, 2, 975, 978, 3, 2, 2, 2, 976, 977, 3, 2, 2, 2, 976, 974, 3, 2, 2, 2, 977, 979, 3, 2, 2, 2, 978, 976, 3, 2, 2, 2, 979, 980, 7, 36, 2, 2, 980, 142, 3, 2, 2, 2, 981, 985, 7, 39, 2, 2, 982, 984, 11, 2, 2, 2, 983, 982, 3, 2, 2, 2, 984, 987, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 985, 983, 3, 2, 2, 2, 986, 988, 3, 2, 2, 2, 987, 985, 3, 2, 2, 2, 988, 989, 7, 39, 2, 2, 989, 144, 3, 2, 2, 2, 990, 992, 7, 35, 2, 2, 991, 993, 9, 6, 2, 2, 992, 991, 3, 2, 2, 2, 993, 994, 3, 2, 2, 2, 994, 992, 3, 2, 2, 2, 994, 995, 3, 2, 2, 2, 995, 146, 3, 2, 2, 2, 996, 998, 7, 66, 2, 2, 997, 999, 9, 6, 2, 2, 998, 997, 3, 2, 2, 2, 999, 1000, 3, 2, 2, 2, 1000, 998, 3, 2, 2, 2, 1000, 1001, 3, 2, 2, 2, 1001, 148, 3, 2, 2, 2, 1002, 1003, 7, 96, 2, 2, 1003, 150, 3, 2, 2, 2, 1004, 1005, 7, 128, 2, 2, 1005, 1006, 7, 128, 2, 2, 1006, 1007, 7, 128, 2, 2, 1007, 1008, 7, 128, 2, 2, 1008, 1009, 7, 128, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1011, 8, 75, 3, 2, 1011, 1012, 8, 75, 4, 2, 1012, 152, 3, 2, 2, 2, 1013, 1014, 7, 49, 2, 2, 1014, 1018, 7, 49, 2, 2, 1015, 1017, 10, 8, 2, 2, 1016, 1015, 3, 2, 2, 2, 1017, 1020, 3, 2, 2, 2, 1018, 1016, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1021, 3, 2, 2, 2, 1020, 1018, 3, 2, 2, 2, 1021, 1022, 8, 76, 2, 2, 1022, 154, 3, 2, 2, 2, 1023, 1024, 7, 49, 2, 2, 1024, 1025, 7, 44, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1027, 8, 77, 5, 2, 1027, 1028, 8, 77, 4, 2, 1028, 156, 3, 2, 2, 2, 1029, 1032, 5, 119, 59, 2, 1030, 1032, 7, 97, 2, 2, 1031, 1029, 3, 2, 2, 2, 1031, 1030, 3, 2, 2, 2, 1032, 1037, 3, 2, 2, 2, 1033, 1036, 5, 119, 59, 2, 1034, 1036, 9, 9, 2, 2, 1035, 1033, 3, 2, 2, 2, 1035, 1034, 3, 2, 2, 2, 1036, 1039, 3, 2, 2, 2, 1037, 1035, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 158, 3, 2, 2, 2, 1039, 1037, 3, 2, 2, 2, 1040, 1041, 11, 2, 2, 2, 1041, 1042, 3, 2, 2, 2, 1042, 1043, 8, 79, 4, 2, 1043, 160, 3, 2, 2, 2, 1044, 1045, 7, 128, 2, 2, 1045, 1046, 7, 128, 2, 2, 1046, 1047, 7, 128, 2, 2, 1047, 1048, 7, 128, 2, 2, 1048, 1049, 7, 128, 2, 2, 1049, 1050, 3, 2, 2, 2, 1050, 1051, 8, 80, 6, 2, 1051, 162, 3, 2, 2, 2, 1052, 1053, 7, 2, 2, 3, 1053, 1054, 3, 2, 2, 2, 1054, 1055, 8, 81, 6, 2, 1055, 164, 3, 2, 2, 2, 1056, 1057, 7, 49, 2, 2, 1057, 1058, 7, 44, 2, 2, 1058, 1059, 3, 2, 2, 2, 1059, 1060, 8, 82, 5, 2, 1060, 1061, 8, 82, 4, 2, 1061, 166, 3, 2, 2, 2, 1062, 1063, 11, 2, 2, 2, 1063, 1064, 3, 2, 2, 2, 1064, 1065, 8, 83, 4, 2, 1065, 168, 3, 2, 2, 2, 1066, 1067, 7, 44, 2, 2, 1067, 1068, 7, 49, 2, 2, 1068, 1069, 3, 2, 2, 2, 1069, 1070, 8, 84, 6, 2, 1070, 1071, 8, 84, 2, 2, 1071, 170, 3, 2, 2, 2, 1072, 1073, 7, 2, 2, 3, 1073, 1074, 3, 2, 2, 2, 1074, 1075, 8, 85, 6, 2, 1075, 172, 3, 2, 2, 2, 32, 2, 3, 4, 176, 402, 447, 471, 590, 617, 671, 771, 804, 831, 860, 889, 918, 924, 934, 947, 952, 958, 967, 976, 985, 994, 1000, 1018, 1031, 1035, 1037, 7, 8, 2, 2, 7, 3, 2, 5, 2, 2, 7, 4, 2, 6, 2, 2] \ No newline at end of file diff --git a/server/src/dparser/DLexer.tokens b/server/src/dparser/DLexer.tokens new file mode 100644 index 0000000..571cd67 --- /dev/null +++ b/server/src/dparser/DLexer.tokens @@ -0,0 +1,118 @@ +BLOCK_COMMENT=1 +WHITESPACE=2 +BEGIN=3 +END=4 +IF=5 +UNLESS=6 +WEIGHT=7 +THEN=8 +EQ=9 +EQEQ=10 +BRANCH=11 +PLUS=12 +COPY_TRANS=13 +COPY_TRANS_LATE=14 +DO=15 +JOURNAL=16 +SOLVED_JOURNAL=17 +UNSOLVED_JOURNAL=18 +FLAGS=19 +GOTO=20 +APPENDI=21 +CHAIN2=22 +SAFE=23 +EXTERN=24 +REPLY=25 +EXIT=26 +SAY=27 +IF_FILE_EXISTS=28 +PAREN_OPEN=29 +PAREN_CLOSE=30 +AT=31 +APPEND=32 +APPEND_EARLY=33 +CHAIN=34 +INTERJECT=35 +EXTEND_TOP=36 +ADD_STATE_TRIGGER=37 +ADD_TRANS_TRIGGER=38 +ADD_TRANS_ACTION=39 +REPLACE_TRANS_ACTION=40 +REPLACE_TRANS_TRIGGER=41 +ALTER_TRANS=42 +REPLACE=43 +SET_WEIGHT=44 +REPLACE_STATE_TRIGGER=45 +REPLACE_TRIGGER_TEXT=46 +REPLACE_TRIGGER_TEXT_REGEXP=47 +REPLACE_ACTION_TEXT=48 +REPLACE_ACTION_TEXT_REGEXP=49 +REPLACE_ACTION_TEXT_PROCESS=50 +REPLACE_ACTION_TEXT_PROCESS_REGEXP=51 +REPLACE_SAY=52 +EXTEND_BOTTOM=53 +INTERJECT_COPY_TRANS=54 +INTERJECT_COPY_TRANS2=55 +INTERJECT_COPY_TRANS3=56 +INTERJECT_COPY_TRANS4=57 +SHARP_NUMBER=58 +SOUND_STRING=59 +TILDE_STRING=60 +QUOTE_STRING=61 +PERCENT_STRING=62 +FORCED_STRING_REFERENCE=63 +TRANSLATION_REFERENCE=64 +CONCAT=65 +LINE_COMMENT=66 +IDENTIFIER=67 +LONG_TILDE_STRING=68 +LONG_TILDE_STRING_UNTERMINATED=69 +BLOCK_COMMENT_END=70 +UNTERMINATED_BLOCK_COMMENT=71 +LONG_TILDE_STRING_START=72 +BLOCK_COMMENT_START=73 +'BEGIN'=3 +'END'=4 +'IF'=5 +'UNLESS'=6 +'WEIGHT'=7 +'THEN'=8 +'='=9 +'=='=10 +'BRANCH'=11 +'+'=12 +'COPY_TRANS'=13 +'COPY_TRANS_LATE'=14 +'DO'=15 +'JOURNAL'=16 +'SOLVED_JOURNAL'=17 +'UNSOLVED_JOURNAL'=18 +'FLAGS'=19 +'GOTO'=20 +'APPENDI'=21 +'CHAIN2'=22 +'SAFE'=23 +'EXTERN'=24 +'REPLY'=25 +'EXIT'=26 +'SAY'=27 +'IF_FILE_EXISTS'=28 +'('=29 +')'=30 +'AT'=31 +'APPEND'=32 +'APPEND_EARLY'=33 +'INTERJECT'=35 +'EXTEND_TOP'=36 +'ADD_TRANS_ACTION'=39 +'REPLACE_TRANS_ACTION'=40 +'REPLACE_TRANS_TRIGGER'=41 +'ALTER_TRANS'=42 +'REPLACE'=43 +'SET_WEIGHT'=44 +'REPLACE_TRIGGER_TEXT_REGEXP'=47 +'REPLACE_ACTION_TEXT_REGEXP'=49 +'REPLACE_ACTION_TEXT_PROCESS'=50 +'REPLACE_SAY'=52 +'^'=65 +'*/'=70 diff --git a/server/src/dparser/DLexer.ts b/server/src/dparser/DLexer.ts new file mode 100644 index 0000000..771882f --- /dev/null +++ b/server/src/dparser/DLexer.ts @@ -0,0 +1,693 @@ +// Generated from ./src/antlr4/lapdu/DLexer.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; +import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; +import { RuleContext } from "antlr4ts/RuleContext"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + + +export class DLexer extends Lexer { + public static readonly BLOCK_COMMENT = 1; + public static readonly WHITESPACE = 2; + public static readonly BEGIN = 3; + public static readonly END = 4; + public static readonly IF = 5; + public static readonly UNLESS = 6; + public static readonly WEIGHT = 7; + public static readonly THEN = 8; + public static readonly EQ = 9; + public static readonly EQEQ = 10; + public static readonly BRANCH = 11; + public static readonly PLUS = 12; + public static readonly COPY_TRANS = 13; + public static readonly COPY_TRANS_LATE = 14; + public static readonly DO = 15; + public static readonly JOURNAL = 16; + public static readonly SOLVED_JOURNAL = 17; + public static readonly UNSOLVED_JOURNAL = 18; + public static readonly FLAGS = 19; + public static readonly GOTO = 20; + public static readonly APPENDI = 21; + public static readonly CHAIN2 = 22; + public static readonly SAFE = 23; + public static readonly EXTERN = 24; + public static readonly REPLY = 25; + public static readonly EXIT = 26; + public static readonly SAY = 27; + public static readonly IF_FILE_EXISTS = 28; + public static readonly PAREN_OPEN = 29; + public static readonly PAREN_CLOSE = 30; + public static readonly AT = 31; + public static readonly APPEND = 32; + public static readonly APPEND_EARLY = 33; + public static readonly CHAIN = 34; + public static readonly INTERJECT = 35; + public static readonly EXTEND_TOP = 36; + public static readonly ADD_STATE_TRIGGER = 37; + public static readonly ADD_TRANS_TRIGGER = 38; + public static readonly ADD_TRANS_ACTION = 39; + public static readonly REPLACE_TRANS_ACTION = 40; + public static readonly REPLACE_TRANS_TRIGGER = 41; + public static readonly ALTER_TRANS = 42; + public static readonly REPLACE = 43; + public static readonly SET_WEIGHT = 44; + public static readonly REPLACE_STATE_TRIGGER = 45; + public static readonly REPLACE_TRIGGER_TEXT = 46; + public static readonly REPLACE_TRIGGER_TEXT_REGEXP = 47; + public static readonly REPLACE_ACTION_TEXT = 48; + public static readonly REPLACE_ACTION_TEXT_REGEXP = 49; + public static readonly REPLACE_ACTION_TEXT_PROCESS = 50; + public static readonly REPLACE_ACTION_TEXT_PROCESS_REGEXP = 51; + public static readonly REPLACE_SAY = 52; + public static readonly EXTEND_BOTTOM = 53; + public static readonly INTERJECT_COPY_TRANS = 54; + public static readonly INTERJECT_COPY_TRANS2 = 55; + public static readonly INTERJECT_COPY_TRANS3 = 56; + public static readonly INTERJECT_COPY_TRANS4 = 57; + public static readonly SHARP_NUMBER = 58; + public static readonly SOUND_STRING = 59; + public static readonly TILDE_STRING = 60; + public static readonly QUOTE_STRING = 61; + public static readonly PERCENT_STRING = 62; + public static readonly FORCED_STRING_REFERENCE = 63; + public static readonly TRANSLATION_REFERENCE = 64; + public static readonly CONCAT = 65; + public static readonly LINE_COMMENT = 66; + public static readonly IDENTIFIER = 67; + public static readonly LONG_TILDE_STRING = 68; + public static readonly LONG_TILDE_STRING_UNTERMINATED = 69; + public static readonly BLOCK_COMMENT_END = 70; + public static readonly UNTERMINATED_BLOCK_COMMENT = 71; + public static readonly LONG_TILDE_STRING_START = 72; + public static readonly BLOCK_COMMENT_START = 73; + public static readonly LONG_TILDE_STRING_MODE = 1; + public static readonly BLOCK_COMMENT_MODE = 2; + + // tslint:disable:no-trailing-whitespace + public static readonly channelNames: string[] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", + ]; + + // tslint:disable:no-trailing-whitespace + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", "LONG_TILDE_STRING_MODE", "BLOCK_COMMENT_MODE", + ]; + + public static readonly ruleNames: string[] = [ + "WHITESPACE", "BEGIN", "END", "IF", "UNLESS", "WEIGHT", "THEN", "EQ", + "EQEQ", "BRANCH", "PLUS", "COPY_TRANS", "COPY_TRANS_LATE", "DO", "JOURNAL", + "SOLVED_JOURNAL", "UNSOLVED_JOURNAL", "FLAGS", "GOTO", "APPENDI", "CHAIN2", + "SAFE", "EXTERN", "REPLY", "EXIT", "SAY", "IF_FILE_EXISTS", "PAREN_OPEN", + "PAREN_CLOSE", "AT", "APPEND", "APPEND_EARLY", "CHAIN", "INTERJECT", "EXTEND_TOP", + "ADD_STATE_TRIGGER", "ADD_TRANS_TRIGGER", "ADD_TRANS_ACTION", "REPLACE_TRANS_ACTION", + "REPLACE_TRANS_TRIGGER", "ALTER_TRANS", "REPLACE", "SET_WEIGHT", "REPLACE_STATE_TRIGGER", + "REPLACE_TRIGGER_TEXT", "REPLACE_TRIGGER_TEXT_REGEXP", "REPLACE_ACTION_TEXT", + "REPLACE_ACTION_TEXT_REGEXP", "REPLACE_ACTION_TEXT_PROCESS", "REPLACE_ACTION_TEXT_PROCESS_REGEXP", + "REPLACE_SAY", "EXTEND_BOTTOM", "INTERJECT_COPY_TRANS", "INTERJECT_COPY_TRANS2", + "INTERJECT_COPY_TRANS3", "INTERJECT_COPY_TRANS4", "LETTER", "ALPHANUM", + "BIN_DIGIT", "OCT_DIGIT", "DEC_DIGIT", "HEX_DIGIT", "OCT_LITERAL_PREFIX", + "BIN_LITERAL_PREFIX", "HEX_LITERAL_PREFIX", "SHARP_NUMBER", "SOUND_STRING", + "TILDE_STRING", "QUOTE_STRING", "PERCENT_STRING", "FORCED_STRING_REFERENCE", + "TRANSLATION_REFERENCE", "CONCAT", "LONG_TILDE_STRING_START", "LINE_COMMENT", + "BLOCK_COMMENT_START", "IDENTIFIER", "LONG_TILDE_STRING_BODY", "LONG_TILDE_STRING", + "LONG_TILDE_STRING_UNTERMINATED", "BLOCK_COMMENT_NEST", "BLOCK_COMMENT_CHAR", + "BLOCK_COMMENT_END", "UNTERMINATED_BLOCK_COMMENT", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, undefined, undefined, "'BEGIN'", "'END'", "'IF'", "'UNLESS'", + "'WEIGHT'", "'THEN'", "'='", "'=='", "'BRANCH'", "'+'", "'COPY_TRANS'", + "'COPY_TRANS_LATE'", "'DO'", "'JOURNAL'", "'SOLVED_JOURNAL'", "'UNSOLVED_JOURNAL'", + "'FLAGS'", "'GOTO'", "'APPENDI'", "'CHAIN2'", "'SAFE'", "'EXTERN'", "'REPLY'", + "'EXIT'", "'SAY'", "'IF_FILE_EXISTS'", "'('", "')'", "'AT'", "'APPEND'", + "'APPEND_EARLY'", undefined, "'INTERJECT'", "'EXTEND_TOP'", undefined, + undefined, "'ADD_TRANS_ACTION'", "'REPLACE_TRANS_ACTION'", "'REPLACE_TRANS_TRIGGER'", + "'ALTER_TRANS'", "'REPLACE'", "'SET_WEIGHT'", undefined, undefined, "'REPLACE_TRIGGER_TEXT_REGEXP'", + undefined, "'REPLACE_ACTION_TEXT_REGEXP'", "'REPLACE_ACTION_TEXT_PROCESS'", + undefined, "'REPLACE_SAY'", undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, "'^'", undefined, undefined, undefined, undefined, "'*/'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "BLOCK_COMMENT", "WHITESPACE", "BEGIN", "END", "IF", "UNLESS", + "WEIGHT", "THEN", "EQ", "EQEQ", "BRANCH", "PLUS", "COPY_TRANS", "COPY_TRANS_LATE", + "DO", "JOURNAL", "SOLVED_JOURNAL", "UNSOLVED_JOURNAL", "FLAGS", "GOTO", + "APPENDI", "CHAIN2", "SAFE", "EXTERN", "REPLY", "EXIT", "SAY", "IF_FILE_EXISTS", + "PAREN_OPEN", "PAREN_CLOSE", "AT", "APPEND", "APPEND_EARLY", "CHAIN", + "INTERJECT", "EXTEND_TOP", "ADD_STATE_TRIGGER", "ADD_TRANS_TRIGGER", "ADD_TRANS_ACTION", + "REPLACE_TRANS_ACTION", "REPLACE_TRANS_TRIGGER", "ALTER_TRANS", "REPLACE", + "SET_WEIGHT", "REPLACE_STATE_TRIGGER", "REPLACE_TRIGGER_TEXT", "REPLACE_TRIGGER_TEXT_REGEXP", + "REPLACE_ACTION_TEXT", "REPLACE_ACTION_TEXT_REGEXP", "REPLACE_ACTION_TEXT_PROCESS", + "REPLACE_ACTION_TEXT_PROCESS_REGEXP", "REPLACE_SAY", "EXTEND_BOTTOM", + "INTERJECT_COPY_TRANS", "INTERJECT_COPY_TRANS2", "INTERJECT_COPY_TRANS3", + "INTERJECT_COPY_TRANS4", "SHARP_NUMBER", "SOUND_STRING", "TILDE_STRING", + "QUOTE_STRING", "PERCENT_STRING", "FORCED_STRING_REFERENCE", "TRANSLATION_REFERENCE", + "CONCAT", "LINE_COMMENT", "IDENTIFIER", "LONG_TILDE_STRING", "LONG_TILDE_STRING_UNTERMINATED", + "BLOCK_COMMENT_END", "UNTERMINATED_BLOCK_COMMENT", "LONG_TILDE_STRING_START", + "BLOCK_COMMENT_START", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(DLexer._LITERAL_NAMES, DLexer._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return DLexer.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + + constructor(input: CharStream) { + super(input); + this._interp = new LexerATNSimulator(DLexer._ATN, this); + } + + // @Override + public get grammarFileName(): string { return "DLexer.g4"; } + + // @Override + public get ruleNames(): string[] { return DLexer.ruleNames; } + + // @Override + public get serializedATN(): string { return DLexer._serializedATN; } + + // @Override + public get channelNames(): string[] { return DLexer.channelNames; } + + // @Override + public get modeNames(): string[] { return DLexer.modeNames; } + + private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02K\u0434\b\x01" + + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + + "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + + "D\tD\x04E\tE\x04F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04" + + "M\tM\x04N\tN\x04O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x03" + + "\x02\x06\x02\xAF\n\x02\r\x02\x0E\x02\xB0\x03\x02\x03\x02\x03\x03\x03\x03" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05" + + "\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06" + + "\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + + "\v\x03\v\x03\v\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03" + + "\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03" + + "\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03" + + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03" + + "\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03" + + "\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03" + + "\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03" + + "!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03\"\x03\"\x03\"\x03\"\x03" + + "\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x05\"\u0193\n\"\x03#\x03#\x03#" + + "\x03#\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03$\x03$\x03$\x03" + + "$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03" + + "%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x03%\x05%\u01C0" + + "\n%\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03" + + "&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x05&\u01D8\n&\x03\'\x03\'\x03" + + "\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03" + + "\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(" + + "\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03)\x03)\x03)\x03" + + ")\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03" + + ")\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + + "*\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x03+\x03+\x03+\x03,\x03,\x03,\x03" + + ",\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03-\x03-\x03" + + "-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03" + + "-\x03-\x03-\x03-\x03-\x03-\x05-\u024F\n-\x03.\x03.\x03.\x03.\x03.\x03" + + ".\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03" + + ".\x03.\x03.\x03.\x03.\x03.\x05.\u026A\n.\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x030\x030\x030\x030\x030\x03" + + "0\x030\x030\x030\x030\x030\x030\x030\x030\x030\x030\x030\x030\x030\x03" + + "0\x030\x030\x030\x030\x050\u02A0\n0\x031\x031\x031\x031\x031\x031\x03" + + "1\x031\x031\x031\x031\x031\x031\x031\x031\x031\x031\x031\x031\x031\x03" + + "1\x031\x031\x031\x031\x031\x031\x032\x032\x032\x032\x032\x032\x032\x03" + + "2\x032\x032\x032\x032\x032\x032\x032\x032\x032\x032\x032\x032\x032\x03" + + "2\x032\x032\x032\x032\x032\x032\x033\x033\x033\x033\x033\x033\x033\x03" + + "3\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x03" + + "3\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x033\x03" + + "3\x033\x033\x033\x033\x033\x033\x033\x053\u0304\n3\x034\x034\x034\x03" + + "4\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x035\x035\x03" + + "5\x035\x035\x035\x035\x035\x035\x035\x035\x035\x035\x035\x035\x035\x05" + + "5\u0325\n5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + + "6\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x036\x05" + + "6\u0340\n6\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x057\u035D\n7\x038\x038\x038\x038\x038\x038\x038\x038\x038\x03" + + "8\x038\x038\x038\x038\x038\x038\x038\x038\x038\x038\x038\x038\x038\x03" + + "8\x038\x038\x038\x058\u037A\n8\x039\x039\x039\x039\x039\x039\x039\x03" + + "9\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x039\x03" + + "9\x039\x039\x039\x039\x039\x059\u0397\n9\x03:\x03:\x03;\x03;\x05;\u039D" + + "\n;\x03<\x03<\x03=\x03=\x03>\x03>\x03?\x03?\x05?\u03A7\n?\x03@\x03@\x03" + + "@\x03A\x03A\x03A\x03B\x03B\x03B\x03C\x03C\x05C\u03B4\nC\x03C\x06C\u03B7" + + "\nC\rC\x0EC\u03B8\x03D\x03D\x07D\u03BD\nD\fD\x0ED\u03C0\vD\x03D\x03D\x03" + + "E\x03E\x07E\u03C6\nE\fE\x0EE\u03C9\vE\x03E\x03E\x03F\x03F\x07F\u03CF\n" + + "F\fF\x0EF\u03D2\vF\x03F\x03F\x03G\x03G\x07G\u03D8\nG\fG\x0EG\u03DB\vG" + + "\x03G\x03G\x03H\x03H\x06H\u03E1\nH\rH\x0EH\u03E2\x03I\x03I\x06I\u03E7" + + "\nI\rI\x0EI\u03E8\x03J\x03J\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03" + + "K\x03L\x03L\x03L\x07L\u03F9\nL\fL\x0EL\u03FC\vL\x03L\x03L\x03M\x03M\x03" + + "M\x03M\x03M\x03M\x03N\x03N\x05N\u0408\nN\x03N\x03N\x07N\u040C\nN\fN\x0E" + + "N\u040F\vN\x03O\x03O\x03O\x03O\x03P\x03P\x03P\x03P\x03P\x03P\x03P\x03" + + "P\x03Q\x03Q\x03Q\x03Q\x03R\x03R\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03" + + "S\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x06\u03BE\u03C7\u03D0" + + "\u03D9\x02\x02V\x05\x02\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F" + + "\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F" + + "\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16" + + "+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E" + + ";\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02" + + ")Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x02" + + "5i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02\x02w\x02\x02y\x02\x02{\x02" + + "\x02}\x02\x02\x7F\x02\x02\x81\x02\x02\x83\x02\x02\x85\x02\x02\x87\x02" + + "<\x89\x02=\x8B\x02>\x8D\x02?\x8F\x02@\x91\x02A\x93\x02B\x95\x02C\x97\x02" + + "J\x99\x02D\x9B\x02K\x9D\x02E\x9F\x02\x02\xA1\x02F\xA3\x02G\xA5\x02\x02" + + "\xA7\x02\x02\xA9\x02H\xAB\x02I\x05\x02\x03\x04\n\x05\x02\v\f\x0F\x0F\"" + + "\"\x04\x02C\\c|\x03\x0223\x03\x0229\x03\x022;\x04\x02CHch\x03\x02\f\f" + + "\x06\x02%%))/0aa\x02\u0443\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02" + + "\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02" + + "\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02" + + "\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02" + + "\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02" + + "\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'" + + "\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02" + + "\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02" + + "\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03" + + "\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02" + + "\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02" + + "I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02" + + "\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02" + + "\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03" + + "\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02" + + "\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02" + + "k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02" + + "\x02\x02\x02s\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02" + + "\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02" + + "\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02" + + "\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02" + + "\x02\x02\x02\x9D\x03\x02\x02\x02\x03\x9F\x03\x02\x02\x02\x03\xA1\x03\x02" + + "\x02\x02\x03\xA3\x03\x02\x02\x02\x04\xA5\x03\x02\x02\x02\x04\xA7\x03\x02" + + "\x02\x02\x04\xA9\x03\x02\x02\x02\x04\xAB\x03\x02\x02\x02\x05\xAE\x03\x02" + + "\x02\x02\x07\xB4\x03\x02\x02\x02\t\xBA\x03\x02\x02\x02\v\xBE\x03\x02\x02" + + "\x02\r\xC1\x03\x02\x02\x02\x0F\xC8\x03\x02\x02\x02\x11\xCF\x03\x02\x02" + + "\x02\x13\xD4\x03\x02\x02\x02\x15\xD6\x03\x02\x02\x02\x17\xD9\x03\x02\x02" + + "\x02\x19\xE0\x03\x02\x02\x02\x1B\xE2\x03\x02\x02\x02\x1D\xED\x03\x02\x02" + + "\x02\x1F\xFD\x03\x02\x02\x02!\u0100\x03\x02\x02\x02#\u0108\x03\x02\x02" + + "\x02%\u0117\x03\x02\x02\x02\'\u0128\x03\x02\x02\x02)\u012E\x03\x02\x02" + + "\x02+\u0133\x03\x02\x02\x02-\u013B\x03\x02\x02\x02/\u0142\x03\x02\x02" + + "\x021\u0147\x03\x02\x02\x023\u014E\x03\x02\x02\x025\u0154\x03\x02\x02" + + "\x027\u0159\x03\x02\x02\x029\u015D\x03\x02\x02\x02;\u016C\x03\x02\x02" + + "\x02=\u016E\x03\x02\x02\x02?\u0170\x03\x02\x02\x02A\u0173\x03\x02\x02" + + "\x02C\u017A\x03\x02\x02\x02E\u0192\x03\x02\x02\x02G\u0194\x03\x02\x02" + + "\x02I\u019E\x03\x02\x02\x02K\u01BF\x03\x02\x02\x02M\u01D7\x03\x02\x02" + + "\x02O\u01D9\x03\x02\x02\x02Q\u01EA\x03\x02\x02\x02S\u01FF\x03\x02\x02" + + "\x02U\u0215\x03\x02\x02\x02W\u0221\x03\x02\x02\x02Y\u0229\x03\x02\x02" + + "\x02[\u024E\x03\x02\x02\x02]\u0269\x03\x02\x02\x02_\u026B\x03\x02\x02" + + "\x02a\u029F\x03\x02\x02\x02c\u02A1\x03\x02\x02\x02e\u02BC\x03\x02\x02" + + "\x02g\u0303\x03\x02\x02\x02i\u0305\x03\x02\x02\x02k\u0324\x03\x02\x02" + + "\x02m\u033F\x03\x02\x02\x02o\u035C\x03\x02\x02\x02q\u0379\x03\x02\x02" + + "\x02s\u0396\x03\x02\x02\x02u\u0398\x03\x02\x02\x02w\u039C\x03\x02\x02" + + "\x02y\u039E\x03\x02\x02\x02{\u03A0\x03\x02\x02\x02}\u03A2\x03\x02\x02" + + "\x02\x7F\u03A6\x03\x02\x02\x02\x81\u03A8\x03\x02\x02\x02\x83\u03AB\x03" + + "\x02\x02\x02\x85\u03AE\x03\x02\x02\x02\x87\u03B1\x03\x02\x02\x02\x89\u03BA" + + "\x03\x02\x02\x02\x8B\u03C3\x03\x02\x02\x02\x8D\u03CC\x03\x02\x02\x02\x8F" + + "\u03D5\x03\x02\x02\x02\x91\u03DE\x03\x02\x02\x02\x93\u03E4\x03\x02\x02" + + "\x02\x95\u03EA\x03\x02\x02\x02\x97\u03EC\x03\x02\x02\x02\x99\u03F5\x03" + + "\x02\x02\x02\x9B\u03FF\x03\x02\x02\x02\x9D\u0407\x03\x02\x02\x02\x9F\u0410" + + "\x03\x02\x02\x02\xA1\u0414\x03\x02\x02\x02\xA3\u041C\x03\x02\x02\x02\xA5" + + "\u0420\x03\x02\x02\x02\xA7\u0426\x03\x02\x02\x02\xA9\u042A\x03\x02\x02" + + "\x02\xAB\u0430\x03\x02\x02\x02\xAD\xAF\t\x02\x02\x02\xAE\xAD\x03\x02\x02" + + "\x02\xAF\xB0\x03\x02\x02\x02\xB0\xAE\x03\x02\x02\x02\xB0\xB1\x03\x02\x02" + + "\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\b\x02\x02\x02\xB3\x06\x03\x02\x02" + + "\x02\xB4\xB5\x07D\x02\x02\xB5\xB6\x07G\x02\x02\xB6\xB7\x07I\x02\x02\xB7" + + "\xB8\x07K\x02\x02\xB8\xB9\x07P\x02\x02\xB9\b\x03\x02\x02\x02\xBA\xBB\x07" + + "G\x02\x02\xBB\xBC\x07P\x02\x02\xBC\xBD\x07F\x02\x02\xBD\n\x03\x02\x02" + + "\x02\xBE\xBF\x07K\x02\x02\xBF\xC0\x07H\x02\x02\xC0\f\x03\x02\x02\x02\xC1" + + "\xC2\x07W\x02\x02\xC2\xC3\x07P\x02\x02\xC3\xC4\x07N\x02\x02\xC4\xC5\x07" + + "G\x02\x02\xC5\xC6\x07U\x02\x02\xC6\xC7\x07U\x02\x02\xC7\x0E\x03\x02\x02" + + "\x02\xC8\xC9\x07Y\x02\x02\xC9\xCA\x07G\x02\x02\xCA\xCB\x07K\x02\x02\xCB" + + "\xCC\x07I\x02\x02\xCC\xCD\x07J\x02\x02\xCD\xCE\x07V\x02\x02\xCE\x10\x03" + + "\x02\x02\x02\xCF\xD0\x07V\x02\x02\xD0\xD1\x07J\x02\x02\xD1\xD2\x07G\x02" + + "\x02\xD2\xD3\x07P\x02\x02\xD3\x12\x03\x02\x02\x02\xD4\xD5\x07?\x02\x02" + + "\xD5\x14\x03\x02\x02\x02\xD6\xD7\x07?\x02\x02\xD7\xD8\x07?\x02\x02\xD8" + + "\x16\x03\x02\x02\x02\xD9\xDA\x07D\x02\x02\xDA\xDB\x07T\x02\x02\xDB\xDC" + + "\x07C\x02\x02\xDC\xDD\x07P\x02\x02\xDD\xDE\x07E\x02\x02\xDE\xDF\x07J\x02" + + "\x02\xDF\x18\x03\x02\x02\x02\xE0\xE1\x07-\x02\x02\xE1\x1A\x03\x02\x02" + + "\x02\xE2\xE3\x07E\x02\x02\xE3\xE4\x07Q\x02\x02\xE4\xE5\x07R\x02\x02\xE5" + + "\xE6\x07[\x02\x02\xE6\xE7\x07a\x02\x02\xE7\xE8\x07V\x02\x02\xE8\xE9\x07" + + "T\x02\x02\xE9\xEA\x07C\x02\x02\xEA\xEB\x07P\x02\x02\xEB\xEC\x07U\x02\x02" + + "\xEC\x1C\x03\x02\x02\x02\xED\xEE\x07E\x02\x02\xEE\xEF\x07Q\x02\x02\xEF" + + "\xF0\x07R\x02\x02\xF0\xF1\x07[\x02\x02\xF1\xF2\x07a\x02\x02\xF2\xF3\x07" + + "V\x02\x02\xF3\xF4\x07T\x02\x02\xF4\xF5\x07C\x02\x02\xF5\xF6\x07P\x02\x02" + + "\xF6\xF7\x07U\x02\x02\xF7\xF8\x07a\x02\x02\xF8\xF9\x07N\x02\x02\xF9\xFA" + + "\x07C\x02\x02\xFA\xFB\x07V\x02\x02\xFB\xFC\x07G\x02\x02\xFC\x1E\x03\x02" + + "\x02\x02\xFD\xFE\x07F\x02\x02\xFE\xFF\x07Q\x02\x02\xFF \x03\x02\x02\x02" + + "\u0100\u0101\x07L\x02\x02\u0101\u0102\x07Q\x02\x02\u0102\u0103\x07W\x02" + + "\x02\u0103\u0104\x07T\x02\x02\u0104\u0105\x07P\x02\x02\u0105\u0106\x07" + + "C\x02\x02\u0106\u0107\x07N\x02\x02\u0107\"\x03\x02\x02\x02\u0108\u0109" + + "\x07U\x02\x02\u0109\u010A\x07Q\x02\x02\u010A\u010B\x07N\x02\x02\u010B" + + "\u010C\x07X\x02\x02\u010C\u010D\x07G\x02\x02\u010D\u010E\x07F\x02\x02" + + "\u010E\u010F\x07a\x02\x02\u010F\u0110\x07L\x02\x02\u0110\u0111\x07Q\x02" + + "\x02\u0111\u0112\x07W\x02\x02\u0112\u0113\x07T\x02\x02\u0113\u0114\x07" + + "P\x02\x02\u0114\u0115\x07C\x02\x02\u0115\u0116\x07N\x02\x02\u0116$\x03" + + "\x02\x02\x02\u0117\u0118\x07W\x02\x02\u0118\u0119\x07P\x02\x02\u0119\u011A" + + "\x07U\x02\x02\u011A\u011B\x07Q\x02\x02\u011B\u011C\x07N\x02\x02\u011C" + + "\u011D\x07X\x02\x02\u011D\u011E\x07G\x02\x02\u011E\u011F\x07F\x02\x02" + + "\u011F\u0120\x07a\x02\x02\u0120\u0121\x07L\x02\x02\u0121\u0122\x07Q\x02" + + "\x02\u0122\u0123\x07W\x02\x02\u0123\u0124\x07T\x02\x02\u0124\u0125\x07" + + "P\x02\x02\u0125\u0126\x07C\x02\x02\u0126\u0127\x07N\x02\x02\u0127&\x03" + + "\x02\x02\x02\u0128\u0129\x07H\x02\x02\u0129\u012A\x07N\x02\x02\u012A\u012B" + + "\x07C\x02\x02\u012B\u012C\x07I\x02\x02\u012C\u012D\x07U\x02\x02\u012D" + + "(\x03\x02\x02\x02\u012E\u012F\x07I\x02\x02\u012F\u0130\x07Q\x02\x02\u0130" + + "\u0131\x07V\x02\x02\u0131\u0132\x07Q\x02\x02\u0132*\x03\x02\x02\x02\u0133" + + "\u0134\x07C\x02\x02\u0134\u0135\x07R\x02\x02\u0135\u0136\x07R\x02\x02" + + "\u0136\u0137\x07G\x02\x02\u0137\u0138\x07P\x02\x02\u0138\u0139\x07F\x02" + + "\x02\u0139\u013A\x07K\x02\x02\u013A,\x03\x02\x02\x02\u013B\u013C\x07E" + + "\x02\x02\u013C\u013D\x07J\x02\x02\u013D\u013E\x07C\x02\x02\u013E\u013F" + + "\x07K\x02\x02\u013F\u0140\x07P\x02\x02\u0140\u0141\x074\x02\x02\u0141" + + ".\x03\x02\x02\x02\u0142\u0143\x07U\x02\x02\u0143\u0144\x07C\x02\x02\u0144" + + "\u0145\x07H\x02\x02\u0145\u0146\x07G\x02\x02\u01460\x03\x02\x02\x02\u0147" + + "\u0148\x07G\x02\x02\u0148\u0149\x07Z\x02\x02\u0149\u014A\x07V\x02\x02" + + "\u014A\u014B\x07G\x02\x02\u014B\u014C\x07T\x02\x02\u014C\u014D\x07P\x02" + + "\x02\u014D2\x03\x02\x02\x02\u014E\u014F\x07T\x02\x02\u014F\u0150\x07G" + + "\x02\x02\u0150\u0151\x07R\x02\x02\u0151\u0152\x07N\x02\x02\u0152\u0153" + + "\x07[\x02\x02\u01534\x03\x02\x02\x02\u0154\u0155\x07G\x02\x02\u0155\u0156" + + "\x07Z\x02\x02\u0156\u0157\x07K\x02\x02\u0157\u0158\x07V\x02\x02\u0158" + + "6\x03\x02\x02\x02\u0159\u015A\x07U\x02\x02\u015A\u015B\x07C\x02\x02\u015B" + + "\u015C\x07[\x02\x02\u015C8\x03\x02\x02\x02\u015D\u015E\x07K\x02\x02\u015E" + + "\u015F\x07H\x02\x02\u015F\u0160\x07a\x02\x02\u0160\u0161\x07H\x02\x02" + + "\u0161\u0162\x07K\x02\x02\u0162\u0163\x07N\x02\x02\u0163\u0164\x07G\x02" + + "\x02\u0164\u0165\x07a\x02\x02\u0165\u0166\x07G\x02\x02\u0166\u0167\x07" + + "Z\x02\x02\u0167\u0168\x07K\x02\x02\u0168\u0169\x07U\x02\x02\u0169\u016A" + + "\x07V\x02\x02\u016A\u016B\x07U\x02\x02\u016B:\x03\x02\x02\x02\u016C\u016D" + + "\x07*\x02\x02\u016D<\x03\x02\x02\x02\u016E\u016F\x07+\x02\x02\u016F>\x03" + + "\x02\x02\x02\u0170\u0171\x07C\x02\x02\u0171\u0172\x07V\x02\x02\u0172@" + + "\x03\x02\x02\x02\u0173\u0174\x07C\x02\x02\u0174\u0175\x07R\x02\x02\u0175" + + "\u0176\x07R\x02\x02\u0176\u0177\x07G\x02\x02\u0177\u0178\x07P\x02\x02" + + "\u0178\u0179\x07F\x02\x02\u0179B\x03\x02\x02\x02\u017A\u017B\x07C\x02" + + "\x02\u017B\u017C\x07R\x02\x02\u017C\u017D\x07R\x02\x02\u017D\u017E\x07" + + "G\x02\x02\u017E\u017F\x07P\x02\x02\u017F\u0180\x07F\x02\x02\u0180\u0181" + + "\x07a\x02\x02\u0181\u0182\x07G\x02\x02\u0182\u0183\x07C\x02\x02\u0183" + + "\u0184\x07T\x02\x02\u0184\u0185\x07N\x02\x02\u0185\u0186\x07[\x02\x02" + + "\u0186D\x03\x02\x02\x02\u0187\u0188\x07E\x02\x02\u0188\u0189\x07J\x02" + + "\x02\u0189\u018A\x07C\x02\x02\u018A\u018B\x07K\x02\x02\u018B\u0193\x07" + + "P\x02\x02\u018C\u018D\x07E\x02\x02\u018D\u018E\x07J\x02\x02\u018E\u018F" + + "\x07C\x02\x02\u018F\u0190\x07K\x02\x02\u0190\u0191\x07P\x02\x02\u0191" + + "\u0193\x075\x02\x02\u0192\u0187\x03\x02\x02\x02\u0192\u018C\x03\x02\x02" + + "\x02\u0193F\x03\x02\x02\x02\u0194\u0195\x07K\x02\x02\u0195\u0196\x07P" + + "\x02\x02\u0196\u0197\x07V\x02\x02\u0197\u0198\x07G\x02\x02\u0198\u0199" + + "\x07T\x02\x02\u0199\u019A\x07L\x02\x02\u019A\u019B\x07G\x02\x02\u019B" + + "\u019C\x07E\x02\x02\u019C\u019D\x07V\x02\x02\u019DH\x03\x02\x02\x02\u019E" + + "\u019F\x07G\x02\x02\u019F\u01A0\x07Z\x02\x02\u01A0\u01A1\x07V\x02\x02" + + "\u01A1\u01A2\x07G\x02\x02\u01A2\u01A3\x07P\x02\x02\u01A3\u01A4\x07F\x02" + + "\x02\u01A4\u01A5\x07a\x02\x02\u01A5\u01A6\x07V\x02\x02\u01A6\u01A7\x07" + + "Q\x02\x02\u01A7\u01A8\x07R\x02\x02\u01A8J\x03\x02\x02\x02\u01A9\u01AA" + + "\x07C\x02\x02\u01AA\u01AB\x07F\x02\x02\u01AB"; + private static readonly _serializedATNSegment1: string = + "\u01AC\x07F\x02\x02\u01AC\u01AD\x07a\x02\x02\u01AD\u01AE\x07U\x02\x02" + + "\u01AE\u01AF\x07V\x02\x02\u01AF\u01B0\x07C\x02\x02\u01B0\u01B1\x07V\x02" + + "\x02\u01B1\u01B2\x07G\x02\x02\u01B2\u01B3\x07a\x02\x02\u01B3\u01B4\x07" + + "V\x02\x02\u01B4\u01B5\x07T\x02\x02\u01B5\u01B6\x07K\x02\x02\u01B6\u01B7" + + "\x07I\x02\x02\u01B7\u01B8\x07I\x02\x02\u01B8\u01B9\x07G\x02\x02\u01B9" + + "\u01C0\x07T\x02\x02\u01BA\u01BB\x07C\x02\x02\u01BB\u01BC\x07a\x02\x02" + + "\u01BC\u01BD\x07U\x02\x02\u01BD\u01BE\x07a\x02\x02\u01BE\u01C0\x07V\x02" + + "\x02\u01BF\u01A9\x03\x02\x02\x02\u01BF\u01BA\x03\x02\x02\x02\u01C0L\x03" + + "\x02\x02\x02\u01C1\u01C2\x07C\x02\x02\u01C2\u01C3\x07F\x02\x02\u01C3\u01C4" + + "\x07F\x02\x02\u01C4\u01C5\x07a\x02\x02\u01C5\u01C6\x07V\x02\x02\u01C6" + + "\u01C7\x07T\x02\x02\u01C7\u01C8\x07C\x02\x02\u01C8\u01C9\x07P\x02\x02" + + "\u01C9\u01CA\x07U\x02\x02\u01CA\u01CB\x07a\x02\x02\u01CB\u01CC\x07V\x02" + + "\x02\u01CC\u01CD\x07T\x02\x02\u01CD\u01CE\x07K\x02\x02\u01CE\u01CF\x07" + + "I\x02\x02\u01CF\u01D0\x07I\x02\x02\u01D0\u01D1\x07G\x02\x02\u01D1\u01D8" + + "\x07T\x02\x02\u01D2\u01D3\x07C\x02\x02\u01D3\u01D4\x07a\x02\x02\u01D4" + + "\u01D5\x07V\x02\x02\u01D5\u01D6\x07a\x02\x02\u01D6\u01D8\x07V\x02\x02" + + "\u01D7\u01C1\x03\x02\x02\x02\u01D7\u01D2\x03\x02\x02\x02\u01D8N\x03\x02" + + "\x02\x02\u01D9\u01DA\x07C\x02\x02\u01DA\u01DB\x07F\x02\x02\u01DB\u01DC" + + "\x07F\x02\x02\u01DC\u01DD\x07a\x02\x02\u01DD\u01DE\x07V\x02\x02\u01DE" + + "\u01DF\x07T\x02\x02\u01DF\u01E0\x07C\x02\x02\u01E0\u01E1\x07P\x02\x02" + + "\u01E1\u01E2\x07U\x02\x02\u01E2\u01E3\x07a\x02\x02\u01E3\u01E4\x07C\x02" + + "\x02\u01E4\u01E5\x07E\x02\x02\u01E5\u01E6\x07V\x02\x02\u01E6\u01E7\x07" + + "K\x02\x02\u01E7\u01E8\x07Q\x02\x02\u01E8\u01E9\x07P\x02\x02\u01E9P\x03" + + "\x02\x02\x02\u01EA\u01EB\x07T\x02\x02\u01EB\u01EC\x07G\x02\x02\u01EC\u01ED" + + "\x07R\x02\x02\u01ED\u01EE\x07N\x02\x02\u01EE\u01EF\x07C\x02\x02\u01EF" + + "\u01F0\x07E\x02\x02\u01F0\u01F1\x07G\x02\x02\u01F1\u01F2\x07a\x02\x02" + + "\u01F2\u01F3\x07V\x02\x02\u01F3\u01F4\x07T\x02\x02\u01F4\u01F5\x07C\x02" + + "\x02\u01F5\u01F6\x07P\x02\x02\u01F6\u01F7\x07U\x02\x02\u01F7\u01F8\x07" + + "a\x02\x02\u01F8\u01F9\x07C\x02\x02\u01F9\u01FA\x07E\x02\x02\u01FA\u01FB" + + "\x07V\x02\x02\u01FB\u01FC\x07K\x02\x02\u01FC\u01FD\x07Q\x02\x02\u01FD" + + "\u01FE\x07P\x02\x02\u01FER\x03\x02\x02\x02\u01FF\u0200\x07T\x02\x02\u0200" + + "\u0201\x07G\x02\x02\u0201\u0202\x07R\x02\x02\u0202\u0203\x07N\x02\x02" + + "\u0203\u0204\x07C\x02\x02\u0204\u0205\x07E\x02\x02\u0205\u0206\x07G\x02" + + "\x02\u0206\u0207\x07a\x02\x02\u0207\u0208\x07V\x02\x02\u0208\u0209\x07" + + "T\x02\x02\u0209\u020A\x07C\x02\x02\u020A\u020B\x07P\x02\x02\u020B\u020C" + + "\x07U\x02\x02\u020C\u020D\x07a\x02\x02\u020D\u020E\x07V\x02\x02\u020E" + + "\u020F\x07T\x02\x02\u020F\u0210\x07K\x02\x02\u0210\u0211\x07I\x02\x02" + + "\u0211\u0212\x07I\x02\x02\u0212\u0213\x07G\x02\x02\u0213\u0214\x07T\x02" + + "\x02\u0214T\x03\x02\x02\x02\u0215\u0216\x07C\x02\x02\u0216\u0217\x07N" + + "\x02\x02\u0217\u0218\x07V\x02\x02\u0218\u0219\x07G\x02\x02\u0219\u021A" + + "\x07T\x02\x02\u021A\u021B\x07a\x02\x02\u021B\u021C\x07V\x02\x02\u021C" + + "\u021D\x07T\x02\x02\u021D\u021E\x07C\x02\x02\u021E\u021F\x07P\x02\x02" + + "\u021F\u0220\x07U\x02\x02\u0220V\x03\x02\x02\x02\u0221\u0222\x07T\x02" + + "\x02\u0222\u0223\x07G\x02\x02\u0223\u0224\x07R\x02\x02\u0224\u0225\x07" + + "N\x02\x02\u0225\u0226\x07C\x02\x02\u0226\u0227\x07E\x02\x02\u0227\u0228" + + "\x07G\x02\x02\u0228X\x03\x02\x02\x02\u0229\u022A\x07U\x02\x02\u022A\u022B" + + "\x07G\x02\x02\u022B\u022C\x07V\x02\x02\u022C\u022D\x07a\x02\x02\u022D" + + "\u022E\x07Y\x02\x02\u022E\u022F\x07G\x02\x02\u022F\u0230\x07K\x02\x02" + + "\u0230\u0231\x07I\x02\x02\u0231\u0232\x07J\x02\x02\u0232\u0233\x07V\x02" + + "\x02\u0233Z\x03\x02\x02\x02\u0234\u0235\x07T\x02\x02\u0235\u0236\x07G" + + "\x02\x02\u0236\u0237\x07R\x02\x02\u0237\u0238\x07N\x02\x02\u0238\u0239" + + "\x07C\x02\x02\u0239\u023A\x07E\x02\x02\u023A\u023B\x07G\x02\x02\u023B" + + "\u023C\x07a\x02\x02\u023C\u023D\x07U\x02\x02\u023D\u023E\x07V\x02\x02" + + "\u023E\u023F\x07C\x02\x02\u023F\u0240\x07V\x02\x02\u0240\u0241\x07G\x02" + + "\x02\u0241\u0242\x07a\x02\x02\u0242\u0243\x07V\x02\x02\u0243\u0244\x07" + + "T\x02\x02\u0244\u0245\x07K\x02\x02\u0245\u0246\x07I\x02\x02\u0246\u0247" + + "\x07I\x02\x02\u0247\u0248\x07G\x02\x02\u0248\u024F\x07T\x02\x02\u0249" + + "\u024A\x07T\x02\x02\u024A\u024B\x07a\x02\x02\u024B\u024C\x07U\x02\x02" + + "\u024C\u024D\x07a\x02\x02\u024D\u024F\x07V\x02\x02\u024E\u0234\x03\x02" + + "\x02\x02\u024E\u0249\x03\x02\x02\x02\u024F\\\x03\x02\x02\x02\u0250\u0251" + + "\x07T\x02\x02\u0251\u0252\x07G\x02\x02\u0252\u0253\x07R\x02\x02\u0253" + + "\u0254\x07N\x02\x02\u0254\u0255\x07C\x02\x02\u0255\u0256\x07E\x02\x02" + + "\u0256\u0257\x07G\x02\x02\u0257\u0258\x07a\x02\x02\u0258\u0259\x07V\x02" + + "\x02\u0259\u025A\x07T\x02\x02\u025A\u025B\x07K\x02\x02\u025B\u025C\x07" + + "I\x02\x02\u025C\u025D\x07I\x02\x02\u025D\u025E\x07G\x02\x02\u025E\u025F" + + "\x07T\x02\x02\u025F\u0260\x07a\x02\x02\u0260\u0261\x07V\x02\x02\u0261" + + "\u0262\x07G\x02\x02\u0262\u0263\x07Z\x02\x02\u0263\u026A\x07V\x02\x02" + + "\u0264\u0265\x07T\x02\x02\u0265\u0266\x07a\x02\x02\u0266\u0267\x07V\x02" + + "\x02\u0267\u0268\x07a\x02\x02\u0268\u026A\x07V\x02\x02\u0269\u0250\x03" + + "\x02\x02\x02\u0269\u0264\x03\x02\x02\x02\u026A^\x03\x02\x02\x02\u026B" + + "\u026C\x07T\x02\x02\u026C\u026D\x07G\x02\x02\u026D\u026E\x07R\x02\x02" + + "\u026E\u026F\x07N\x02\x02\u026F\u0270\x07C\x02\x02\u0270\u0271\x07E\x02" + + "\x02\u0271\u0272\x07G\x02\x02\u0272\u0273\x07a\x02\x02\u0273\u0274\x07" + + "V\x02\x02\u0274\u0275\x07T\x02\x02\u0275\u0276\x07K\x02\x02\u0276\u0277" + + "\x07I\x02\x02\u0277\u0278\x07I\x02\x02\u0278\u0279\x07G\x02\x02\u0279" + + "\u027A\x07T\x02\x02\u027A\u027B\x07a\x02\x02\u027B\u027C\x07V\x02\x02" + + "\u027C\u027D\x07G\x02\x02\u027D\u027E\x07Z\x02\x02\u027E\u027F\x07V\x02" + + "\x02\u027F\u0280\x07a\x02\x02\u0280\u0281\x07T\x02\x02\u0281\u0282\x07" + + "G\x02\x02\u0282\u0283\x07I\x02\x02\u0283\u0284\x07G\x02\x02\u0284\u0285" + + "\x07Z\x02\x02\u0285\u0286\x07R\x02\x02\u0286`\x03\x02\x02\x02\u0287\u0288" + + "\x07T\x02\x02\u0288\u0289\x07G\x02\x02\u0289\u028A\x07R\x02\x02\u028A" + + "\u028B\x07N\x02\x02\u028B\u028C\x07C\x02\x02\u028C\u028D\x07E\x02\x02" + + "\u028D\u028E\x07G\x02\x02\u028E\u028F\x07a\x02\x02\u028F\u0290\x07C\x02" + + "\x02\u0290\u0291\x07E\x02\x02\u0291\u0292\x07V\x02\x02\u0292\u0293\x07" + + "K\x02\x02\u0293\u0294\x07Q\x02\x02\u0294\u0295\x07P\x02\x02\u0295\u0296" + + "\x07a\x02\x02\u0296\u0297\x07V\x02\x02\u0297\u0298\x07G\x02\x02\u0298" + + "\u0299\x07Z\x02\x02\u0299\u02A0\x07V\x02\x02\u029A\u029B\x07T\x02\x02" + + "\u029B\u029C\x07a\x02\x02\u029C\u029D\x07C\x02\x02\u029D\u029E\x07a\x02" + + "\x02\u029E\u02A0\x07V\x02\x02\u029F\u0287\x03\x02\x02\x02\u029F\u029A" + + "\x03\x02\x02\x02\u02A0b\x03\x02\x02\x02\u02A1\u02A2\x07T\x02\x02\u02A2" + + "\u02A3\x07G\x02\x02\u02A3\u02A4\x07R\x02\x02\u02A4\u02A5\x07N\x02\x02" + + "\u02A5\u02A6\x07C\x02\x02\u02A6\u02A7\x07E\x02\x02\u02A7\u02A8\x07G\x02" + + "\x02\u02A8\u02A9\x07a\x02\x02\u02A9\u02AA\x07C\x02\x02\u02AA\u02AB\x07" + + "E\x02\x02\u02AB\u02AC\x07V\x02\x02\u02AC\u02AD\x07K\x02\x02\u02AD\u02AE" + + "\x07Q\x02\x02\u02AE\u02AF\x07P\x02\x02\u02AF\u02B0\x07a\x02\x02\u02B0" + + "\u02B1\x07V\x02\x02\u02B1\u02B2\x07G\x02\x02\u02B2\u02B3\x07Z\x02\x02" + + "\u02B3\u02B4\x07V\x02\x02\u02B4\u02B5\x07a\x02\x02\u02B5\u02B6\x07T\x02" + + "\x02\u02B6\u02B7\x07G\x02\x02\u02B7\u02B8\x07I\x02\x02\u02B8\u02B9\x07" + + "G\x02\x02\u02B9\u02BA\x07Z\x02\x02\u02BA\u02BB\x07R\x02\x02\u02BBd\x03" + + "\x02\x02\x02\u02BC\u02BD\x07T\x02\x02\u02BD\u02BE\x07G\x02\x02\u02BE\u02BF" + + "\x07R\x02\x02\u02BF\u02C0\x07N\x02\x02\u02C0\u02C1\x07C\x02\x02\u02C1" + + "\u02C2\x07E\x02\x02\u02C2\u02C3\x07G\x02\x02\u02C3\u02C4\x07a\x02\x02" + + "\u02C4\u02C5\x07C\x02\x02\u02C5\u02C6\x07E\x02\x02\u02C6\u02C7\x07V\x02" + + "\x02\u02C7\u02C8\x07K\x02\x02\u02C8\u02C9\x07Q\x02\x02\u02C9\u02CA\x07" + + "P\x02\x02\u02CA\u02CB\x07a\x02\x02\u02CB\u02CC\x07V\x02\x02\u02CC\u02CD" + + "\x07G\x02\x02\u02CD\u02CE\x07Z\x02\x02\u02CE\u02CF\x07V\x02\x02\u02CF" + + "\u02D0\x07a\x02\x02\u02D0\u02D1\x07R\x02\x02\u02D1\u02D2\x07T\x02\x02" + + "\u02D2\u02D3\x07Q\x02\x02\u02D3\u02D4\x07E\x02\x02\u02D4\u02D5\x07G\x02" + + "\x02\u02D5\u02D6\x07U\x02\x02\u02D6\u02D7\x07U\x02\x02\u02D7f\x03\x02" + + "\x02\x02\u02D8\u02D9\x07T\x02\x02\u02D9\u02DA\x07a\x02\x02\u02DA\u02DB" + + "\x07C\x02\x02\u02DB\u02DC\x07a\x02\x02\u02DC\u02DD\x07V\x02\x02\u02DD" + + "\u02DE\x07a\x02\x02\u02DE\u02DF\x07R\x02\x02\u02DF\u02E0\x07a\x02\x02" + + "\u02E0\u0304\x07T\x02\x02\u02E1\u02E2\x07T\x02\x02\u02E2\u02E3\x07G\x02" + + "\x02\u02E3\u02E4\x07R\x02\x02\u02E4\u02E5\x07N\x02\x02\u02E5\u02E6\x07" + + "C\x02\x02\u02E6\u02E7\x07E\x02\x02\u02E7\u02E8\x07G\x02\x02\u02E8\u02E9" + + "\x07a\x02\x02\u02E9\u02EA\x07C\x02\x02\u02EA\u02EB\x07E\x02\x02\u02EB" + + "\u02EC\x07V\x02\x02\u02EC\u02ED\x07K\x02\x02\u02ED\u02EE\x07Q\x02\x02" + + "\u02EE\u02EF\x07P\x02\x02\u02EF\u02F0\x07a\x02\x02\u02F0\u02F1\x07V\x02" + + "\x02\u02F1\u02F2\x07G\x02\x02\u02F2\u02F3\x07Z\x02\x02\u02F3\u02F4\x07" + + "V\x02\x02\u02F4\u02F5\x07a\x02\x02\u02F5\u02F6\x07R\x02\x02\u02F6\u02F7" + + "\x07T\x02\x02\u02F7\u02F8\x07Q\x02\x02\u02F8\u02F9\x07E\x02\x02\u02F9" + + "\u02FA\x07G\x02\x02\u02FA\u02FB\x07U\x02\x02\u02FB\u02FC\x07U\x02\x02" + + "\u02FC\u02FD\x07a\x02\x02\u02FD\u02FE\x07T\x02\x02\u02FE\u02FF\x07G\x02" + + "\x02\u02FF\u0300\x07I\x02\x02\u0300\u0301\x07G\x02\x02\u0301\u0302\x07" + + "Z\x02\x02\u0302\u0304\x07R\x02\x02\u0303\u02D8\x03\x02\x02\x02\u0303\u02E1" + + "\x03\x02\x02\x02\u0304h\x03\x02\x02\x02\u0305\u0306\x07T\x02\x02\u0306" + + "\u0307\x07G\x02\x02\u0307\u0308\x07R\x02\x02\u0308\u0309\x07N\x02\x02" + + "\u0309\u030A\x07C\x02\x02\u030A\u030B\x07E\x02\x02\u030B\u030C\x07G\x02" + + "\x02\u030C\u030D\x07a\x02\x02\u030D\u030E\x07U\x02\x02\u030E\u030F\x07" + + "C\x02\x02\u030F\u0310\x07[\x02\x02\u0310j\x03\x02\x02\x02\u0311\u0312" + + "\x07G\x02\x02\u0312\u0313\x07Z\x02\x02\u0313\u0314\x07V\x02\x02\u0314" + + "\u0315\x07G\x02\x02\u0315\u0316\x07P\x02\x02\u0316\u0317\x07F\x02\x02" + + "\u0317\u0318\x07a\x02\x02\u0318\u0319\x07D\x02\x02\u0319\u031A\x07Q\x02" + + "\x02\u031A\u031B\x07V\x02\x02\u031B\u031C\x07V\x02\x02\u031C\u031D\x07" + + "Q\x02\x02\u031D\u0325\x07O\x02\x02\u031E\u031F\x07G\x02\x02\u031F\u0320" + + "\x07Z\x02\x02\u0320\u0321\x07V\x02\x02\u0321\u0322\x07G\x02\x02\u0322" + + "\u0323\x07P\x02\x02\u0323\u0325\x07F\x02\x02\u0324\u0311\x03\x02\x02\x02" + + "\u0324\u031E\x03\x02\x02\x02\u0325l\x03\x02\x02\x02\u0326\u0327\x07K\x02" + + "\x02\u0327\u0328\x07P\x02\x02\u0328\u0329\x07V\x02\x02\u0329\u032A\x07" + + "G\x02\x02\u032A\u032B\x07T\x02\x02\u032B\u032C\x07L\x02\x02\u032C\u032D" + + "\x07G\x02\x02\u032D\u032E\x07E\x02\x02\u032E\u032F\x07V\x02\x02\u032F" + + "\u0330\x07a\x02\x02\u0330\u0331\x07E\x02\x02\u0331\u0332\x07Q\x02\x02" + + "\u0332\u0333\x07R\x02\x02\u0333\u0334\x07[\x02\x02\u0334\u0335\x07a\x02" + + "\x02\u0335\u0336\x07V\x02\x02\u0336\u0337\x07T\x02\x02\u0337\u0338\x07" + + "C\x02\x02\u0338\u0339\x07P\x02\x02\u0339\u0340\x07U\x02\x02\u033A\u033B" + + "\x07K\x02\x02\u033B\u033C\x07a\x02\x02\u033C\u033D\x07E\x02\x02\u033D" + + "\u033E\x07a\x02\x02\u033E\u0340\x07V\x02\x02\u033F\u0326\x03\x02\x02\x02" + + "\u033F\u033A\x03\x02\x02\x02\u0340n\x03\x02\x02\x02\u0341\u0342\x07K\x02" + + "\x02\u0342\u0343\x07P\x02\x02\u0343\u0344\x07V\x02\x02\u0344\u0345\x07" + + "G\x02\x02\u0345\u0346\x07T\x02\x02\u0346\u0347\x07L\x02\x02\u0347\u0348" + + "\x07G\x02\x02\u0348\u0349\x07E\x02\x02\u0349\u034A\x07V\x02\x02\u034A" + + "\u034B\x07a\x02\x02\u034B\u034C\x07E\x02\x02\u034C\u034D\x07Q\x02\x02" + + "\u034D\u034E\x07R\x02\x02\u034E\u034F\x07[\x02\x02\u034F\u0350\x07a\x02" + + "\x02\u0350\u0351\x07V\x02\x02\u0351\u0352\x07T\x02\x02\u0352\u0353\x07" + + "C\x02\x02\u0353\u0354\x07P\x02\x02\u0354\u0355\x07U\x02\x02\u0355\u035D" + + "\x074\x02\x02\u0356\u0357\x07K\x02\x02\u0357\u0358\x07a\x02\x02\u0358" + + "\u0359\x07E\x02\x02\u0359\u035A\x07a\x02\x02\u035A\u035B\x07V\x02\x02" + + "\u035B\u035D\x074\x02\x02\u035C\u0341\x03\x02\x02\x02\u035C\u0356\x03" + + "\x02\x02\x02\u035Dp\x03\x02\x02\x02\u035E\u035F\x07K\x02\x02\u035F\u0360" + + "\x07P\x02\x02\u0360\u0361\x07V\x02\x02\u0361\u0362\x07G\x02\x02\u0362" + + "\u0363\x07T\x02\x02\u0363\u0364\x07L\x02\x02\u0364\u0365\x07G\x02\x02" + + "\u0365\u0366\x07E\x02\x02\u0366\u0367\x07V\x02\x02\u0367\u0368\x07a\x02" + + "\x02\u0368\u0369\x07E\x02\x02\u0369\u036A\x07Q\x02\x02\u036A\u036B\x07" + + "R\x02\x02\u036B\u036C\x07[\x02\x02\u036C\u036D\x07a\x02\x02\u036D\u036E" + + "\x07V\x02\x02\u036E\u036F\x07T\x02\x02\u036F\u0370\x07C\x02\x02\u0370" + + "\u0371\x07P\x02\x02\u0371\u0372\x07U\x02\x02\u0372\u037A\x075\x02\x02" + + "\u0373\u0374\x07K\x02\x02\u0374\u0375\x07a\x02\x02\u0375\u0376\x07E\x02" + + "\x02\u0376\u0377\x07a\x02\x02\u0377\u0378\x07V\x02\x02\u0378\u037A\x07" + + "5\x02\x02\u0379\u035E\x03\x02\x02\x02\u0379\u0373\x03\x02\x02\x02\u037A" + + "r\x03\x02\x02\x02\u037B\u037C\x07K\x02\x02\u037C\u037D\x07P\x02\x02\u037D" + + "\u037E\x07V\x02\x02\u037E\u037F\x07G\x02\x02\u037F\u0380\x07T\x02\x02" + + "\u0380\u0381\x07L\x02\x02\u0381\u0382\x07G\x02\x02\u0382\u0383\x07E\x02" + + "\x02\u0383\u0384\x07V\x02\x02\u0384\u0385\x07a\x02\x02\u0385\u0386\x07" + + "E\x02\x02\u0386\u0387\x07Q\x02\x02\u0387\u0388\x07R\x02\x02\u0388\u0389" + + "\x07[\x02\x02\u0389\u038A\x07a\x02\x02\u038A\u038B\x07V\x02\x02\u038B" + + "\u038C\x07T\x02\x02\u038C\u038D\x07C\x02\x02\u038D\u038E\x07P\x02\x02" + + "\u038E\u038F\x07U\x02\x02\u038F\u0397\x076\x02\x02\u0390\u0391\x07K\x02" + + "\x02\u0391\u0392\x07a\x02\x02\u0392\u0393\x07E\x02\x02\u0393\u0394\x07" + + "a\x02\x02\u0394\u0395\x07V\x02\x02\u0395\u0397\x076\x02\x02\u0396\u037B" + + "\x03\x02\x02\x02\u0396\u0390\x03\x02\x02\x02\u0397t\x03\x02\x02\x02\u0398" + + "\u0399\t\x03\x02\x02\u0399v\x03\x02\x02\x02\u039A\u039D\x05u:\x02\u039B" + + "\u039D\x05}>\x02\u039C\u039A\x03\x02\x02\x02\u039C\u039B\x03\x02\x02\x02" + + "\u039Dx\x03\x02\x02\x02\u039E\u039F\t\x04\x02\x02\u039Fz\x03\x02\x02\x02" + + "\u03A0\u03A1\t\x05\x02\x02\u03A1|\x03\x02\x02\x02\u03A2\u03A3\t\x06\x02" + + "\x02\u03A3~\x03\x02\x02\x02\u03A4\u03A7\x05}>\x02\u03A5\u03A7\t\x07\x02" + + "\x02\u03A6\u03A4\x03\x02\x02\x02\u03A6\u03A5\x03\x02\x02\x02\u03A7\x80" + + "\x03\x02\x02\x02\u03A8\u03A9\x072\x02\x02\u03A9\u03AA\x07q\x02\x02\u03AA" + + "\x82\x03\x02\x02\x02\u03AB\u03AC\x072\x02\x02\u03AC\u03AD\x07d\x02\x02" + + "\u03AD\x84\x03\x02\x02\x02\u03AE\u03AF\x072\x02\x02\u03AF\u03B0\x07z\x02" + + "\x02\u03B0\x86\x03\x02\x02\x02\u03B1\u03B3\x07%\x02\x02\u03B2\u03B4\x07" + + "/\x02\x02\u03B3\u03B2\x03\x02\x02\x02\u03B3\u03B4\x03\x02\x02\x02\u03B4" + + "\u03B6\x03\x02\x02\x02\u03B5\u03B7\x05}>\x02\u03B6\u03B5\x03\x02\x02\x02" + + "\u03B7\u03B8\x03\x02\x02\x02\u03B8\u03B6\x03\x02\x02\x02\u03B8\u03B9\x03" + + "\x02\x02\x02\u03B9\x88\x03\x02\x02\x02\u03BA\u03BE\x07]\x02\x02\u03BB" + + "\u03BD\v\x02\x02\x02\u03BC\u03BB\x03\x02\x02\x02\u03BD\u03C0\x03\x02\x02" + + "\x02\u03BE\u03BF\x03\x02\x02\x02\u03BE\u03BC\x03\x02\x02\x02\u03BF\u03C1" + + "\x03\x02\x02\x02\u03C0\u03BE\x03\x02\x02\x02\u03C1\u03C2\x07_\x02\x02" + + "\u03C2\x8A\x03\x02\x02\x02\u03C3\u03C7\x07\x80\x02\x02\u03C4\u03C6\v\x02" + + "\x02\x02\u03C5\u03C4\x03\x02\x02\x02\u03C6\u03C9\x03\x02\x02\x02\u03C7" + + "\u03C8\x03\x02\x02\x02\u03C7\u03C5\x03\x02\x02\x02\u03C8\u03CA\x03\x02" + + "\x02\x02\u03C9\u03C7\x03\x02\x02\x02\u03CA\u03CB\x07\x80\x02\x02\u03CB" + + "\x8C\x03\x02\x02\x02\u03CC\u03D0\x07$\x02\x02\u03CD\u03CF\v\x02\x02\x02" + + "\u03CE\u03CD\x03\x02\x02\x02\u03CF\u03D2\x03\x02\x02\x02\u03D0\u03D1\x03" + + "\x02\x02\x02\u03D0\u03CE\x03\x02\x02\x02\u03D1\u03D3\x03\x02\x02\x02\u03D2" + + "\u03D0\x03\x02\x02\x02\u03D3\u03D4\x07$\x02\x02\u03D4\x8E\x03\x02\x02" + + "\x02\u03D5\u03D9\x07\'\x02\x02\u03D6\u03D8\v\x02\x02\x02\u03D7\u03D6\x03" + + "\x02\x02\x02\u03D8\u03DB\x03\x02\x02\x02\u03D9\u03DA\x03\x02\x02\x02\u03D9" + + "\u03D7\x03\x02\x02\x02\u03DA\u03DC\x03\x02\x02\x02\u03DB\u03D9\x03\x02" + + "\x02\x02\u03DC\u03DD\x07\'\x02\x02\u03DD\x90\x03\x02\x02\x02\u03DE\u03E0" + + "\x07#\x02\x02\u03DF\u03E1\t\x06\x02\x02\u03E0\u03DF\x03\x02\x02\x02\u03E1" + + "\u03E2\x03\x02\x02\x02\u03E2\u03E0\x03\x02\x02\x02\u03E2\u03E3\x03\x02" + + "\x02\x02\u03E3\x92\x03\x02\x02\x02\u03E4\u03E6\x07B\x02\x02\u03E5\u03E7" + + "\t\x06\x02\x02\u03E6\u03E5\x03\x02\x02\x02\u03E7\u03E8\x03\x02\x02\x02" + + "\u03E8\u03E6\x03\x02\x02\x02\u03E8\u03E9\x03\x02\x02\x02\u03E9\x94\x03" + + "\x02\x02\x02\u03EA\u03EB\x07`\x02\x02\u03EB\x96\x03\x02\x02\x02\u03EC" + + "\u03ED\x07\x80\x02\x02\u03ED\u03EE\x07\x80\x02\x02\u03EE\u03EF\x07\x80" + + "\x02\x02\u03EF\u03F0\x07\x80\x02\x02\u03F0\u03F1\x07\x80\x02\x02\u03F1" + + "\u03F2\x03\x02\x02\x02\u03F2\u03F3\bK\x03\x02\u03F3\u03F4\bK\x04\x02\u03F4" + + "\x98\x03\x02\x02\x02\u03F5\u03F6\x071\x02\x02\u03F6\u03FA\x071\x02\x02" + + "\u03F7\u03F9\n\b\x02\x02\u03F8\u03F7\x03\x02\x02\x02\u03F9\u03FC\x03\x02" + + "\x02\x02\u03FA\u03F8\x03\x02\x02\x02\u03FA\u03FB\x03\x02\x02\x02\u03FB" + + "\u03FD\x03\x02\x02\x02\u03FC\u03FA\x03\x02\x02\x02\u03FD\u03FE\bL\x02" + + "\x02\u03FE\x9A\x03\x02\x02\x02\u03FF\u0400\x071\x02\x02\u0400\u0401\x07" + + ",\x02\x02\u0401\u0402\x03\x02\x02\x02\u0402\u0403\bM\x05\x02\u0403\u0404" + + "\bM\x04\x02\u0404\x9C\x03\x02\x02\x02\u0405\u0408\x05w;\x02\u0406\u0408" + + "\x07a\x02\x02\u0407\u0405\x03\x02\x02\x02\u0407\u0406\x03\x02\x02\x02" + + "\u0408\u040D\x03\x02\x02\x02\u0409\u040C\x05w;\x02\u040A\u040C\t\t\x02" + + "\x02\u040B\u0409\x03\x02\x02\x02\u040B\u040A\x03\x02\x02\x02\u040C\u040F" + + "\x03\x02\x02\x02\u040D\u040B\x03\x02\x02\x02\u040D\u040E\x03\x02\x02\x02" + + "\u040E\x9E\x03\x02\x02\x02\u040F\u040D\x03\x02\x02\x02\u0410\u0411\v\x02" + + "\x02\x02\u0411\u0412\x03\x02\x02\x02\u0412\u0413\bO\x04\x02\u0413\xA0" + + "\x03\x02\x02\x02\u0414\u0415\x07\x80\x02\x02\u0415\u0416\x07\x80\x02\x02" + + "\u0416\u0417\x07\x80\x02\x02\u0417\u0418\x07\x80\x02\x02\u0418\u0419\x07" + + "\x80\x02\x02\u0419\u041A\x03\x02\x02\x02\u041A\u041B\bP\x06\x02\u041B" + + "\xA2\x03\x02\x02\x02\u041C\u041D\x07\x02\x02\x03\u041D\u041E\x03\x02\x02" + + "\x02\u041E\u041F\bQ\x06\x02\u041F\xA4\x03\x02\x02\x02\u0420\u0421\x07" + + "1\x02\x02\u0421\u0422\x07,\x02\x02\u0422\u0423\x03\x02\x02\x02\u0423\u0424" + + "\bR\x05\x02\u0424\u0425\bR\x04\x02\u0425\xA6\x03\x02\x02\x02\u0426\u0427" + + "\v\x02\x02\x02\u0427\u0428\x03\x02\x02\x02\u0428\u0429\bS\x04\x02\u0429" + + "\xA8\x03\x02\x02\x02\u042A\u042B\x07,\x02\x02\u042B\u042C\x071\x02\x02" + + "\u042C\u042D\x03\x02\x02\x02\u042D\u042E\bT\x06\x02\u042E\u042F\bT\x02" + + "\x02\u042F\xAA\x03\x02\x02\x02\u0430\u0431\x07\x02\x02\x03\u0431\u0432" + + "\x03\x02\x02\x02\u0432\u0433\bU\x06\x02\u0433\xAC\x03\x02\x02\x02 \x02" + + "\x03\x04\xB0\u0192\u01BF\u01D7\u024E\u0269\u029F\u0303\u0324\u033F\u035C" + + "\u0379\u0396\u039C\u03A6\u03B3\u03B8\u03BE\u03C7\u03D0\u03D9\u03E2\u03E8" + + "\u03FA\u0407\u040B\u040D\x07\b\x02\x02\x07\x03\x02\x05\x02\x02\x07\x04" + + "\x02\x06\x02\x02"; + public static readonly _serializedATN: string = Utils.join( + [ + DLexer._serializedATNSegment0, + DLexer._serializedATNSegment1, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!DLexer.__ATN) { + DLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(DLexer._serializedATN)); + } + + return DLexer.__ATN; + } + +} + diff --git a/server/src/dparser/DParser.interp b/server/src/dparser/DParser.interp new file mode 100644 index 0000000..487a94b --- /dev/null +++ b/server/src/dparser/DParser.interp @@ -0,0 +1,182 @@ +token literal names: +null +null +null +'BEGIN' +'END' +'IF' +'UNLESS' +'WEIGHT' +'THEN' +'=' +'==' +'BRANCH' +'+' +'COPY_TRANS' +'COPY_TRANS_LATE' +'DO' +'JOURNAL' +'SOLVED_JOURNAL' +'UNSOLVED_JOURNAL' +'FLAGS' +'GOTO' +'APPENDI' +'CHAIN2' +'SAFE' +'EXTERN' +'REPLY' +'EXIT' +'SAY' +'IF_FILE_EXISTS' +'(' +')' +'AT' +'APPEND' +'APPEND_EARLY' +null +'INTERJECT' +'EXTEND_TOP' +null +null +'ADD_TRANS_ACTION' +'REPLACE_TRANS_ACTION' +'REPLACE_TRANS_TRIGGER' +'ALTER_TRANS' +'REPLACE' +'SET_WEIGHT' +null +null +'REPLACE_TRIGGER_TEXT_REGEXP' +null +'REPLACE_ACTION_TEXT_REGEXP' +'REPLACE_ACTION_TEXT_PROCESS' +null +'REPLACE_SAY' +null +null +null +null +null +null +null +null +null +null +null +null +'^' +null +null +null +null +'*/' +null +null +null + +token symbolic names: +null +BLOCK_COMMENT +WHITESPACE +BEGIN +END +IF +UNLESS +WEIGHT +THEN +EQ +EQEQ +BRANCH +PLUS +COPY_TRANS +COPY_TRANS_LATE +DO +JOURNAL +SOLVED_JOURNAL +UNSOLVED_JOURNAL +FLAGS +GOTO +APPENDI +CHAIN2 +SAFE +EXTERN +REPLY +EXIT +SAY +IF_FILE_EXISTS +PAREN_OPEN +PAREN_CLOSE +AT +APPEND +APPEND_EARLY +CHAIN +INTERJECT +EXTEND_TOP +ADD_STATE_TRIGGER +ADD_TRANS_TRIGGER +ADD_TRANS_ACTION +REPLACE_TRANS_ACTION +REPLACE_TRANS_TRIGGER +ALTER_TRANS +REPLACE +SET_WEIGHT +REPLACE_STATE_TRIGGER +REPLACE_TRIGGER_TEXT +REPLACE_TRIGGER_TEXT_REGEXP +REPLACE_ACTION_TEXT +REPLACE_ACTION_TEXT_REGEXP +REPLACE_ACTION_TEXT_PROCESS +REPLACE_ACTION_TEXT_PROCESS_REGEXP +REPLACE_SAY +EXTEND_BOTTOM +INTERJECT_COPY_TRANS +INTERJECT_COPY_TRANS2 +INTERJECT_COPY_TRANS3 +INTERJECT_COPY_TRANS4 +SHARP_NUMBER +SOUND_STRING +TILDE_STRING +QUOTE_STRING +PERCENT_STRING +FORCED_STRING_REFERENCE +TRANSLATION_REFERENCE +CONCAT +LINE_COMMENT +IDENTIFIER +LONG_TILDE_STRING +LONG_TILDE_STRING_UNTERMINATED +BLOCK_COMMENT_END +UNTERMINATED_BLOCK_COMMENT +LONG_TILDE_STRING_START +BLOCK_COMMENT_START + +rule names: +rootRule +dFileRule +dActionRule +alterTransCommand +conditionRule +stateRule +chain2DlgRule +chain2ElementRule +transitionRule +transitionTargetRule +chainActionEpilogRule +transitionFeatureRule +chainDlgRule +chainBlockRule +chainElementRule +fileRule +sayTextRule +traLineRule +dlgLineRule +stringRule +stringLiteralRule +identifierRule +referenceRule +sharpNumberRule +soundRule + + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 75, 731, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 3, 2, 3, 2, 3, 3, 7, 3, 56, 10, 3, 12, 3, 14, 3, 59, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 5, 4, 66, 10, 4, 3, 4, 7, 4, 69, 10, 4, 12, 4, 14, 4, 72, 11, 4, 3, 4, 3, 4, 5, 4, 76, 10, 4, 3, 4, 3, 4, 7, 4, 80, 10, 4, 12, 4, 14, 4, 83, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 89, 10, 4, 3, 4, 3, 4, 7, 4, 93, 10, 4, 12, 4, 14, 4, 96, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 104, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 109, 10, 4, 3, 4, 5, 4, 112, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 124, 10, 4, 12, 4, 14, 4, 127, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 135, 10, 4, 3, 4, 5, 4, 138, 10, 4, 3, 4, 5, 4, 141, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 147, 10, 4, 12, 4, 14, 4, 150, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 156, 10, 4, 3, 4, 3, 4, 7, 4, 160, 10, 4, 12, 4, 14, 4, 163, 11, 4, 3, 4, 5, 4, 166, 10, 4, 3, 4, 7, 4, 169, 10, 4, 12, 4, 14, 4, 172, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 181, 10, 4, 12, 4, 14, 4, 184, 11, 4, 3, 4, 7, 4, 187, 10, 4, 12, 4, 14, 4, 190, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 197, 10, 4, 12, 4, 14, 4, 200, 11, 4, 3, 4, 3, 4, 7, 4, 204, 10, 4, 12, 4, 14, 4, 207, 11, 4, 5, 4, 209, 10, 4, 3, 4, 7, 4, 212, 10, 4, 12, 4, 14, 4, 215, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 221, 10, 4, 12, 4, 14, 4, 224, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 229, 10, 4, 12, 4, 14, 4, 232, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 237, 10, 4, 12, 4, 14, 4, 240, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 246, 10, 4, 12, 4, 14, 4, 249, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 254, 10, 4, 12, 4, 14, 4, 257, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 263, 10, 4, 12, 4, 14, 4, 266, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 272, 10, 4, 12, 4, 14, 4, 275, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 280, 10, 4, 12, 4, 14, 4, 283, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 289, 10, 4, 12, 4, 14, 4, 292, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 298, 10, 4, 12, 4, 14, 4, 301, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 306, 10, 4, 12, 4, 14, 4, 309, 11, 4, 3, 4, 3, 4, 3, 4, 7, 4, 314, 10, 4, 12, 4, 14, 4, 317, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 324, 10, 4, 12, 4, 14, 4, 327, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 346, 10, 4, 12, 4, 14, 4, 349, 11, 4, 3, 4, 7, 4, 352, 10, 4, 12, 4, 14, 4, 355, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 362, 10, 4, 12, 4, 14, 4, 365, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 372, 10, 4, 12, 4, 14, 4, 375, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 382, 10, 4, 12, 4, 14, 4, 385, 11, 4, 3, 4, 7, 4, 388, 10, 4, 12, 4, 14, 4, 391, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 398, 10, 4, 12, 4, 14, 4, 401, 11, 4, 3, 4, 7, 4, 404, 10, 4, 12, 4, 14, 4, 407, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 414, 10, 4, 12, 4, 14, 4, 417, 11, 4, 3, 4, 7, 4, 420, 10, 4, 12, 4, 14, 4, 423, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 430, 10, 4, 12, 4, 14, 4, 433, 11, 4, 3, 4, 7, 4, 436, 10, 4, 12, 4, 14, 4, 439, 11, 4, 5, 4, 441, 10, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 5, 6, 448, 10, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 5, 7, 455, 10, 7, 3, 7, 3, 7, 5, 7, 459, 10, 7, 3, 7, 5, 7, 462, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 469, 10, 7, 12, 7, 14, 7, 472, 11, 7, 3, 7, 7, 7, 475, 10, 7, 12, 7, 14, 7, 478, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 485, 10, 7, 12, 7, 14, 7, 488, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 500, 10, 7, 3, 8, 3, 8, 7, 8, 504, 10, 8, 12, 8, 14, 8, 507, 11, 8, 3, 9, 3, 9, 5, 9, 511, 10, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 5, 10, 518, 10, 10, 3, 10, 7, 10, 521, 10, 10, 12, 10, 14, 10, 524, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 530, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 535, 10, 10, 12, 10, 14, 10, 538, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 544, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 551, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 556, 10, 10, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 562, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 568, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 580, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 587, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 7, 12, 595, 10, 12, 12, 12, 14, 12, 598, 11, 12, 5, 12, 600, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 614, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 620, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 625, 10, 14, 12, 14, 14, 14, 628, 11, 14, 3, 14, 7, 14, 631, 10, 14, 12, 14, 14, 14, 634, 11, 14, 3, 15, 3, 15, 5, 15, 638, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 644, 10, 15, 12, 15, 14, 15, 647, 11, 15, 3, 15, 3, 15, 3, 15, 3, 15, 7, 15, 653, 10, 15, 12, 15, 14, 15, 656, 11, 15, 3, 15, 3, 15, 5, 15, 660, 10, 15, 3, 16, 3, 16, 3, 16, 5, 16, 665, 10, 16, 5, 16, 667, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 672, 10, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 5, 19, 681, 10, 19, 3, 20, 3, 20, 5, 20, 685, 10, 20, 3, 20, 3, 20, 5, 20, 689, 10, 20, 3, 20, 3, 20, 5, 20, 693, 10, 20, 3, 20, 5, 20, 696, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 6, 21, 702, 10, 21, 13, 21, 14, 21, 703, 5, 21, 706, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 713, 10, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 725, 10, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 2, 2, 2, 27, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 2, 3, 4, 2, 14, 14, 22, 22, 2, 841, 2, 52, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 440, 3, 2, 2, 2, 8, 442, 3, 2, 2, 2, 10, 447, 3, 2, 2, 2, 12, 499, 3, 2, 2, 2, 14, 501, 3, 2, 2, 2, 16, 510, 3, 2, 2, 2, 18, 555, 3, 2, 2, 2, 20, 567, 3, 2, 2, 2, 22, 599, 3, 2, 2, 2, 24, 613, 3, 2, 2, 2, 26, 619, 3, 2, 2, 2, 28, 659, 3, 2, 2, 2, 30, 666, 3, 2, 2, 2, 32, 673, 3, 2, 2, 2, 34, 675, 3, 2, 2, 2, 36, 680, 3, 2, 2, 2, 38, 695, 3, 2, 2, 2, 40, 705, 3, 2, 2, 2, 42, 712, 3, 2, 2, 2, 44, 714, 3, 2, 2, 2, 46, 724, 3, 2, 2, 2, 48, 726, 3, 2, 2, 2, 50, 728, 3, 2, 2, 2, 52, 53, 5, 4, 3, 2, 53, 3, 3, 2, 2, 2, 54, 56, 5, 6, 4, 2, 55, 54, 3, 2, 2, 2, 56, 59, 3, 2, 2, 2, 57, 55, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 60, 3, 2, 2, 2, 59, 57, 3, 2, 2, 2, 60, 61, 7, 2, 2, 3, 61, 5, 3, 2, 2, 2, 62, 63, 7, 5, 2, 2, 63, 65, 5, 32, 17, 2, 64, 66, 5, 40, 21, 2, 65, 64, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 70, 3, 2, 2, 2, 67, 69, 5, 12, 7, 2, 68, 67, 3, 2, 2, 2, 69, 72, 3, 2, 2, 2, 70, 68, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 441, 3, 2, 2, 2, 72, 70, 3, 2, 2, 2, 73, 75, 7, 34, 2, 2, 74, 76, 7, 30, 2, 2, 75, 74, 3, 2, 2, 2, 75, 76, 3, 2, 2, 2, 76, 77, 3, 2, 2, 2, 77, 81, 5, 32, 17, 2, 78, 80, 5, 12, 7, 2, 79, 78, 3, 2, 2, 2, 80, 83, 3, 2, 2, 2, 81, 79, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 84, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 85, 7, 6, 2, 2, 85, 441, 3, 2, 2, 2, 86, 88, 7, 35, 2, 2, 87, 89, 7, 30, 2, 2, 88, 87, 3, 2, 2, 2, 88, 89, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 94, 5, 32, 17, 2, 91, 93, 5, 12, 7, 2, 92, 91, 3, 2, 2, 2, 93, 96, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 97, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 97, 98, 7, 6, 2, 2, 98, 441, 3, 2, 2, 2, 99, 108, 7, 36, 2, 2, 100, 103, 7, 7, 2, 2, 101, 102, 7, 9, 2, 2, 102, 104, 5, 48, 25, 2, 103, 101, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 105, 3, 2, 2, 2, 105, 106, 5, 40, 21, 2, 106, 107, 7, 10, 2, 2, 107, 109, 3, 2, 2, 2, 108, 100, 3, 2, 2, 2, 108, 109, 3, 2, 2, 2, 109, 111, 3, 2, 2, 2, 110, 112, 7, 30, 2, 2, 111, 110, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 5, 32, 17, 2, 114, 115, 5, 40, 21, 2, 115, 116, 5, 26, 14, 2, 116, 117, 5, 22, 12, 2, 117, 441, 3, 2, 2, 2, 118, 119, 7, 37, 2, 2, 119, 120, 5, 32, 17, 2, 120, 121, 5, 40, 21, 2, 121, 125, 5, 40, 21, 2, 122, 124, 5, 28, 15, 2, 123, 122, 3, 2, 2, 2, 124, 127, 3, 2, 2, 2, 125, 123, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 128, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 128, 129, 5, 22, 12, 2, 129, 441, 3, 2, 2, 2, 130, 135, 7, 56, 2, 2, 131, 135, 7, 57, 2, 2, 132, 135, 7, 58, 2, 2, 133, 135, 7, 59, 2, 2, 134, 130, 3, 2, 2, 2, 134, 131, 3, 2, 2, 2, 134, 132, 3, 2, 2, 2, 134, 133, 3, 2, 2, 2, 135, 137, 3, 2, 2, 2, 136, 138, 7, 25, 2, 2, 137, 136, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 140, 3, 2, 2, 2, 139, 141, 7, 30, 2, 2, 140, 139, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 143, 5, 32, 17, 2, 143, 144, 5, 40, 21, 2, 144, 148, 5, 40, 21, 2, 145, 147, 5, 28, 15, 2, 146, 145, 3, 2, 2, 2, 147, 150, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 149, 3, 2, 2, 2, 149, 151, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 151, 152, 7, 6, 2, 2, 152, 441, 3, 2, 2, 2, 153, 156, 7, 38, 2, 2, 154, 156, 7, 55, 2, 2, 155, 153, 3, 2, 2, 2, 155, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 161, 5, 32, 17, 2, 158, 160, 5, 40, 21, 2, 159, 158, 3, 2, 2, 2, 160, 163, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 161, 162, 3, 2, 2, 2, 162, 165, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 164, 166, 5, 48, 25, 2, 165, 164, 3, 2, 2, 2, 165, 166, 3, 2, 2, 2, 166, 170, 3, 2, 2, 2, 167, 169, 5, 18, 10, 2, 168, 167, 3, 2, 2, 2, 169, 172, 3, 2, 2, 2, 170, 168, 3, 2, 2, 2, 170, 171, 3, 2, 2, 2, 171, 173, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 173, 174, 7, 6, 2, 2, 174, 441, 3, 2, 2, 2, 175, 176, 7, 39, 2, 2, 176, 177, 5, 32, 17, 2, 177, 178, 5, 40, 21, 2, 178, 182, 5, 40, 21, 2, 179, 181, 5, 40, 21, 2, 180, 179, 3, 2, 2, 2, 181, 184, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 188, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 185, 187, 5, 10, 6, 2, 186, 185, 3, 2, 2, 2, 187, 190, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 441, 3, 2, 2, 2, 190, 188, 3, 2, 2, 2, 191, 192, 7, 40, 2, 2, 192, 193, 5, 32, 17, 2, 193, 194, 5, 40, 21, 2, 194, 198, 5, 40, 21, 2, 195, 197, 5, 40, 21, 2, 196, 195, 3, 2, 2, 2, 197, 200, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 199, 3, 2, 2, 2, 199, 208, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 201, 205, 7, 17, 2, 2, 202, 204, 5, 40, 21, 2, 203, 202, 3, 2, 2, 2, 204, 207, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 208, 201, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 213, 3, 2, 2, 2, 210, 212, 5, 10, 6, 2, 211, 210, 3, 2, 2, 2, 212, 215, 3, 2, 2, 2, 213, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 441, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 217, 7, 41, 2, 2, 217, 218, 5, 32, 17, 2, 218, 222, 7, 5, 2, 2, 219, 221, 5, 40, 21, 2, 220, 219, 3, 2, 2, 2, 221, 224, 3, 2, 2, 2, 222, 220, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 225, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 225, 226, 7, 6, 2, 2, 226, 230, 7, 5, 2, 2, 227, 229, 5, 40, 21, 2, 228, 227, 3, 2, 2, 2, 229, 232, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 233, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 234, 7, 6, 2, 2, 234, 238, 5, 40, 21, 2, 235, 237, 5, 10, 6, 2, 236, 235, 3, 2, 2, 2, 237, 240, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 441, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 241, 242, 7, 42, 2, 2, 242, 243, 5, 32, 17, 2, 243, 247, 7, 5, 2, 2, 244, 246, 5, 40, 21, 2, 245, 244, 3, 2, 2, 2, 246, 249, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 250, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 251, 7, 6, 2, 2, 251, 255, 7, 5, 2, 2, 252, 254, 5, 40, 21, 2, 253, 252, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 258, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 258, 259, 7, 6, 2, 2, 259, 260, 5, 40, 21, 2, 260, 264, 5, 40, 21, 2, 261, 263, 5, 10, 6, 2, 262, 261, 3, 2, 2, 2, 263, 266, 3, 2, 2, 2, 264, 262, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 441, 3, 2, 2, 2, 266, 264, 3, 2, 2, 2, 267, 268, 7, 43, 2, 2, 268, 269, 5, 32, 17, 2, 269, 273, 7, 5, 2, 2, 270, 272, 5, 40, 21, 2, 271, 270, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 276, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 277, 7, 6, 2, 2, 277, 281, 7, 5, 2, 2, 278, 280, 5, 40, 21, 2, 279, 278, 3, 2, 2, 2, 280, 283, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 284, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 285, 7, 6, 2, 2, 285, 286, 5, 40, 21, 2, 286, 290, 5, 40, 21, 2, 287, 289, 5, 10, 6, 2, 288, 287, 3, 2, 2, 2, 289, 292, 3, 2, 2, 2, 290, 288, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 441, 3, 2, 2, 2, 292, 290, 3, 2, 2, 2, 293, 294, 7, 44, 2, 2, 294, 295, 5, 32, 17, 2, 295, 299, 7, 5, 2, 2, 296, 298, 5, 40, 21, 2, 297, 296, 3, 2, 2, 2, 298, 301, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 299, 300, 3, 2, 2, 2, 300, 302, 3, 2, 2, 2, 301, 299, 3, 2, 2, 2, 302, 303, 7, 6, 2, 2, 303, 307, 7, 5, 2, 2, 304, 306, 5, 40, 21, 2, 305, 304, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 310, 311, 7, 6, 2, 2, 311, 315, 7, 5, 2, 2, 312, 314, 5, 8, 5, 2, 313, 312, 3, 2, 2, 2, 314, 317, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 318, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 318, 319, 7, 6, 2, 2, 319, 441, 3, 2, 2, 2, 320, 321, 7, 45, 2, 2, 321, 325, 5, 32, 17, 2, 322, 324, 5, 12, 7, 2, 323, 322, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 328, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 328, 329, 7, 6, 2, 2, 329, 441, 3, 2, 2, 2, 330, 331, 7, 46, 2, 2, 331, 332, 5, 32, 17, 2, 332, 333, 5, 40, 21, 2, 333, 334, 5, 48, 25, 2, 334, 441, 3, 2, 2, 2, 335, 336, 7, 54, 2, 2, 336, 337, 5, 32, 17, 2, 337, 338, 5, 40, 21, 2, 338, 339, 5, 34, 18, 2, 339, 441, 3, 2, 2, 2, 340, 341, 7, 47, 2, 2, 341, 342, 5, 32, 17, 2, 342, 343, 5, 40, 21, 2, 343, 347, 5, 40, 21, 2, 344, 346, 5, 40, 21, 2, 345, 344, 3, 2, 2, 2, 346, 349, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 353, 3, 2, 2, 2, 349, 347, 3, 2, 2, 2, 350, 352, 5, 10, 6, 2, 351, 350, 3, 2, 2, 2, 352, 355, 3, 2, 2, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 441, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 356, 357, 7, 48, 2, 2, 357, 358, 5, 32, 17, 2, 358, 359, 5, 40, 21, 2, 359, 363, 5, 40, 21, 2, 360, 362, 5, 10, 6, 2, 361, 360, 3, 2, 2, 2, 362, 365, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 441, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 366, 367, 7, 49, 2, 2, 367, 368, 5, 40, 21, 2, 368, 369, 5, 40, 21, 2, 369, 373, 5, 40, 21, 2, 370, 372, 5, 10, 6, 2, 371, 370, 3, 2, 2, 2, 372, 375, 3, 2, 2, 2, 373, 371, 3, 2, 2, 2, 373, 374, 3, 2, 2, 2, 374, 441, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 376, 377, 7, 50, 2, 2, 377, 378, 5, 32, 17, 2, 378, 379, 5, 40, 21, 2, 379, 383, 5, 40, 21, 2, 380, 382, 5, 32, 17, 2, 381, 380, 3, 2, 2, 2, 382, 385, 3, 2, 2, 2, 383, 381, 3, 2, 2, 2, 383, 384, 3, 2, 2, 2, 384, 389, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 386, 388, 5, 10, 6, 2, 387, 386, 3, 2, 2, 2, 388, 391, 3, 2, 2, 2, 389, 387, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 441, 3, 2, 2, 2, 391, 389, 3, 2, 2, 2, 392, 393, 7, 51, 2, 2, 393, 394, 5, 40, 21, 2, 394, 395, 5, 40, 21, 2, 395, 399, 5, 40, 21, 2, 396, 398, 5, 40, 21, 2, 397, 396, 3, 2, 2, 2, 398, 401, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 405, 3, 2, 2, 2, 401, 399, 3, 2, 2, 2, 402, 404, 5, 10, 6, 2, 403, 402, 3, 2, 2, 2, 404, 407, 3, 2, 2, 2, 405, 403, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 441, 3, 2, 2, 2, 407, 405, 3, 2, 2, 2, 408, 409, 7, 52, 2, 2, 409, 410, 5, 32, 17, 2, 410, 411, 5, 40, 21, 2, 411, 415, 5, 40, 21, 2, 412, 414, 5, 32, 17, 2, 413, 412, 3, 2, 2, 2, 414, 417, 3, 2, 2, 2, 415, 413, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 421, 3, 2, 2, 2, 417, 415, 3, 2, 2, 2, 418, 420, 5, 10, 6, 2, 419, 418, 3, 2, 2, 2, 420, 423, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 441, 3, 2, 2, 2, 423, 421, 3, 2, 2, 2, 424, 425, 7, 53, 2, 2, 425, 426, 5, 40, 21, 2, 426, 427, 5, 40, 21, 2, 427, 431, 5, 40, 21, 2, 428, 430, 5, 40, 21, 2, 429, 428, 3, 2, 2, 2, 430, 433, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 437, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 434, 436, 5, 10, 6, 2, 435, 434, 3, 2, 2, 2, 436, 439, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 440, 62, 3, 2, 2, 2, 440, 73, 3, 2, 2, 2, 440, 86, 3, 2, 2, 2, 440, 99, 3, 2, 2, 2, 440, 118, 3, 2, 2, 2, 440, 134, 3, 2, 2, 2, 440, 155, 3, 2, 2, 2, 440, 175, 3, 2, 2, 2, 440, 191, 3, 2, 2, 2, 440, 216, 3, 2, 2, 2, 440, 241, 3, 2, 2, 2, 440, 267, 3, 2, 2, 2, 440, 293, 3, 2, 2, 2, 440, 320, 3, 2, 2, 2, 440, 330, 3, 2, 2, 2, 440, 335, 3, 2, 2, 2, 440, 340, 3, 2, 2, 2, 440, 356, 3, 2, 2, 2, 440, 366, 3, 2, 2, 2, 440, 376, 3, 2, 2, 2, 440, 392, 3, 2, 2, 2, 440, 408, 3, 2, 2, 2, 440, 424, 3, 2, 2, 2, 441, 7, 3, 2, 2, 2, 442, 443, 5, 40, 21, 2, 443, 444, 5, 40, 21, 2, 444, 9, 3, 2, 2, 2, 445, 448, 7, 7, 2, 2, 446, 448, 7, 8, 2, 2, 447, 445, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 450, 5, 40, 21, 2, 450, 11, 3, 2, 2, 2, 451, 454, 7, 7, 2, 2, 452, 453, 7, 9, 2, 2, 453, 455, 5, 48, 25, 2, 454, 452, 3, 2, 2, 2, 454, 455, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 458, 5, 40, 21, 2, 457, 459, 7, 10, 2, 2, 458, 457, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 461, 3, 2, 2, 2, 460, 462, 7, 5, 2, 2, 461, 460, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 464, 5, 40, 21, 2, 464, 465, 7, 29, 2, 2, 465, 470, 5, 34, 18, 2, 466, 467, 7, 11, 2, 2, 467, 469, 5, 34, 18, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 476, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 475, 5, 18, 10, 2, 474, 473, 3, 2, 2, 2, 475, 478, 3, 2, 2, 2, 476, 474, 3, 2, 2, 2, 476, 477, 3, 2, 2, 2, 477, 479, 3, 2, 2, 2, 478, 476, 3, 2, 2, 2, 479, 480, 7, 6, 2, 2, 480, 500, 3, 2, 2, 2, 481, 482, 7, 23, 2, 2, 482, 486, 5, 32, 17, 2, 483, 485, 5, 12, 7, 2, 484, 483, 3, 2, 2, 2, 485, 488, 3, 2, 2, 2, 486, 484, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 489, 3, 2, 2, 2, 488, 486, 3, 2, 2, 2, 489, 490, 7, 6, 2, 2, 490, 500, 3, 2, 2, 2, 491, 492, 7, 24, 2, 2, 492, 493, 5, 32, 17, 2, 493, 494, 5, 40, 21, 2, 494, 495, 5, 14, 8, 2, 495, 496, 7, 6, 2, 2, 496, 497, 5, 32, 17, 2, 497, 498, 5, 40, 21, 2, 498, 500, 3, 2, 2, 2, 499, 451, 3, 2, 2, 2, 499, 481, 3, 2, 2, 2, 499, 491, 3, 2, 2, 2, 500, 13, 3, 2, 2, 2, 501, 505, 5, 30, 16, 2, 502, 504, 5, 16, 9, 2, 503, 502, 3, 2, 2, 2, 504, 507, 3, 2, 2, 2, 505, 503, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 15, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 508, 511, 7, 12, 2, 2, 509, 511, 7, 11, 2, 2, 510, 508, 3, 2, 2, 2, 510, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 513, 5, 30, 16, 2, 513, 17, 3, 2, 2, 2, 514, 515, 7, 7, 2, 2, 515, 517, 5, 40, 21, 2, 516, 518, 7, 10, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 522, 3, 2, 2, 2, 519, 521, 5, 24, 13, 2, 520, 519, 3, 2, 2, 2, 521, 524, 3, 2, 2, 2, 522, 520, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 525, 3, 2, 2, 2, 524, 522, 3, 2, 2, 2, 525, 526, 5, 20, 11, 2, 526, 556, 3, 2, 2, 2, 527, 529, 7, 14, 2, 2, 528, 530, 5, 40, 21, 2, 529, 528, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 7, 14, 2, 2, 532, 536, 5, 34, 18, 2, 533, 535, 5, 24, 13, 2, 534, 533, 3, 2, 2, 2, 535, 538, 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 539, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 539, 540, 5, 20, 11, 2, 540, 556, 3, 2, 2, 2, 541, 543, 7, 15, 2, 2, 542, 544, 7, 25, 2, 2, 543, 542, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 546, 5, 32, 17, 2, 546, 547, 5, 40, 21, 2, 547, 556, 3, 2, 2, 2, 548, 550, 7, 16, 2, 2, 549, 551, 7, 25, 2, 2, 550, 549, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 5, 32, 17, 2, 553, 554, 5, 40, 21, 2, 554, 556, 3, 2, 2, 2, 555, 514, 3, 2, 2, 2, 555, 527, 3, 2, 2, 2, 555, 541, 3, 2, 2, 2, 555, 548, 3, 2, 2, 2, 556, 19, 3, 2, 2, 2, 557, 558, 9, 2, 2, 2, 558, 568, 5, 40, 21, 2, 559, 561, 7, 26, 2, 2, 560, 562, 7, 30, 2, 2, 561, 560, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 564, 5, 32, 17, 2, 564, 565, 5, 40, 21, 2, 565, 568, 3, 2, 2, 2, 566, 568, 7, 28, 2, 2, 567, 557, 3, 2, 2, 2, 567, 559, 3, 2, 2, 2, 567, 566, 3, 2, 2, 2, 568, 21, 3, 2, 2, 2, 569, 570, 7, 6, 2, 2, 570, 571, 5, 32, 17, 2, 571, 572, 5, 40, 21, 2, 572, 600, 3, 2, 2, 2, 573, 574, 7, 26, 2, 2, 574, 575, 5, 32, 17, 2, 575, 576, 5, 40, 21, 2, 576, 600, 3, 2, 2, 2, 577, 579, 7, 15, 2, 2, 578, 580, 7, 25, 2, 2, 579, 578, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 5, 32, 17, 2, 582, 583, 5, 40, 21, 2, 583, 600, 3, 2, 2, 2, 584, 586, 7, 16, 2, 2, 585, 587, 7, 25, 2, 2, 586, 585, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 589, 5, 32, 17, 2, 589, 590, 5, 40, 21, 2, 590, 600, 3, 2, 2, 2, 591, 600, 7, 28, 2, 2, 592, 596, 7, 6, 2, 2, 593, 595, 5, 18, 10, 2, 594, 593, 3, 2, 2, 2, 595, 598, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 600, 3, 2, 2, 2, 598, 596, 3, 2, 2, 2, 599, 569, 3, 2, 2, 2, 599, 573, 3, 2, 2, 2, 599, 577, 3, 2, 2, 2, 599, 584, 3, 2, 2, 2, 599, 591, 3, 2, 2, 2, 599, 592, 3, 2, 2, 2, 600, 23, 3, 2, 2, 2, 601, 602, 7, 27, 2, 2, 602, 614, 5, 38, 20, 2, 603, 604, 7, 17, 2, 2, 604, 614, 5, 40, 21, 2, 605, 606, 7, 18, 2, 2, 606, 614, 5, 38, 20, 2, 607, 608, 7, 19, 2, 2, 608, 614, 5, 38, 20, 2, 609, 610, 7, 20, 2, 2, 610, 614, 5, 38, 20, 2, 611, 612, 7, 21, 2, 2, 612, 614, 5, 40, 21, 2, 613, 601, 3, 2, 2, 2, 613, 603, 3, 2, 2, 2, 613, 605, 3, 2, 2, 2, 613, 607, 3, 2, 2, 2, 613, 609, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 614, 25, 3, 2, 2, 2, 615, 616, 7, 7, 2, 2, 616, 617, 5, 40, 21, 2, 617, 618, 7, 10, 2, 2, 618, 620, 3, 2, 2, 2, 619, 615, 3, 2, 2, 2, 619, 620, 3, 2, 2, 2, 620, 621, 3, 2, 2, 2, 621, 626, 5, 30, 16, 2, 622, 623, 7, 11, 2, 2, 623, 625, 5, 30, 16, 2, 624, 622, 3, 2, 2, 2, 625, 628, 3, 2, 2, 2, 626, 624, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 632, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 629, 631, 5, 28, 15, 2, 630, 629, 3, 2, 2, 2, 631, 634, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 633, 3, 2, 2, 2, 633, 27, 3, 2, 2, 2, 634, 632, 3, 2, 2, 2, 635, 637, 7, 12, 2, 2, 636, 638, 7, 30, 2, 2, 637, 636, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 640, 5, 32, 17, 2, 640, 645, 5, 30, 16, 2, 641, 642, 7, 11, 2, 2, 642, 644, 5, 30, 16, 2, 643, 641, 3, 2, 2, 2, 644, 647, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 660, 3, 2, 2, 2, 647, 645, 3, 2, 2, 2, 648, 649, 7, 13, 2, 2, 649, 650, 5, 40, 21, 2, 650, 654, 7, 5, 2, 2, 651, 653, 5, 28, 15, 2, 652, 651, 3, 2, 2, 2, 653, 656, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 654, 655, 3, 2, 2, 2, 655, 657, 3, 2, 2, 2, 656, 654, 3, 2, 2, 2, 657, 658, 7, 6, 2, 2, 658, 660, 3, 2, 2, 2, 659, 635, 3, 2, 2, 2, 659, 648, 3, 2, 2, 2, 660, 29, 3, 2, 2, 2, 661, 662, 7, 7, 2, 2, 662, 664, 5, 40, 21, 2, 663, 665, 7, 10, 2, 2, 664, 663, 3, 2, 2, 2, 664, 665, 3, 2, 2, 2, 665, 667, 3, 2, 2, 2, 666, 661, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 668, 3, 2, 2, 2, 668, 671, 5, 34, 18, 2, 669, 670, 7, 17, 2, 2, 670, 672, 5, 40, 21, 2, 671, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 31, 3, 2, 2, 2, 673, 674, 5, 40, 21, 2, 674, 33, 3, 2, 2, 2, 675, 676, 5, 38, 20, 2, 676, 35, 3, 2, 2, 2, 677, 681, 5, 40, 21, 2, 678, 681, 5, 46, 24, 2, 679, 681, 5, 38, 20, 2, 680, 677, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 679, 3, 2, 2, 2, 681, 37, 3, 2, 2, 2, 682, 684, 5, 40, 21, 2, 683, 685, 5, 50, 26, 2, 684, 683, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 688, 5, 40, 21, 2, 687, 689, 5, 50, 26, 2, 688, 687, 3, 2, 2, 2, 688, 689, 3, 2, 2, 2, 689, 696, 3, 2, 2, 2, 690, 692, 5, 40, 21, 2, 691, 693, 5, 50, 26, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 696, 3, 2, 2, 2, 694, 696, 5, 46, 24, 2, 695, 682, 3, 2, 2, 2, 695, 690, 3, 2, 2, 2, 695, 694, 3, 2, 2, 2, 696, 39, 3, 2, 2, 2, 697, 706, 5, 42, 22, 2, 698, 701, 5, 42, 22, 2, 699, 700, 7, 67, 2, 2, 700, 702, 5, 42, 22, 2, 701, 699, 3, 2, 2, 2, 702, 703, 3, 2, 2, 2, 703, 701, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 706, 3, 2, 2, 2, 705, 697, 3, 2, 2, 2, 705, 698, 3, 2, 2, 2, 706, 41, 3, 2, 2, 2, 707, 713, 5, 44, 23, 2, 708, 713, 7, 64, 2, 2, 709, 713, 7, 62, 2, 2, 710, 713, 7, 70, 2, 2, 711, 713, 7, 63, 2, 2, 712, 707, 3, 2, 2, 2, 712, 708, 3, 2, 2, 2, 712, 709, 3, 2, 2, 2, 712, 710, 3, 2, 2, 2, 712, 711, 3, 2, 2, 2, 713, 43, 3, 2, 2, 2, 714, 715, 7, 69, 2, 2, 715, 45, 3, 2, 2, 2, 716, 725, 7, 60, 2, 2, 717, 725, 7, 65, 2, 2, 718, 725, 7, 66, 2, 2, 719, 720, 7, 31, 2, 2, 720, 721, 7, 33, 2, 2, 721, 722, 5, 40, 21, 2, 722, 723, 7, 32, 2, 2, 723, 725, 3, 2, 2, 2, 724, 716, 3, 2, 2, 2, 724, 717, 3, 2, 2, 2, 724, 718, 3, 2, 2, 2, 724, 719, 3, 2, 2, 2, 725, 47, 3, 2, 2, 2, 726, 727, 7, 60, 2, 2, 727, 49, 3, 2, 2, 2, 728, 729, 7, 61, 2, 2, 729, 51, 3, 2, 2, 2, 96, 57, 65, 70, 75, 81, 88, 94, 103, 108, 111, 125, 134, 137, 140, 148, 155, 161, 165, 170, 182, 188, 198, 205, 208, 213, 222, 230, 238, 247, 255, 264, 273, 281, 290, 299, 307, 315, 325, 347, 353, 363, 373, 383, 389, 399, 405, 415, 421, 431, 437, 440, 447, 454, 458, 461, 470, 476, 486, 499, 505, 510, 517, 522, 529, 536, 543, 550, 555, 561, 567, 579, 586, 596, 599, 613, 619, 626, 632, 637, 645, 654, 659, 664, 666, 671, 680, 684, 688, 692, 695, 703, 705, 712, 724] \ No newline at end of file diff --git a/server/src/dparser/DParser.tokens b/server/src/dparser/DParser.tokens new file mode 100644 index 0000000..571cd67 --- /dev/null +++ b/server/src/dparser/DParser.tokens @@ -0,0 +1,118 @@ +BLOCK_COMMENT=1 +WHITESPACE=2 +BEGIN=3 +END=4 +IF=5 +UNLESS=6 +WEIGHT=7 +THEN=8 +EQ=9 +EQEQ=10 +BRANCH=11 +PLUS=12 +COPY_TRANS=13 +COPY_TRANS_LATE=14 +DO=15 +JOURNAL=16 +SOLVED_JOURNAL=17 +UNSOLVED_JOURNAL=18 +FLAGS=19 +GOTO=20 +APPENDI=21 +CHAIN2=22 +SAFE=23 +EXTERN=24 +REPLY=25 +EXIT=26 +SAY=27 +IF_FILE_EXISTS=28 +PAREN_OPEN=29 +PAREN_CLOSE=30 +AT=31 +APPEND=32 +APPEND_EARLY=33 +CHAIN=34 +INTERJECT=35 +EXTEND_TOP=36 +ADD_STATE_TRIGGER=37 +ADD_TRANS_TRIGGER=38 +ADD_TRANS_ACTION=39 +REPLACE_TRANS_ACTION=40 +REPLACE_TRANS_TRIGGER=41 +ALTER_TRANS=42 +REPLACE=43 +SET_WEIGHT=44 +REPLACE_STATE_TRIGGER=45 +REPLACE_TRIGGER_TEXT=46 +REPLACE_TRIGGER_TEXT_REGEXP=47 +REPLACE_ACTION_TEXT=48 +REPLACE_ACTION_TEXT_REGEXP=49 +REPLACE_ACTION_TEXT_PROCESS=50 +REPLACE_ACTION_TEXT_PROCESS_REGEXP=51 +REPLACE_SAY=52 +EXTEND_BOTTOM=53 +INTERJECT_COPY_TRANS=54 +INTERJECT_COPY_TRANS2=55 +INTERJECT_COPY_TRANS3=56 +INTERJECT_COPY_TRANS4=57 +SHARP_NUMBER=58 +SOUND_STRING=59 +TILDE_STRING=60 +QUOTE_STRING=61 +PERCENT_STRING=62 +FORCED_STRING_REFERENCE=63 +TRANSLATION_REFERENCE=64 +CONCAT=65 +LINE_COMMENT=66 +IDENTIFIER=67 +LONG_TILDE_STRING=68 +LONG_TILDE_STRING_UNTERMINATED=69 +BLOCK_COMMENT_END=70 +UNTERMINATED_BLOCK_COMMENT=71 +LONG_TILDE_STRING_START=72 +BLOCK_COMMENT_START=73 +'BEGIN'=3 +'END'=4 +'IF'=5 +'UNLESS'=6 +'WEIGHT'=7 +'THEN'=8 +'='=9 +'=='=10 +'BRANCH'=11 +'+'=12 +'COPY_TRANS'=13 +'COPY_TRANS_LATE'=14 +'DO'=15 +'JOURNAL'=16 +'SOLVED_JOURNAL'=17 +'UNSOLVED_JOURNAL'=18 +'FLAGS'=19 +'GOTO'=20 +'APPENDI'=21 +'CHAIN2'=22 +'SAFE'=23 +'EXTERN'=24 +'REPLY'=25 +'EXIT'=26 +'SAY'=27 +'IF_FILE_EXISTS'=28 +'('=29 +')'=30 +'AT'=31 +'APPEND'=32 +'APPEND_EARLY'=33 +'INTERJECT'=35 +'EXTEND_TOP'=36 +'ADD_TRANS_ACTION'=39 +'REPLACE_TRANS_ACTION'=40 +'REPLACE_TRANS_TRIGGER'=41 +'ALTER_TRANS'=42 +'REPLACE'=43 +'SET_WEIGHT'=44 +'REPLACE_TRIGGER_TEXT_REGEXP'=47 +'REPLACE_ACTION_TEXT_REGEXP'=49 +'REPLACE_ACTION_TEXT_PROCESS'=50 +'REPLACE_SAY'=52 +'^'=65 +'*/'=70 diff --git a/server/src/dparser/DParser.ts b/server/src/dparser/DParser.ts new file mode 100644 index 0000000..ce1b3fe --- /dev/null +++ b/server/src/dparser/DParser.ts @@ -0,0 +1,6275 @@ +// Generated from ./src/antlr4/lapdu/DParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; +import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; +import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { RecognitionException } from "antlr4ts/RecognitionException"; +import { RuleContext } from "antlr4ts/RuleContext"; +//import { RuleVersion } from "antlr4ts/RuleVersion"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { Token } from "antlr4ts/Token"; +import { TokenStream } from "antlr4ts/TokenStream"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + +import { DParserListener } from "./DParserListener"; +import { DParserVisitor } from "./DParserVisitor"; + + +export class DParser extends Parser { + public static readonly BLOCK_COMMENT = 1; + public static readonly WHITESPACE = 2; + public static readonly BEGIN = 3; + public static readonly END = 4; + public static readonly IF = 5; + public static readonly UNLESS = 6; + public static readonly WEIGHT = 7; + public static readonly THEN = 8; + public static readonly EQ = 9; + public static readonly EQEQ = 10; + public static readonly BRANCH = 11; + public static readonly PLUS = 12; + public static readonly COPY_TRANS = 13; + public static readonly COPY_TRANS_LATE = 14; + public static readonly DO = 15; + public static readonly JOURNAL = 16; + public static readonly SOLVED_JOURNAL = 17; + public static readonly UNSOLVED_JOURNAL = 18; + public static readonly FLAGS = 19; + public static readonly GOTO = 20; + public static readonly APPENDI = 21; + public static readonly CHAIN2 = 22; + public static readonly SAFE = 23; + public static readonly EXTERN = 24; + public static readonly REPLY = 25; + public static readonly EXIT = 26; + public static readonly SAY = 27; + public static readonly IF_FILE_EXISTS = 28; + public static readonly PAREN_OPEN = 29; + public static readonly PAREN_CLOSE = 30; + public static readonly AT = 31; + public static readonly APPEND = 32; + public static readonly APPEND_EARLY = 33; + public static readonly CHAIN = 34; + public static readonly INTERJECT = 35; + public static readonly EXTEND_TOP = 36; + public static readonly ADD_STATE_TRIGGER = 37; + public static readonly ADD_TRANS_TRIGGER = 38; + public static readonly ADD_TRANS_ACTION = 39; + public static readonly REPLACE_TRANS_ACTION = 40; + public static readonly REPLACE_TRANS_TRIGGER = 41; + public static readonly ALTER_TRANS = 42; + public static readonly REPLACE = 43; + public static readonly SET_WEIGHT = 44; + public static readonly REPLACE_STATE_TRIGGER = 45; + public static readonly REPLACE_TRIGGER_TEXT = 46; + public static readonly REPLACE_TRIGGER_TEXT_REGEXP = 47; + public static readonly REPLACE_ACTION_TEXT = 48; + public static readonly REPLACE_ACTION_TEXT_REGEXP = 49; + public static readonly REPLACE_ACTION_TEXT_PROCESS = 50; + public static readonly REPLACE_ACTION_TEXT_PROCESS_REGEXP = 51; + public static readonly REPLACE_SAY = 52; + public static readonly EXTEND_BOTTOM = 53; + public static readonly INTERJECT_COPY_TRANS = 54; + public static readonly INTERJECT_COPY_TRANS2 = 55; + public static readonly INTERJECT_COPY_TRANS3 = 56; + public static readonly INTERJECT_COPY_TRANS4 = 57; + public static readonly SHARP_NUMBER = 58; + public static readonly SOUND_STRING = 59; + public static readonly TILDE_STRING = 60; + public static readonly QUOTE_STRING = 61; + public static readonly PERCENT_STRING = 62; + public static readonly FORCED_STRING_REFERENCE = 63; + public static readonly TRANSLATION_REFERENCE = 64; + public static readonly CONCAT = 65; + public static readonly LINE_COMMENT = 66; + public static readonly IDENTIFIER = 67; + public static readonly LONG_TILDE_STRING = 68; + public static readonly LONG_TILDE_STRING_UNTERMINATED = 69; + public static readonly BLOCK_COMMENT_END = 70; + public static readonly UNTERMINATED_BLOCK_COMMENT = 71; + public static readonly LONG_TILDE_STRING_START = 72; + public static readonly BLOCK_COMMENT_START = 73; + public static readonly RULE_rootRule = 0; + public static readonly RULE_dFileRule = 1; + public static readonly RULE_dActionRule = 2; + public static readonly RULE_alterTransCommand = 3; + public static readonly RULE_conditionRule = 4; + public static readonly RULE_stateRule = 5; + public static readonly RULE_chain2DlgRule = 6; + public static readonly RULE_chain2ElementRule = 7; + public static readonly RULE_transitionRule = 8; + public static readonly RULE_transitionTargetRule = 9; + public static readonly RULE_chainActionEpilogRule = 10; + public static readonly RULE_transitionFeatureRule = 11; + public static readonly RULE_chainDlgRule = 12; + public static readonly RULE_chainBlockRule = 13; + public static readonly RULE_chainElementRule = 14; + public static readonly RULE_fileRule = 15; + public static readonly RULE_sayTextRule = 16; + public static readonly RULE_traLineRule = 17; + public static readonly RULE_dlgLineRule = 18; + public static readonly RULE_stringRule = 19; + public static readonly RULE_stringLiteralRule = 20; + public static readonly RULE_identifierRule = 21; + public static readonly RULE_referenceRule = 22; + public static readonly RULE_sharpNumberRule = 23; + public static readonly RULE_soundRule = 24; + // tslint:disable:no-trailing-whitespace + public static readonly ruleNames: string[] = [ + "rootRule", "dFileRule", "dActionRule", "alterTransCommand", "conditionRule", + "stateRule", "chain2DlgRule", "chain2ElementRule", "transitionRule", "transitionTargetRule", + "chainActionEpilogRule", "transitionFeatureRule", "chainDlgRule", "chainBlockRule", + "chainElementRule", "fileRule", "sayTextRule", "traLineRule", "dlgLineRule", + "stringRule", "stringLiteralRule", "identifierRule", "referenceRule", + "sharpNumberRule", "soundRule", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, undefined, undefined, "'BEGIN'", "'END'", "'IF'", "'UNLESS'", + "'WEIGHT'", "'THEN'", "'='", "'=='", "'BRANCH'", "'+'", "'COPY_TRANS'", + "'COPY_TRANS_LATE'", "'DO'", "'JOURNAL'", "'SOLVED_JOURNAL'", "'UNSOLVED_JOURNAL'", + "'FLAGS'", "'GOTO'", "'APPENDI'", "'CHAIN2'", "'SAFE'", "'EXTERN'", "'REPLY'", + "'EXIT'", "'SAY'", "'IF_FILE_EXISTS'", "'('", "')'", "'AT'", "'APPEND'", + "'APPEND_EARLY'", undefined, "'INTERJECT'", "'EXTEND_TOP'", undefined, + undefined, "'ADD_TRANS_ACTION'", "'REPLACE_TRANS_ACTION'", "'REPLACE_TRANS_TRIGGER'", + "'ALTER_TRANS'", "'REPLACE'", "'SET_WEIGHT'", undefined, undefined, "'REPLACE_TRIGGER_TEXT_REGEXP'", + undefined, "'REPLACE_ACTION_TEXT_REGEXP'", "'REPLACE_ACTION_TEXT_PROCESS'", + undefined, "'REPLACE_SAY'", undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, "'^'", undefined, undefined, undefined, undefined, "'*/'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, "BLOCK_COMMENT", "WHITESPACE", "BEGIN", "END", "IF", "UNLESS", + "WEIGHT", "THEN", "EQ", "EQEQ", "BRANCH", "PLUS", "COPY_TRANS", "COPY_TRANS_LATE", + "DO", "JOURNAL", "SOLVED_JOURNAL", "UNSOLVED_JOURNAL", "FLAGS", "GOTO", + "APPENDI", "CHAIN2", "SAFE", "EXTERN", "REPLY", "EXIT", "SAY", "IF_FILE_EXISTS", + "PAREN_OPEN", "PAREN_CLOSE", "AT", "APPEND", "APPEND_EARLY", "CHAIN", + "INTERJECT", "EXTEND_TOP", "ADD_STATE_TRIGGER", "ADD_TRANS_TRIGGER", "ADD_TRANS_ACTION", + "REPLACE_TRANS_ACTION", "REPLACE_TRANS_TRIGGER", "ALTER_TRANS", "REPLACE", + "SET_WEIGHT", "REPLACE_STATE_TRIGGER", "REPLACE_TRIGGER_TEXT", "REPLACE_TRIGGER_TEXT_REGEXP", + "REPLACE_ACTION_TEXT", "REPLACE_ACTION_TEXT_REGEXP", "REPLACE_ACTION_TEXT_PROCESS", + "REPLACE_ACTION_TEXT_PROCESS_REGEXP", "REPLACE_SAY", "EXTEND_BOTTOM", + "INTERJECT_COPY_TRANS", "INTERJECT_COPY_TRANS2", "INTERJECT_COPY_TRANS3", + "INTERJECT_COPY_TRANS4", "SHARP_NUMBER", "SOUND_STRING", "TILDE_STRING", + "QUOTE_STRING", "PERCENT_STRING", "FORCED_STRING_REFERENCE", "TRANSLATION_REFERENCE", + "CONCAT", "LINE_COMMENT", "IDENTIFIER", "LONG_TILDE_STRING", "LONG_TILDE_STRING_UNTERMINATED", + "BLOCK_COMMENT_END", "UNTERMINATED_BLOCK_COMMENT", "LONG_TILDE_STRING_START", + "BLOCK_COMMENT_START", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(DParser._LITERAL_NAMES, DParser._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return DParser.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + // @Override + public get grammarFileName(): string { return "DParser.g4"; } + + // @Override + public get ruleNames(): string[] { return DParser.ruleNames; } + + // @Override + public get serializedATN(): string { return DParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { + return new FailedPredicateException(this, predicate, message); + } + + constructor(input: TokenStream) { + super(input); + this._interp = new ParserATNSimulator(DParser._ATN, this); + } + // @RuleVersion(0) + public rootRule(): RootRuleContext { + let _localctx: RootRuleContext = new RootRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 0, DParser.RULE_rootRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 50; + this.dFileRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dFileRule(): DFileRuleContext { + let _localctx: DFileRuleContext = new DFileRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 2, DParser.RULE_dFileRule); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 55; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.BEGIN || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (DParser.APPEND - 32)) | (1 << (DParser.APPEND_EARLY - 32)) | (1 << (DParser.CHAIN - 32)) | (1 << (DParser.INTERJECT - 32)) | (1 << (DParser.EXTEND_TOP - 32)) | (1 << (DParser.ADD_STATE_TRIGGER - 32)) | (1 << (DParser.ADD_TRANS_TRIGGER - 32)) | (1 << (DParser.ADD_TRANS_ACTION - 32)) | (1 << (DParser.REPLACE_TRANS_ACTION - 32)) | (1 << (DParser.REPLACE_TRANS_TRIGGER - 32)) | (1 << (DParser.ALTER_TRANS - 32)) | (1 << (DParser.REPLACE - 32)) | (1 << (DParser.SET_WEIGHT - 32)) | (1 << (DParser.REPLACE_STATE_TRIGGER - 32)) | (1 << (DParser.REPLACE_TRIGGER_TEXT - 32)) | (1 << (DParser.REPLACE_TRIGGER_TEXT_REGEXP - 32)) | (1 << (DParser.REPLACE_ACTION_TEXT - 32)) | (1 << (DParser.REPLACE_ACTION_TEXT_REGEXP - 32)) | (1 << (DParser.REPLACE_ACTION_TEXT_PROCESS - 32)) | (1 << (DParser.REPLACE_ACTION_TEXT_PROCESS_REGEXP - 32)) | (1 << (DParser.REPLACE_SAY - 32)) | (1 << (DParser.EXTEND_BOTTOM - 32)) | (1 << (DParser.INTERJECT_COPY_TRANS - 32)) | (1 << (DParser.INTERJECT_COPY_TRANS2 - 32)) | (1 << (DParser.INTERJECT_COPY_TRANS3 - 32)) | (1 << (DParser.INTERJECT_COPY_TRANS4 - 32)))) !== 0)) { + { + { + this.state = 52; + _localctx._dActionRule = this.dActionRule(); + _localctx._actions.push(_localctx._dActionRule); + } + } + this.state = 57; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 58; + this.match(DParser.EOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dActionRule(): DActionRuleContext { + let _localctx: DActionRuleContext = new DActionRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 4, DParser.RULE_dActionRule); + let _la: number; + try { + this.state = 438; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.BEGIN: + _localctx = new BeginDActionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 60; + this.match(DParser.BEGIN); + this.state = 61; + (_localctx as BeginDActionContext)._dlg = this.fileRule(); + this.state = 63; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + this.state = 62; + (_localctx as BeginDActionContext)._nonPausing = this.stringRule(); + } + } + + this.state = 68; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.APPENDI) | (1 << DParser.CHAIN2))) !== 0)) { + { + { + this.state = 65; + (_localctx as BeginDActionContext)._stateRule = this.stateRule(); + (_localctx as BeginDActionContext)._states.push((_localctx as BeginDActionContext)._stateRule); + } + } + this.state = 70; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.APPEND: + _localctx = new AppendDActionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 71; + this.match(DParser.APPEND); + this.state = 73; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 72; + (_localctx as AppendDActionContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 75; + (_localctx as AppendDActionContext)._dlg = this.fileRule(); + this.state = 79; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.APPENDI) | (1 << DParser.CHAIN2))) !== 0)) { + { + { + this.state = 76; + (_localctx as AppendDActionContext)._stateRule = this.stateRule(); + (_localctx as AppendDActionContext)._states.push((_localctx as AppendDActionContext)._stateRule); + } + } + this.state = 81; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 82; + this.match(DParser.END); + } + break; + case DParser.APPEND_EARLY: + _localctx = new AppendEarlyDActionContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 84; + this.match(DParser.APPEND_EARLY); + this.state = 86; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 85; + (_localctx as AppendEarlyDActionContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 88; + (_localctx as AppendEarlyDActionContext)._dlg = this.fileRule(); + this.state = 92; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.APPENDI) | (1 << DParser.CHAIN2))) !== 0)) { + { + { + this.state = 89; + (_localctx as AppendEarlyDActionContext)._stateRule = this.stateRule(); + (_localctx as AppendEarlyDActionContext)._states.push((_localctx as AppendEarlyDActionContext)._stateRule); + } + } + this.state = 94; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 95; + this.match(DParser.END); + } + break; + case DParser.CHAIN: + _localctx = new ChainDActionContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 97; + this.match(DParser.CHAIN); + this.state = 106; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF) { + { + this.state = 98; + this.match(DParser.IF); + this.state = 101; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.WEIGHT) { + { + this.state = 99; + this.match(DParser.WEIGHT); + this.state = 100; + (_localctx as ChainDActionContext)._weight = this.sharpNumberRule(); + } + } + + this.state = 103; + (_localctx as ChainDActionContext)._trigger = this.stringRule(); + this.state = 104; + this.match(DParser.THEN); + } + } + + this.state = 109; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 108; + (_localctx as ChainDActionContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 111; + (_localctx as ChainDActionContext)._dlg = this.fileRule(); + this.state = 112; + (_localctx as ChainDActionContext)._label = this.stringRule(); + this.state = 113; + (_localctx as ChainDActionContext)._body = this.chainDlgRule(); + this.state = 114; + (_localctx as ChainDActionContext)._epilog = this.chainActionEpilogRule(); + } + break; + case DParser.INTERJECT: + _localctx = new InterjectDActionContext(_localctx); + this.enterOuterAlt(_localctx, 5); + { + this.state = 116; + this.match(DParser.INTERJECT); + this.state = 117; + (_localctx as InterjectDActionContext)._dlg = this.fileRule(); + this.state = 118; + (_localctx as InterjectDActionContext)._label = this.stringRule(); + this.state = 119; + (_localctx as InterjectDActionContext)._globalVar = this.stringRule(); + this.state = 123; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQEQ || _la === DParser.BRANCH) { + { + { + this.state = 120; + (_localctx as InterjectDActionContext)._chainBlockRule = this.chainBlockRule(); + (_localctx as InterjectDActionContext)._blocks.push((_localctx as InterjectDActionContext)._chainBlockRule); + } + } + this.state = 125; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 126; + (_localctx as InterjectDActionContext)._epilog = this.chainActionEpilogRule(); + } + break; + case DParser.INTERJECT_COPY_TRANS: + case DParser.INTERJECT_COPY_TRANS2: + case DParser.INTERJECT_COPY_TRANS3: + case DParser.INTERJECT_COPY_TRANS4: + _localctx = new InterjectCopyTransDActionContext(_localctx); + this.enterOuterAlt(_localctx, 6); + { + this.state = 132; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.INTERJECT_COPY_TRANS: + { + this.state = 128; + (_localctx as InterjectCopyTransDActionContext)._v1 = this.match(DParser.INTERJECT_COPY_TRANS); + } + break; + case DParser.INTERJECT_COPY_TRANS2: + { + this.state = 129; + (_localctx as InterjectCopyTransDActionContext)._v2 = this.match(DParser.INTERJECT_COPY_TRANS2); + } + break; + case DParser.INTERJECT_COPY_TRANS3: + { + this.state = 130; + (_localctx as InterjectCopyTransDActionContext)._v3 = this.match(DParser.INTERJECT_COPY_TRANS3); + } + break; + case DParser.INTERJECT_COPY_TRANS4: + { + this.state = 131; + (_localctx as InterjectCopyTransDActionContext)._v4 = this.match(DParser.INTERJECT_COPY_TRANS4); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 135; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SAFE) { + { + this.state = 134; + (_localctx as InterjectCopyTransDActionContext)._safe = this.match(DParser.SAFE); + } + } + + this.state = 138; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 137; + (_localctx as InterjectCopyTransDActionContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 140; + (_localctx as InterjectCopyTransDActionContext)._dlg = this.fileRule(); + this.state = 141; + (_localctx as InterjectCopyTransDActionContext)._label = this.stringRule(); + this.state = 142; + (_localctx as InterjectCopyTransDActionContext)._globalVar = this.stringRule(); + this.state = 146; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQEQ || _la === DParser.BRANCH) { + { + { + this.state = 143; + (_localctx as InterjectCopyTransDActionContext)._chainBlockRule = this.chainBlockRule(); + (_localctx as InterjectCopyTransDActionContext)._blocks.push((_localctx as InterjectCopyTransDActionContext)._chainBlockRule); + } + } + this.state = 148; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 149; + this.match(DParser.END); + } + break; + case DParser.EXTEND_TOP: + case DParser.EXTEND_BOTTOM: + _localctx = new ExtendTopBottomDActionContext(_localctx); + this.enterOuterAlt(_localctx, 7); + { + this.state = 153; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.EXTEND_TOP: + { + this.state = 151; + (_localctx as ExtendTopBottomDActionContext)._top = this.match(DParser.EXTEND_TOP); + } + break; + case DParser.EXTEND_BOTTOM: + { + this.state = 152; + (_localctx as ExtendTopBottomDActionContext)._bottom = this.match(DParser.EXTEND_BOTTOM); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 155; + (_localctx as ExtendTopBottomDActionContext)._dlg = this.fileRule(); + this.state = 159; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 156; + (_localctx as ExtendTopBottomDActionContext)._stringRule = this.stringRule(); + (_localctx as ExtendTopBottomDActionContext)._states.push((_localctx as ExtendTopBottomDActionContext)._stringRule); + } + } + this.state = 161; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 163; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SHARP_NUMBER) { + { + this.state = 162; + (_localctx as ExtendTopBottomDActionContext)._position = this.sharpNumberRule(); + } + } + + this.state = 168; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.PLUS) | (1 << DParser.COPY_TRANS) | (1 << DParser.COPY_TRANS_LATE))) !== 0)) { + { + { + this.state = 165; + (_localctx as ExtendTopBottomDActionContext)._transitionRule = this.transitionRule(); + (_localctx as ExtendTopBottomDActionContext)._transitions.push((_localctx as ExtendTopBottomDActionContext)._transitionRule); + } + } + this.state = 170; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 171; + this.match(DParser.END); + } + break; + case DParser.ADD_STATE_TRIGGER: + _localctx = new AddStateTriggerDActionContext(_localctx); + this.enterOuterAlt(_localctx, 8); + { + this.state = 173; + this.match(DParser.ADD_STATE_TRIGGER); + this.state = 174; + (_localctx as AddStateTriggerDActionContext)._dlg = this.fileRule(); + this.state = 175; + (_localctx as AddStateTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as AddStateTriggerDActionContext)._labels.push((_localctx as AddStateTriggerDActionContext)._stringRule); + this.state = 176; + (_localctx as AddStateTriggerDActionContext)._trigger = this.stringRule(); + this.state = 180; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 177; + (_localctx as AddStateTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as AddStateTriggerDActionContext)._labels.push((_localctx as AddStateTriggerDActionContext)._stringRule); + } + } + this.state = 182; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 186; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 183; + (_localctx as AddStateTriggerDActionContext)._conditionRule = this.conditionRule(); + (_localctx as AddStateTriggerDActionContext)._conditions.push((_localctx as AddStateTriggerDActionContext)._conditionRule); + } + } + this.state = 188; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.ADD_TRANS_TRIGGER: + _localctx = new AddTransTriggerDActionContext(_localctx); + this.enterOuterAlt(_localctx, 9); + { + this.state = 189; + this.match(DParser.ADD_TRANS_TRIGGER); + this.state = 190; + (_localctx as AddTransTriggerDActionContext)._dlg = this.fileRule(); + this.state = 191; + (_localctx as AddTransTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as AddTransTriggerDActionContext)._labels.push((_localctx as AddTransTriggerDActionContext)._stringRule); + this.state = 192; + (_localctx as AddTransTriggerDActionContext)._trigger = this.stringRule(); + this.state = 196; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 193; + (_localctx as AddTransTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as AddTransTriggerDActionContext)._labels.push((_localctx as AddTransTriggerDActionContext)._stringRule); + } + } + this.state = 198; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 206; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.DO) { + { + this.state = 199; + this.match(DParser.DO); + this.state = 203; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 200; + (_localctx as AddTransTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as AddTransTriggerDActionContext)._tras.push((_localctx as AddTransTriggerDActionContext)._stringRule); + } + } + this.state = 205; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 211; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 208; + (_localctx as AddTransTriggerDActionContext)._conditionRule = this.conditionRule(); + (_localctx as AddTransTriggerDActionContext)._conditions.push((_localctx as AddTransTriggerDActionContext)._conditionRule); + } + } + this.state = 213; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.ADD_TRANS_ACTION: + _localctx = new AddTransActionDActionContext(_localctx); + this.enterOuterAlt(_localctx, 10); + { + this.state = 214; + this.match(DParser.ADD_TRANS_ACTION); + this.state = 215; + (_localctx as AddTransActionDActionContext)._dlg = this.fileRule(); + this.state = 216; + this.match(DParser.BEGIN); + this.state = 220; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 217; + (_localctx as AddTransActionDActionContext)._stringRule = this.stringRule(); + (_localctx as AddTransActionDActionContext)._labels.push((_localctx as AddTransActionDActionContext)._stringRule); + } + } + this.state = 222; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 223; + this.match(DParser.END); + this.state = 224; + this.match(DParser.BEGIN); + this.state = 228; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 225; + (_localctx as AddTransActionDActionContext)._stringRule = this.stringRule(); + (_localctx as AddTransActionDActionContext)._tras.push((_localctx as AddTransActionDActionContext)._stringRule); + } + } + this.state = 230; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 231; + this.match(DParser.END); + this.state = 232; + (_localctx as AddTransActionDActionContext)._action = this.stringRule(); + this.state = 236; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 233; + (_localctx as AddTransActionDActionContext)._conditionRule = this.conditionRule(); + (_localctx as AddTransActionDActionContext)._conditions.push((_localctx as AddTransActionDActionContext)._conditionRule); + } + } + this.state = 238; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_TRANS_ACTION: + _localctx = new ReplaceTransActionDActionContext(_localctx); + this.enterOuterAlt(_localctx, 11); + { + this.state = 239; + this.match(DParser.REPLACE_TRANS_ACTION); + this.state = 240; + (_localctx as ReplaceTransActionDActionContext)._dlg = this.fileRule(); + this.state = 241; + this.match(DParser.BEGIN); + this.state = 245; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 242; + (_localctx as ReplaceTransActionDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceTransActionDActionContext)._labels.push((_localctx as ReplaceTransActionDActionContext)._stringRule); + } + } + this.state = 247; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 248; + this.match(DParser.END); + this.state = 249; + this.match(DParser.BEGIN); + this.state = 253; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 250; + (_localctx as ReplaceTransActionDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceTransActionDActionContext)._tras.push((_localctx as ReplaceTransActionDActionContext)._stringRule); + } + } + this.state = 255; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 256; + this.match(DParser.END); + this.state = 257; + (_localctx as ReplaceTransActionDActionContext)._oldText = this.stringRule(); + this.state = 258; + (_localctx as ReplaceTransActionDActionContext)._newText = this.stringRule(); + this.state = 262; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 259; + (_localctx as ReplaceTransActionDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceTransActionDActionContext)._conditions.push((_localctx as ReplaceTransActionDActionContext)._conditionRule); + } + } + this.state = 264; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_TRANS_TRIGGER: + _localctx = new ReplaceTransTriggerDActionContext(_localctx); + this.enterOuterAlt(_localctx, 12); + { + this.state = 265; + this.match(DParser.REPLACE_TRANS_TRIGGER); + this.state = 266; + (_localctx as ReplaceTransTriggerDActionContext)._dlg = this.fileRule(); + this.state = 267; + this.match(DParser.BEGIN); + this.state = 271; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 268; + (_localctx as ReplaceTransTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceTransTriggerDActionContext)._labels.push((_localctx as ReplaceTransTriggerDActionContext)._stringRule); + } + } + this.state = 273; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 274; + this.match(DParser.END); + this.state = 275; + this.match(DParser.BEGIN); + this.state = 279; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 276; + (_localctx as ReplaceTransTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceTransTriggerDActionContext)._tras.push((_localctx as ReplaceTransTriggerDActionContext)._stringRule); + } + } + this.state = 281; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 282; + this.match(DParser.END); + this.state = 283; + (_localctx as ReplaceTransTriggerDActionContext)._oldText = this.stringRule(); + this.state = 284; + (_localctx as ReplaceTransTriggerDActionContext)._newText = this.stringRule(); + this.state = 288; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 285; + (_localctx as ReplaceTransTriggerDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceTransTriggerDActionContext)._conditions.push((_localctx as ReplaceTransTriggerDActionContext)._conditionRule); + } + } + this.state = 290; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.ALTER_TRANS: + _localctx = new AlterTransDActionContext(_localctx); + this.enterOuterAlt(_localctx, 13); + { + this.state = 291; + this.match(DParser.ALTER_TRANS); + this.state = 292; + (_localctx as AlterTransDActionContext)._dlg = this.fileRule(); + this.state = 293; + this.match(DParser.BEGIN); + this.state = 297; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 294; + (_localctx as AlterTransDActionContext)._stringRule = this.stringRule(); + (_localctx as AlterTransDActionContext)._labels.push((_localctx as AlterTransDActionContext)._stringRule); + } + } + this.state = 299; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 300; + this.match(DParser.END); + this.state = 301; + this.match(DParser.BEGIN); + this.state = 305; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 302; + (_localctx as AlterTransDActionContext)._stringRule = this.stringRule(); + (_localctx as AlterTransDActionContext)._tras.push((_localctx as AlterTransDActionContext)._stringRule); + } + } + this.state = 307; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 308; + this.match(DParser.END); + this.state = 309; + this.match(DParser.BEGIN); + this.state = 313; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 310; + (_localctx as AlterTransDActionContext)._alterTransCommand = this.alterTransCommand(); + (_localctx as AlterTransDActionContext)._changes.push((_localctx as AlterTransDActionContext)._alterTransCommand); + } + } + this.state = 315; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 316; + this.match(DParser.END); + } + break; + case DParser.REPLACE: + _localctx = new ReplaceDActionContext(_localctx); + this.enterOuterAlt(_localctx, 14); + { + this.state = 318; + this.match(DParser.REPLACE); + this.state = 319; + (_localctx as ReplaceDActionContext)._dlg = this.fileRule(); + this.state = 323; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.APPENDI) | (1 << DParser.CHAIN2))) !== 0)) { + { + { + this.state = 320; + (_localctx as ReplaceDActionContext)._stateRule = this.stateRule(); + (_localctx as ReplaceDActionContext)._newStates.push((_localctx as ReplaceDActionContext)._stateRule); + } + } + this.state = 325; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 326; + this.match(DParser.END); + } + break; + case DParser.SET_WEIGHT: + _localctx = new SetWeightDActionContext(_localctx); + this.enterOuterAlt(_localctx, 15); + { + this.state = 328; + this.match(DParser.SET_WEIGHT); + this.state = 329; + (_localctx as SetWeightDActionContext)._dlg = this.fileRule(); + this.state = 330; + (_localctx as SetWeightDActionContext)._label = this.stringRule(); + this.state = 331; + (_localctx as SetWeightDActionContext)._weight = this.sharpNumberRule(); + } + break; + case DParser.REPLACE_SAY: + _localctx = new ReplaceSayDActionContext(_localctx); + this.enterOuterAlt(_localctx, 16); + { + this.state = 333; + this.match(DParser.REPLACE_SAY); + this.state = 334; + (_localctx as ReplaceSayDActionContext)._dlg = this.fileRule(); + this.state = 335; + (_localctx as ReplaceSayDActionContext)._label = this.stringRule(); + this.state = 336; + (_localctx as ReplaceSayDActionContext)._newVal = this.sayTextRule(); + } + break; + case DParser.REPLACE_STATE_TRIGGER: + _localctx = new ReplaceStateTriggerDActionContext(_localctx); + this.enterOuterAlt(_localctx, 17); + { + this.state = 338; + this.match(DParser.REPLACE_STATE_TRIGGER); + this.state = 339; + (_localctx as ReplaceStateTriggerDActionContext)._dlg = this.fileRule(); + this.state = 340; + (_localctx as ReplaceStateTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceStateTriggerDActionContext)._labels.push((_localctx as ReplaceStateTriggerDActionContext)._stringRule); + this.state = 341; + (_localctx as ReplaceStateTriggerDActionContext)._trigger = this.stringRule(); + this.state = 345; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 342; + (_localctx as ReplaceStateTriggerDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceStateTriggerDActionContext)._labels.push((_localctx as ReplaceStateTriggerDActionContext)._stringRule); + } + } + this.state = 347; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 351; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 348; + (_localctx as ReplaceStateTriggerDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceStateTriggerDActionContext)._conditions.push((_localctx as ReplaceStateTriggerDActionContext)._conditionRule); + } + } + this.state = 353; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_TRIGGER_TEXT: + _localctx = new ReplaceTriggerTextDActionContext(_localctx); + this.enterOuterAlt(_localctx, 18); + { + this.state = 354; + this.match(DParser.REPLACE_TRIGGER_TEXT); + this.state = 355; + (_localctx as ReplaceTriggerTextDActionContext)._dlg = this.fileRule(); + this.state = 356; + (_localctx as ReplaceTriggerTextDActionContext)._oldText = this.stringRule(); + this.state = 357; + (_localctx as ReplaceTriggerTextDActionContext)._newText = this.stringRule(); + this.state = 361; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 358; + (_localctx as ReplaceTriggerTextDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceTriggerTextDActionContext)._conditions.push((_localctx as ReplaceTriggerTextDActionContext)._conditionRule); + } + } + this.state = 363; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_TRIGGER_TEXT_REGEXP: + _localctx = new ReplaceTriggerTextRegexpDActionContext(_localctx); + this.enterOuterAlt(_localctx, 19); + { + this.state = 364; + this.match(DParser.REPLACE_TRIGGER_TEXT_REGEXP); + this.state = 365; + (_localctx as ReplaceTriggerTextRegexpDActionContext)._dlgRegexp = this.stringRule(); + this.state = 366; + (_localctx as ReplaceTriggerTextRegexpDActionContext)._oldText = this.stringRule(); + this.state = 367; + (_localctx as ReplaceTriggerTextRegexpDActionContext)._newText = this.stringRule(); + this.state = 371; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 368; + (_localctx as ReplaceTriggerTextRegexpDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceTriggerTextRegexpDActionContext)._conditions.push((_localctx as ReplaceTriggerTextRegexpDActionContext)._conditionRule); + } + } + this.state = 373; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_ACTION_TEXT: + _localctx = new ReplaceActionTextDActionContext(_localctx); + this.enterOuterAlt(_localctx, 20); + { + this.state = 374; + this.match(DParser.REPLACE_ACTION_TEXT); + this.state = 375; + (_localctx as ReplaceActionTextDActionContext)._fileRule = this.fileRule(); + (_localctx as ReplaceActionTextDActionContext)._dlgs.push((_localctx as ReplaceActionTextDActionContext)._fileRule); + this.state = 376; + (_localctx as ReplaceActionTextDActionContext)._oldText = this.stringRule(); + this.state = 377; + (_localctx as ReplaceActionTextDActionContext)._newText = this.stringRule(); + this.state = 381; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 378; + (_localctx as ReplaceActionTextDActionContext)._fileRule = this.fileRule(); + (_localctx as ReplaceActionTextDActionContext)._dlgs.push((_localctx as ReplaceActionTextDActionContext)._fileRule); + } + } + this.state = 383; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 387; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 384; + (_localctx as ReplaceActionTextDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceActionTextDActionContext)._conditions.push((_localctx as ReplaceActionTextDActionContext)._conditionRule); + } + } + this.state = 389; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_ACTION_TEXT_REGEXP: + _localctx = new ReplaceActionTextRegexpDActionContext(_localctx); + this.enterOuterAlt(_localctx, 21); + { + this.state = 390; + this.match(DParser.REPLACE_ACTION_TEXT_REGEXP); + this.state = 391; + (_localctx as ReplaceActionTextRegexpDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceActionTextRegexpDActionContext)._dlgRegexps.push((_localctx as ReplaceActionTextRegexpDActionContext)._stringRule); + this.state = 392; + (_localctx as ReplaceActionTextRegexpDActionContext)._oldText = this.stringRule(); + this.state = 393; + (_localctx as ReplaceActionTextRegexpDActionContext)._newText = this.stringRule(); + this.state = 397; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 394; + (_localctx as ReplaceActionTextRegexpDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceActionTextRegexpDActionContext)._dlgRegexps.push((_localctx as ReplaceActionTextRegexpDActionContext)._stringRule); + } + } + this.state = 399; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 403; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 400; + (_localctx as ReplaceActionTextRegexpDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceActionTextRegexpDActionContext)._conditions.push((_localctx as ReplaceActionTextRegexpDActionContext)._conditionRule); + } + } + this.state = 405; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_ACTION_TEXT_PROCESS: + _localctx = new ReplaceActionTextProcessDActionContext(_localctx); + this.enterOuterAlt(_localctx, 22); + { + this.state = 406; + this.match(DParser.REPLACE_ACTION_TEXT_PROCESS); + this.state = 407; + (_localctx as ReplaceActionTextProcessDActionContext)._fileRule = this.fileRule(); + (_localctx as ReplaceActionTextProcessDActionContext)._dlgs.push((_localctx as ReplaceActionTextProcessDActionContext)._fileRule); + this.state = 408; + (_localctx as ReplaceActionTextProcessDActionContext)._oldText = this.stringRule(); + this.state = 409; + (_localctx as ReplaceActionTextProcessDActionContext)._newText = this.stringRule(); + this.state = 413; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 410; + (_localctx as ReplaceActionTextProcessDActionContext)._fileRule = this.fileRule(); + (_localctx as ReplaceActionTextProcessDActionContext)._dlgs.push((_localctx as ReplaceActionTextProcessDActionContext)._fileRule); + } + } + this.state = 415; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 419; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 416; + (_localctx as ReplaceActionTextProcessDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceActionTextProcessDActionContext)._conditions.push((_localctx as ReplaceActionTextProcessDActionContext)._conditionRule); + } + } + this.state = 421; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.REPLACE_ACTION_TEXT_PROCESS_REGEXP: + _localctx = new ReplaceActionTextProcessRegexpDActionContext(_localctx); + this.enterOuterAlt(_localctx, 23); + { + this.state = 422; + this.match(DParser.REPLACE_ACTION_TEXT_PROCESS_REGEXP); + this.state = 423; + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._dlgRegexps.push((_localctx as ReplaceActionTextProcessRegexpDActionContext)._stringRule); + this.state = 424; + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._oldText = this.stringRule(); + this.state = 425; + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._newText = this.stringRule(); + this.state = 429; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + { + this.state = 426; + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._stringRule = this.stringRule(); + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._dlgRegexps.push((_localctx as ReplaceActionTextProcessRegexpDActionContext)._stringRule); + } + } + this.state = 431; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 435; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.IF || _la === DParser.UNLESS) { + { + { + this.state = 432; + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._conditionRule = this.conditionRule(); + (_localctx as ReplaceActionTextProcessRegexpDActionContext)._conditions.push((_localctx as ReplaceActionTextProcessRegexpDActionContext)._conditionRule); + } + } + this.state = 437; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public alterTransCommand(): AlterTransCommandContext { + let _localctx: AlterTransCommandContext = new AlterTransCommandContext(this._ctx, this.state); + this.enterRule(_localctx, 6, DParser.RULE_alterTransCommand); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 440; + _localctx._type = this.stringRule(); + this.state = 441; + _localctx._newVal = this.stringRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public conditionRule(): ConditionRuleContext { + let _localctx: ConditionRuleContext = new ConditionRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 8, DParser.RULE_conditionRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 445; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.IF: + { + this.state = 443; + _localctx._isIf = this.match(DParser.IF); + } + break; + case DParser.UNLESS: + { + this.state = 444; + _localctx._isUnless = this.match(DParser.UNLESS); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 447; + _localctx._predicate = this.stringRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public stateRule(): StateRuleContext { + let _localctx: StateRuleContext = new StateRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 10, DParser.RULE_stateRule); + let _la: number; + try { + this.state = 497; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.IF: + _localctx = new IfThenStateContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 449; + this.match(DParser.IF); + this.state = 452; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.WEIGHT) { + { + this.state = 450; + this.match(DParser.WEIGHT); + this.state = 451; + (_localctx as IfThenStateContext)._weight = this.sharpNumberRule(); + } + } + + this.state = 454; + (_localctx as IfThenStateContext)._trigger = this.stringRule(); + this.state = 456; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.THEN) { + { + this.state = 455; + this.match(DParser.THEN); + } + } + + this.state = 459; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.BEGIN) { + { + this.state = 458; + this.match(DParser.BEGIN); + } + } + + this.state = 461; + (_localctx as IfThenStateContext)._label = this.stringRule(); + this.state = 462; + this.match(DParser.SAY); + this.state = 463; + (_localctx as IfThenStateContext)._sayTextRule = this.sayTextRule(); + (_localctx as IfThenStateContext)._lines.push((_localctx as IfThenStateContext)._sayTextRule); + this.state = 468; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQ) { + { + { + this.state = 464; + this.match(DParser.EQ); + this.state = 465; + (_localctx as IfThenStateContext)._sayTextRule = this.sayTextRule(); + (_localctx as IfThenStateContext)._lines.push((_localctx as IfThenStateContext)._sayTextRule); + } + } + this.state = 470; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 474; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.PLUS) | (1 << DParser.COPY_TRANS) | (1 << DParser.COPY_TRANS_LATE))) !== 0)) { + { + { + this.state = 471; + (_localctx as IfThenStateContext)._transitionRule = this.transitionRule(); + (_localctx as IfThenStateContext)._transitions.push((_localctx as IfThenStateContext)._transitionRule); + } + } + this.state = 476; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 477; + this.match(DParser.END); + } + break; + case DParser.APPENDI: + _localctx = new AppendiStateContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 479; + this.match(DParser.APPENDI); + this.state = 480; + (_localctx as AppendiStateContext)._dlg = this.fileRule(); + this.state = 484; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.APPENDI) | (1 << DParser.CHAIN2))) !== 0)) { + { + { + this.state = 481; + (_localctx as AppendiStateContext)._stateRule = this.stateRule(); + (_localctx as AppendiStateContext)._states.push((_localctx as AppendiStateContext)._stateRule); + } + } + this.state = 486; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 487; + this.match(DParser.END); + } + break; + case DParser.CHAIN2: + _localctx = new Chain2StateContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 489; + this.match(DParser.CHAIN2); + this.state = 490; + (_localctx as Chain2StateContext)._dlg = this.fileRule(); + this.state = 491; + (_localctx as Chain2StateContext)._entryLabel = this.stringRule(); + this.state = 492; + (_localctx as Chain2StateContext)._body = this.chain2DlgRule(); + this.state = 493; + this.match(DParser.END); + this.state = 494; + (_localctx as Chain2StateContext)._exitDlg = this.fileRule(); + this.state = 495; + (_localctx as Chain2StateContext)._exitLabel = this.stringRule(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chain2DlgRule(): Chain2DlgRuleContext { + let _localctx: Chain2DlgRuleContext = new Chain2DlgRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 12, DParser.RULE_chain2DlgRule); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 499; + _localctx._initialLine = this.chainElementRule(); + this.state = 503; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQ || _la === DParser.EQEQ) { + { + { + this.state = 500; + _localctx._chain2ElementRule = this.chain2ElementRule(); + _localctx._restLines.push(_localctx._chain2ElementRule); + } + } + this.state = 505; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chain2ElementRule(): Chain2ElementRuleContext { + let _localctx: Chain2ElementRuleContext = new Chain2ElementRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 14, DParser.RULE_chain2ElementRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 508; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.EQEQ: + { + this.state = 506; + _localctx._operator = this.match(DParser.EQEQ); + } + break; + case DParser.EQ: + { + this.state = 507; + _localctx._operator = this.match(DParser.EQ); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 510; + _localctx._line = this.chainElementRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public transitionRule(): TransitionRuleContext { + let _localctx: TransitionRuleContext = new TransitionRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 16, DParser.RULE_transitionRule); + let _la: number; + try { + this.state = 553; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.IF: + _localctx = new IfThenTransitionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 512; + this.match(DParser.IF); + this.state = 513; + (_localctx as IfThenTransitionContext)._trigger = this.stringRule(); + this.state = 515; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.THEN) { + { + this.state = 514; + this.match(DParser.THEN); + } + } + + this.state = 520; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.DO) | (1 << DParser.JOURNAL) | (1 << DParser.SOLVED_JOURNAL) | (1 << DParser.UNSOLVED_JOURNAL) | (1 << DParser.FLAGS) | (1 << DParser.REPLY))) !== 0)) { + { + { + this.state = 517; + (_localctx as IfThenTransitionContext)._transitionFeatureRule = this.transitionFeatureRule(); + (_localctx as IfThenTransitionContext)._features.push((_localctx as IfThenTransitionContext)._transitionFeatureRule); + } + } + this.state = 522; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 523; + (_localctx as IfThenTransitionContext)._transitionTargetRule = this.transitionTargetRule(); + (_localctx as IfThenTransitionContext)._out.push((_localctx as IfThenTransitionContext)._transitionTargetRule); + } + break; + case DParser.PLUS: + _localctx = new ReplyTransitionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 525; + this.match(DParser.PLUS); + this.state = 527; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 60)) & ~0x1F) === 0 && ((1 << (_la - 60)) & ((1 << (DParser.TILDE_STRING - 60)) | (1 << (DParser.QUOTE_STRING - 60)) | (1 << (DParser.PERCENT_STRING - 60)) | (1 << (DParser.IDENTIFIER - 60)) | (1 << (DParser.LONG_TILDE_STRING - 60)))) !== 0)) { + { + this.state = 526; + (_localctx as ReplyTransitionContext)._trigger = this.stringRule(); + } + } + + this.state = 529; + this.match(DParser.PLUS); + this.state = 530; + (_localctx as ReplyTransitionContext)._reply = this.sayTextRule(); + this.state = 534; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.DO) | (1 << DParser.JOURNAL) | (1 << DParser.SOLVED_JOURNAL) | (1 << DParser.UNSOLVED_JOURNAL) | (1 << DParser.FLAGS) | (1 << DParser.REPLY))) !== 0)) { + { + { + this.state = 531; + (_localctx as ReplyTransitionContext)._transitionFeatureRule = this.transitionFeatureRule(); + (_localctx as ReplyTransitionContext)._features.push((_localctx as ReplyTransitionContext)._transitionFeatureRule); + } + } + this.state = 536; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 537; + (_localctx as ReplyTransitionContext)._transitionTargetRule = this.transitionTargetRule(); + (_localctx as ReplyTransitionContext)._out.push((_localctx as ReplyTransitionContext)._transitionTargetRule); + } + break; + case DParser.COPY_TRANS: + _localctx = new CopyTransTransitionContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 539; + this.match(DParser.COPY_TRANS); + this.state = 541; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SAFE) { + { + this.state = 540; + (_localctx as CopyTransTransitionContext)._safe = this.match(DParser.SAFE); + } + } + + this.state = 543; + (_localctx as CopyTransTransitionContext)._dlg = this.fileRule(); + this.state = 544; + (_localctx as CopyTransTransitionContext)._label = this.stringRule(); + } + break; + case DParser.COPY_TRANS_LATE: + _localctx = new CopyTransLateTransitionContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 546; + this.match(DParser.COPY_TRANS_LATE); + this.state = 548; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SAFE) { + { + this.state = 547; + (_localctx as CopyTransLateTransitionContext)._safe = this.match(DParser.SAFE); + } + } + + this.state = 550; + (_localctx as CopyTransLateTransitionContext)._dlg = this.fileRule(); + this.state = 551; + (_localctx as CopyTransLateTransitionContext)._label = this.stringRule(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public transitionTargetRule(): TransitionTargetRuleContext { + let _localctx: TransitionTargetRuleContext = new TransitionTargetRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 18, DParser.RULE_transitionTargetRule); + let _la: number; + try { + this.state = 565; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.PLUS: + case DParser.GOTO: + _localctx = new GotoTransitionTargetContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 555; + _la = this._input.LA(1); + if (!(_la === DParser.PLUS || _la === DParser.GOTO)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 556; + (_localctx as GotoTransitionTargetContext)._label = this.stringRule(); + } + break; + case DParser.EXTERN: + _localctx = new ExternTransitionTargetContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 557; + this.match(DParser.EXTERN); + this.state = 559; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 558; + (_localctx as ExternTransitionTargetContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 561; + (_localctx as ExternTransitionTargetContext)._dlg = this.fileRule(); + this.state = 562; + (_localctx as ExternTransitionTargetContext)._label = this.stringRule(); + } + break; + case DParser.EXIT: + _localctx = new ExitTransitionTargetContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 564; + this.match(DParser.EXIT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chainActionEpilogRule(): ChainActionEpilogRuleContext { + let _localctx: ChainActionEpilogRuleContext = new ChainActionEpilogRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 20, DParser.RULE_chainActionEpilogRule); + let _la: number; + try { + this.state = 597; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 73, this._ctx) ) { + case 1: + _localctx = new EndChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 567; + this.match(DParser.END); + this.state = 568; + (_localctx as EndChainActionEpilogContext)._dlg = this.fileRule(); + this.state = 569; + (_localctx as EndChainActionEpilogContext)._label = this.stringRule(); + } + break; + + case 2: + _localctx = new ExternChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 571; + this.match(DParser.EXTERN); + this.state = 572; + (_localctx as ExternChainActionEpilogContext)._dlg = this.fileRule(); + this.state = 573; + (_localctx as ExternChainActionEpilogContext)._label = this.stringRule(); + } + break; + + case 3: + _localctx = new CopyTransChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 575; + this.match(DParser.COPY_TRANS); + this.state = 577; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SAFE) { + { + this.state = 576; + (_localctx as CopyTransChainActionEpilogContext)._safe = this.match(DParser.SAFE); + } + } + + this.state = 579; + (_localctx as CopyTransChainActionEpilogContext)._dlg = this.fileRule(); + this.state = 580; + (_localctx as CopyTransChainActionEpilogContext)._label = this.stringRule(); + } + break; + + case 4: + _localctx = new CopyTransLateChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 582; + this.match(DParser.COPY_TRANS_LATE); + this.state = 584; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SAFE) { + { + this.state = 583; + (_localctx as CopyTransLateChainActionEpilogContext)._safe = this.match(DParser.SAFE); + } + } + + this.state = 586; + (_localctx as CopyTransLateChainActionEpilogContext)._dlg = this.fileRule(); + this.state = 587; + (_localctx as CopyTransLateChainActionEpilogContext)._label = this.stringRule(); + } + break; + + case 5: + _localctx = new ExitChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 5); + { + this.state = 589; + this.match(DParser.EXIT); + } + break; + + case 6: + _localctx = new EndWithTransitionsChainActionEpilogContext(_localctx); + this.enterOuterAlt(_localctx, 6); + { + this.state = 590; + this.match(DParser.END); + this.state = 594; + this._errHandler.sync(this); + _la = this._input.LA(1); + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << DParser.IF) | (1 << DParser.PLUS) | (1 << DParser.COPY_TRANS) | (1 << DParser.COPY_TRANS_LATE))) !== 0)) { + { + { + this.state = 591; + (_localctx as EndWithTransitionsChainActionEpilogContext)._transitionRule = this.transitionRule(); + (_localctx as EndWithTransitionsChainActionEpilogContext)._transitions.push((_localctx as EndWithTransitionsChainActionEpilogContext)._transitionRule); + } + } + this.state = 596; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public transitionFeatureRule(): TransitionFeatureRuleContext { + let _localctx: TransitionFeatureRuleContext = new TransitionFeatureRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 22, DParser.RULE_transitionFeatureRule); + try { + this.state = 611; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.REPLY: + _localctx = new ReplyTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 599; + this.match(DParser.REPLY); + this.state = 600; + (_localctx as ReplyTransitionFeatureContext)._line = this.dlgLineRule(); + } + break; + case DParser.DO: + _localctx = new DoTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 601; + this.match(DParser.DO); + this.state = 602; + (_localctx as DoTransitionFeatureContext)._action = this.stringRule(); + } + break; + case DParser.JOURNAL: + _localctx = new JournalTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 603; + this.match(DParser.JOURNAL); + this.state = 604; + (_localctx as JournalTransitionFeatureContext)._entry = this.dlgLineRule(); + } + break; + case DParser.SOLVED_JOURNAL: + _localctx = new SolvedJournalTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 4); + { + this.state = 605; + this.match(DParser.SOLVED_JOURNAL); + this.state = 606; + (_localctx as SolvedJournalTransitionFeatureContext)._entry = this.dlgLineRule(); + } + break; + case DParser.UNSOLVED_JOURNAL: + _localctx = new UnsolvedJournalTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 5); + { + this.state = 607; + this.match(DParser.UNSOLVED_JOURNAL); + this.state = 608; + (_localctx as UnsolvedJournalTransitionFeatureContext)._entry = this.dlgLineRule(); + } + break; + case DParser.FLAGS: + _localctx = new FlagsTransitionFeatureContext(_localctx); + this.enterOuterAlt(_localctx, 6); + { + this.state = 609; + this.match(DParser.FLAGS); + this.state = 610; + (_localctx as FlagsTransitionFeatureContext)._flags = this.stringRule(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chainDlgRule(): ChainDlgRuleContext { + let _localctx: ChainDlgRuleContext = new ChainDlgRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 24, DParser.RULE_chainDlgRule); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 617; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 75, this._ctx) ) { + case 1: + { + this.state = 613; + this.match(DParser.IF); + this.state = 614; + _localctx._trigger = this.stringRule(); + this.state = 615; + this.match(DParser.THEN); + } + break; + } + this.state = 619; + _localctx._chainElementRule = this.chainElementRule(); + _localctx._initialSpeakerLines.push(_localctx._chainElementRule); + this.state = 624; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQ) { + { + { + this.state = 620; + this.match(DParser.EQ); + this.state = 621; + _localctx._chainElementRule = this.chainElementRule(); + _localctx._initialSpeakerLines.push(_localctx._chainElementRule); + } + } + this.state = 626; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 630; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQEQ || _la === DParser.BRANCH) { + { + { + this.state = 627; + _localctx._chainBlockRule = this.chainBlockRule(); + _localctx._blocks.push(_localctx._chainBlockRule); + } + } + this.state = 632; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chainBlockRule(): ChainBlockRuleContext { + let _localctx: ChainBlockRuleContext = new ChainBlockRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 26, DParser.RULE_chainBlockRule); + let _la: number; + try { + this.state = 657; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.EQEQ: + _localctx = new MonologChainBlockContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 633; + this.match(DParser.EQEQ); + this.state = 635; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF_FILE_EXISTS) { + { + this.state = 634; + (_localctx as MonologChainBlockContext)._ifExists = this.match(DParser.IF_FILE_EXISTS); + } + } + + this.state = 637; + (_localctx as MonologChainBlockContext)._dlg = this.fileRule(); + this.state = 638; + (_localctx as MonologChainBlockContext)._chainElementRule = this.chainElementRule(); + (_localctx as MonologChainBlockContext)._elements.push((_localctx as MonologChainBlockContext)._chainElementRule); + this.state = 643; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQ) { + { + { + this.state = 639; + this.match(DParser.EQ); + this.state = 640; + (_localctx as MonologChainBlockContext)._chainElementRule = this.chainElementRule(); + (_localctx as MonologChainBlockContext)._elements.push((_localctx as MonologChainBlockContext)._chainElementRule); + } + } + this.state = 645; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case DParser.BRANCH: + _localctx = new BranchChainBlockContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 646; + this.match(DParser.BRANCH); + this.state = 647; + (_localctx as BranchChainBlockContext)._trigger = this.stringRule(); + this.state = 648; + this.match(DParser.BEGIN); + this.state = 652; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === DParser.EQEQ || _la === DParser.BRANCH) { + { + { + this.state = 649; + (_localctx as BranchChainBlockContext)._chainBlockRule = this.chainBlockRule(); + (_localctx as BranchChainBlockContext)._blocks.push((_localctx as BranchChainBlockContext)._chainBlockRule); + } + } + this.state = 654; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 655; + this.match(DParser.END); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public chainElementRule(): ChainElementRuleContext { + let _localctx: ChainElementRuleContext = new ChainElementRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 28, DParser.RULE_chainElementRule); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 664; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.IF) { + { + this.state = 659; + this.match(DParser.IF); + this.state = 660; + _localctx._trigger = this.stringRule(); + this.state = 662; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.THEN) { + { + this.state = 661; + this.match(DParser.THEN); + } + } + + } + } + + this.state = 666; + _localctx._line = this.sayTextRule(); + this.state = 669; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.DO) { + { + this.state = 667; + this.match(DParser.DO); + this.state = 668; + _localctx._action = this.stringRule(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public fileRule(): FileRuleContext { + let _localctx: FileRuleContext = new FileRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 30, DParser.RULE_fileRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 671; + this.stringRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sayTextRule(): SayTextRuleContext { + let _localctx: SayTextRuleContext = new SayTextRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 32, DParser.RULE_sayTextRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 673; + this.dlgLineRule(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public traLineRule(): TraLineRuleContext { + let _localctx: TraLineRuleContext = new TraLineRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 34, DParser.RULE_traLineRule); + try { + this.state = 678; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 85, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 675; + _localctx._string = this.stringRule(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 676; + _localctx._ref = this.referenceRule(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 677; + _localctx._dlgLine = this.dlgLineRule(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public dlgLineRule(): DlgLineRuleContext { + let _localctx: DlgLineRuleContext = new DlgLineRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 36, DParser.RULE_dlgLineRule); + let _la: number; + try { + this.state = 693; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 89, this._ctx) ) { + case 1: + _localctx = new GenderedTextContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 680; + (_localctx as GenderedTextContext)._maleLine = this.stringRule(); + this.state = 682; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SOUND_STRING) { + { + this.state = 681; + (_localctx as GenderedTextContext)._maleSound = this.soundRule(); + } + } + + this.state = 684; + (_localctx as GenderedTextContext)._femaleLine = this.stringRule(); + this.state = 686; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SOUND_STRING) { + { + this.state = 685; + (_localctx as GenderedTextContext)._femaleSound = this.soundRule(); + } + } + + } + break; + + case 2: + _localctx = new GenderNeutralTextContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 688; + (_localctx as GenderNeutralTextContext)._line = this.stringRule(); + this.state = 690; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === DParser.SOUND_STRING) { + { + this.state = 689; + (_localctx as GenderNeutralTextContext)._sound = this.soundRule(); + } + } + + } + break; + + case 3: + _localctx = new ReferencedTextContext(_localctx); + this.enterOuterAlt(_localctx, 3); + { + this.state = 692; + this.referenceRule(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public stringRule(): StringRuleContext { + let _localctx: StringRuleContext = new StringRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 38, DParser.RULE_stringRule); + let _la: number; + try { + this.state = 703; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 91, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 695; + this.stringLiteralRule(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 696; + _localctx._stringLiteralRule = this.stringLiteralRule(); + _localctx._parts.push(_localctx._stringLiteralRule); + this.state = 699; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 697; + this.match(DParser.CONCAT); + this.state = 698; + _localctx._stringLiteralRule = this.stringLiteralRule(); + _localctx._parts.push(_localctx._stringLiteralRule); + } + } + this.state = 701; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === DParser.CONCAT); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public stringLiteralRule(): StringLiteralRuleContext { + let _localctx: StringLiteralRuleContext = new StringLiteralRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 40, DParser.RULE_stringLiteralRule); + try { + this.state = 710; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.IDENTIFIER: + this.enterOuterAlt(_localctx, 1); + { + this.state = 705; + this.identifierRule(); + } + break; + case DParser.PERCENT_STRING: + this.enterOuterAlt(_localctx, 2); + { + this.state = 706; + this.match(DParser.PERCENT_STRING); + } + break; + case DParser.TILDE_STRING: + this.enterOuterAlt(_localctx, 3); + { + this.state = 707; + this.match(DParser.TILDE_STRING); + } + break; + case DParser.LONG_TILDE_STRING: + this.enterOuterAlt(_localctx, 4); + { + this.state = 708; + this.match(DParser.LONG_TILDE_STRING); + } + break; + case DParser.QUOTE_STRING: + this.enterOuterAlt(_localctx, 5); + { + this.state = 709; + this.match(DParser.QUOTE_STRING); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public identifierRule(): IdentifierRuleContext { + let _localctx: IdentifierRuleContext = new IdentifierRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 42, DParser.RULE_identifierRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 712; + this.match(DParser.IDENTIFIER); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public referenceRule(): ReferenceRuleContext { + let _localctx: ReferenceRuleContext = new ReferenceRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 44, DParser.RULE_referenceRule); + try { + this.state = 722; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case DParser.SHARP_NUMBER: + this.enterOuterAlt(_localctx, 1); + { + this.state = 714; + this.match(DParser.SHARP_NUMBER); + } + break; + case DParser.FORCED_STRING_REFERENCE: + this.enterOuterAlt(_localctx, 2); + { + this.state = 715; + this.match(DParser.FORCED_STRING_REFERENCE); + } + break; + case DParser.TRANSLATION_REFERENCE: + this.enterOuterAlt(_localctx, 3); + { + this.state = 716; + this.match(DParser.TRANSLATION_REFERENCE); + } + break; + case DParser.PAREN_OPEN: + this.enterOuterAlt(_localctx, 4); + { + this.state = 717; + this.match(DParser.PAREN_OPEN); + this.state = 718; + this.match(DParser.AT); + this.state = 719; + this.stringRule(); + this.state = 720; + this.match(DParser.PAREN_CLOSE); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public sharpNumberRule(): SharpNumberRuleContext { + let _localctx: SharpNumberRuleContext = new SharpNumberRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 46, DParser.RULE_sharpNumberRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 724; + this.match(DParser.SHARP_NUMBER); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public soundRule(): SoundRuleContext { + let _localctx: SoundRuleContext = new SoundRuleContext(this._ctx, this.state); + this.enterRule(_localctx, 48, DParser.RULE_soundRule); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 726; + this.match(DParser.SOUND_STRING); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03K\u02DB\x04\x02" + + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x03\x02\x03\x02\x03\x03\x07\x03" + + "8\n\x03\f\x03\x0E\x03;\v\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x05" + + "\x04B\n\x04\x03\x04\x07\x04E\n\x04\f\x04\x0E\x04H\v\x04\x03\x04\x03\x04" + + "\x05\x04L\n\x04\x03\x04\x03\x04\x07\x04P\n\x04\f\x04\x0E\x04S\v\x04\x03" + + "\x04\x03\x04\x03\x04\x03\x04\x05\x04Y\n\x04\x03\x04\x03\x04\x07\x04]\n" + + "\x04\f\x04\x0E\x04`\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + + "\x04\x05\x04h\n\x04\x03\x04\x03\x04\x03\x04\x05\x04m\n\x04\x03\x04\x05" + + "\x04p\n\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + + "\x04\x03\x04\x03\x04\x07\x04|\n\x04\f\x04\x0E\x04\x7F\v\x04\x03\x04\x03" + + "\x04\x03\x04\x03\x04\x03\x04\x03\x04\x05\x04\x87\n\x04\x03\x04\x05\x04" + + "\x8A\n\x04\x03\x04\x05\x04\x8D\n\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07" + + "\x04\x93\n\x04\f\x04\x0E\x04\x96\v\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x05\x04\x9C\n\x04\x03\x04\x03\x04\x07\x04\xA0\n\x04\f\x04\x0E\x04\xA3" + + "\v\x04\x03\x04\x05\x04\xA6\n\x04\x03\x04\x07\x04\xA9\n\x04\f\x04\x0E\x04" + + "\xAC\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07" + + "\x04\xB5\n\x04\f\x04\x0E\x04\xB8\v\x04\x03\x04\x07\x04\xBB\n\x04\f\x04" + + "\x0E\x04\xBE\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\xC5" + + "\n\x04\f\x04\x0E\x04\xC8\v\x04\x03\x04\x03\x04\x07\x04\xCC\n\x04\f\x04" + + "\x0E\x04\xCF\v\x04\x05\x04\xD1\n\x04\x03\x04\x07\x04\xD4\n\x04\f\x04\x0E" + + "\x04\xD7\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\xDD\n\x04\f\x04" + + "\x0E\x04\xE0\v\x04\x03\x04\x03\x04\x03\x04\x07\x04\xE5\n\x04\f\x04\x0E" + + "\x04\xE8\v\x04\x03\x04\x03\x04\x03\x04\x07\x04\xED\n\x04\f\x04\x0E\x04" + + "\xF0\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\xF6\n\x04\f\x04\x0E" + + "\x04\xF9\v\x04\x03\x04\x03\x04\x03\x04\x07\x04\xFE\n\x04\f\x04\x0E\x04" + + "\u0101\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u0107\n\x04\f\x04" + + "\x0E\x04\u010A\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u0110\n\x04" + + "\f\x04\x0E\x04\u0113\v\x04\x03\x04\x03\x04\x03\x04\x07\x04\u0118\n\x04" + + "\f\x04\x0E\x04\u011B\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u0121" + + "\n\x04\f\x04\x0E\x04\u0124\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04" + + "\u012A\n\x04\f\x04\x0E\x04\u012D\v\x04\x03\x04\x03\x04\x03\x04\x07\x04" + + "\u0132\n\x04\f\x04\x0E\x04\u0135\v\x04\x03\x04\x03\x04\x03\x04\x07\x04" + + "\u013A\n\x04\f\x04\x0E\x04\u013D\v\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x03\x04\x07\x04\u0144\n\x04\f\x04\x0E\x04\u0147\v\x04\x03\x04\x03\x04" + + "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u015A\n\x04\f" + + "\x04\x0E\x04\u015D\v\x04\x03\x04\x07\x04\u0160\n\x04\f\x04\x0E\x04\u0163" + + "\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u016A\n\x04\f\x04" + + "\x0E\x04\u016D\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x07\x04\u0174" + + "\n\x04\f\x04\x0E\x04\u0177\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x07\x04\u017E\n\x04\f\x04\x0E\x04\u0181\v\x04\x03\x04\x07\x04\u0184\n" + + "\x04\f\x04\x0E\x04\u0187\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x07\x04\u018E\n\x04\f\x04\x0E\x04\u0191\v\x04\x03\x04\x07\x04\u0194\n" + + "\x04\f\x04\x0E\x04\u0197\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x07\x04\u019E\n\x04\f\x04\x0E\x04\u01A1\v\x04\x03\x04\x07\x04\u01A4\n" + + "\x04\f\x04\x0E\x04\u01A7\v\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x07\x04\u01AE\n\x04\f\x04\x0E\x04\u01B1\v\x04\x03\x04\x07\x04\u01B4\n" + + "\x04\f\x04\x0E\x04\u01B7\v\x04\x05\x04\u01B9\n\x04\x03\x05\x03\x05\x03" + + "\x05\x03\x06\x03\x06\x05\x06\u01C0\n\x06\x03\x06\x03\x06\x03\x07\x03\x07" + + "\x03\x07\x05\x07\u01C7\n\x07\x03\x07\x03\x07\x05\x07\u01CB\n\x07\x03\x07" + + "\x05\x07\u01CE\n\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u01D5" + + "\n\x07\f\x07\x0E\x07\u01D8\v\x07\x03\x07\x07\x07\u01DB\n\x07\f\x07\x0E" + + "\x07\u01DE\v\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x07\x07\u01E5" + + "\n\x07\f\x07\x0E\x07\u01E8\v\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07" + + "\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\u01F4\n\x07\x03\b\x03" + + "\b\x07\b\u01F8\n\b\f\b\x0E\b\u01FB\v\b\x03\t\x03\t\x05\t\u01FF\n\t\x03" + + "\t\x03\t\x03\n\x03\n\x03\n\x05\n\u0206\n\n\x03\n\x07\n\u0209\n\n\f\n\x0E" + + "\n\u020C\v\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0212\n\n\x03\n\x03\n\x03\n" + + "\x07\n\u0217\n\n\f\n\x0E\n\u021A\v\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0220" + + "\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0227\n\n\x03\n\x03\n\x03\n\x05" + + "\n\u022C\n\n\x03\v\x03\v\x03\v\x03\v\x05\v\u0232\n\v\x03\v\x03\v\x03\v" + + "\x03\v\x05\v\u0238\n\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f" + + "\x03\f\x03\f\x05\f\u0244\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u024B" + + "\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x07\f\u0253\n\f\f\f\x0E\f\u0256" + + "\v\f\x05\f\u0258\n\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x05\r\u0266\n\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05" + + "\x0E\u026C\n\x0E\x03\x0E\x03\x0E\x03\x0E\x07\x0E\u0271\n\x0E\f\x0E\x0E" + + "\x0E\u0274\v\x0E\x03\x0E\x07\x0E\u0277\n\x0E\f\x0E\x0E\x0E\u027A\v\x0E" + + "\x03\x0F\x03\x0F\x05\x0F\u027E\n\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x07" + + "\x0F\u0284\n\x0F\f\x0F\x0E\x0F\u0287\v\x0F\x03\x0F\x03\x0F\x03\x0F\x03" + + "\x0F\x07\x0F\u028D\n\x0F\f\x0F\x0E\x0F\u0290\v\x0F\x03\x0F\x03\x0F\x05" + + "\x0F\u0294\n\x0F\x03\x10\x03\x10\x03\x10\x05\x10\u0299\n\x10\x05\x10\u029B" + + "\n\x10\x03\x10\x03\x10\x03\x10\x05\x10\u02A0\n\x10\x03\x11\x03\x11\x03" + + "\x12\x03\x12\x03\x13\x03\x13\x03\x13\x05\x13\u02A9\n\x13\x03\x14\x03\x14" + + "\x05\x14\u02AD\n\x14\x03\x14\x03\x14\x05\x14\u02B1\n\x14\x03\x14\x03\x14" + + "\x05\x14\u02B5\n\x14\x03\x14\x05\x14\u02B8\n\x14\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x06\x15\u02BE\n\x15\r\x15\x0E\x15\u02BF\x05\x15\u02C2\n\x15\x03" + + "\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u02C9\n\x16\x03\x17\x03\x17" + + "\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x05\x18" + + "\u02D5\n\x18\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x02\x02\x02\x1B\x02" + + "\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02" + + "\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02" + + ",\x02.\x020\x022\x02\x02\x03\x04\x02\x0E\x0E\x16\x16\x02\u0349\x024\x03" + + "\x02\x02\x02\x049\x03\x02\x02\x02\x06\u01B8\x03\x02\x02\x02\b\u01BA\x03" + + "\x02\x02\x02\n\u01BF\x03\x02\x02\x02\f\u01F3\x03\x02\x02\x02\x0E\u01F5" + + "\x03\x02\x02\x02\x10\u01FE\x03\x02\x02\x02\x12\u022B\x03\x02\x02\x02\x14" + + "\u0237\x03\x02\x02\x02\x16\u0257\x03\x02\x02\x02\x18\u0265\x03\x02\x02" + + "\x02\x1A\u026B\x03\x02\x02\x02\x1C\u0293\x03\x02\x02\x02\x1E\u029A\x03" + + "\x02\x02\x02 \u02A1\x03\x02\x02\x02\"\u02A3\x03\x02\x02\x02$\u02A8\x03" + + "\x02\x02\x02&\u02B7\x03\x02\x02\x02(\u02C1\x03\x02\x02\x02*\u02C8\x03" + + "\x02\x02\x02,\u02CA\x03\x02\x02\x02.\u02D4\x03\x02\x02\x020\u02D6\x03" + + "\x02\x02\x022\u02D8\x03\x02\x02\x0245\x05\x04\x03\x025\x03\x03\x02\x02" + + "\x0268\x05\x06\x04\x0276\x03\x02\x02\x028;\x03\x02\x02\x0297\x03\x02\x02" + + "\x029:\x03\x02\x02\x02:<\x03\x02\x02\x02;9\x03\x02\x02\x02<=\x07\x02\x02" + + "\x03=\x05\x03\x02\x02\x02>?\x07\x05\x02\x02?A\x05 \x11\x02@B\x05(\x15" + + "\x02A@\x03\x02\x02\x02AB\x03\x02\x02\x02BF\x03\x02\x02\x02CE\x05\f\x07" + + "\x02DC\x03\x02\x02\x02EH\x03\x02\x02\x02FD\x03\x02\x02\x02FG\x03\x02\x02" + + "\x02G\u01B9\x03\x02\x02\x02HF\x03\x02\x02\x02IK\x07\"\x02\x02JL\x07\x1E" + + "\x02\x02KJ\x03\x02\x02\x02KL\x03\x02\x02\x02LM\x03\x02\x02\x02MQ\x05 " + + "\x11\x02NP\x05\f\x07\x02ON\x03\x02\x02\x02PS\x03\x02\x02\x02QO\x03\x02" + + "\x02\x02QR\x03\x02\x02\x02RT\x03\x02\x02\x02SQ\x03\x02\x02\x02TU\x07\x06" + + "\x02\x02U\u01B9\x03\x02\x02\x02VX\x07#\x02\x02WY\x07\x1E\x02\x02XW\x03" + + "\x02\x02\x02XY\x03\x02\x02\x02YZ\x03\x02\x02\x02Z^\x05 \x11\x02[]\x05" + + "\f\x07\x02\\[\x03\x02\x02\x02]`\x03\x02\x02\x02^\\\x03\x02\x02\x02^_\x03" + + "\x02\x02\x02_a\x03\x02\x02\x02`^\x03\x02\x02\x02ab\x07\x06\x02\x02b\u01B9" + + "\x03\x02\x02\x02cl\x07$\x02\x02dg\x07\x07\x02\x02ef\x07\t\x02\x02fh\x05" + + "0\x19\x02ge\x03\x02\x02\x02gh\x03\x02\x02\x02hi\x03\x02\x02\x02ij\x05" + + "(\x15\x02jk\x07\n\x02\x02km\x03\x02\x02\x02ld\x03\x02\x02\x02lm\x03\x02" + + "\x02\x02mo\x03\x02\x02\x02np\x07\x1E\x02\x02on\x03\x02\x02\x02op\x03\x02" + + "\x02\x02pq\x03\x02\x02\x02qr\x05 \x11\x02rs\x05(\x15\x02st\x05\x1A\x0E" + + "\x02tu\x05\x16\f\x02u\u01B9\x03\x02\x02\x02vw\x07%\x02\x02wx\x05 \x11" + + "\x02xy\x05(\x15\x02y}\x05(\x15\x02z|\x05\x1C\x0F\x02{z\x03\x02\x02\x02" + + "|\x7F\x03\x02\x02\x02}{\x03\x02\x02\x02}~\x03\x02\x02\x02~\x80\x03\x02" + + "\x02\x02\x7F}\x03\x02\x02\x02\x80\x81\x05\x16\f\x02\x81\u01B9\x03\x02" + + "\x02\x02\x82\x87\x078\x02\x02\x83\x87\x079\x02\x02\x84\x87\x07:\x02\x02" + + "\x85\x87\x07;\x02\x02\x86\x82\x03\x02\x02\x02\x86\x83\x03\x02\x02\x02" + + "\x86\x84\x03\x02\x02\x02\x86\x85\x03\x02\x02\x02\x87\x89\x03\x02\x02\x02" + + "\x88\x8A\x07\x19\x02\x02\x89\x88\x03\x02\x02\x02\x89\x8A\x03\x02\x02\x02" + + "\x8A\x8C\x03\x02\x02\x02\x8B\x8D\x07\x1E\x02\x02\x8C\x8B\x03\x02\x02\x02" + + "\x8C\x8D\x03\x02\x02\x02\x8D\x8E\x03\x02\x02\x02\x8E\x8F\x05 \x11\x02" + + "\x8F\x90\x05(\x15\x02\x90\x94\x05(\x15\x02\x91\x93\x05\x1C\x0F\x02\x92" + + "\x91\x03\x02\x02\x02\x93\x96\x03\x02\x02\x02\x94\x92\x03\x02\x02\x02\x94" + + "\x95\x03\x02\x02\x02\x95\x97\x03\x02\x02\x02\x96\x94\x03\x02\x02\x02\x97" + + "\x98\x07\x06\x02\x02\x98\u01B9\x03\x02\x02\x02\x99\x9C\x07&\x02\x02\x9A" + + "\x9C\x077\x02\x02\x9B\x99\x03\x02\x02\x02\x9B\x9A\x03\x02\x02\x02\x9C" + + "\x9D\x03\x02\x02\x02\x9D\xA1\x05 \x11\x02\x9E\xA0\x05(\x15\x02\x9F\x9E" + + "\x03\x02\x02\x02\xA0\xA3\x03\x02\x02\x02\xA1\x9F\x03\x02\x02\x02\xA1\xA2" + + "\x03\x02\x02\x02\xA2\xA5\x03\x02\x02\x02\xA3\xA1\x03\x02\x02\x02\xA4\xA6" + + "\x050\x19\x02\xA5\xA4\x03\x02\x02\x02\xA5\xA6\x03\x02\x02\x02\xA6\xAA" + + "\x03\x02\x02\x02\xA7\xA9\x05\x12\n\x02\xA8\xA7\x03\x02\x02\x02\xA9\xAC" + + "\x03\x02\x02\x02\xAA\xA8\x03\x02\x02\x02\xAA\xAB\x03\x02\x02\x02\xAB\xAD" + + "\x03\x02\x02\x02\xAC\xAA\x03\x02\x02\x02\xAD\xAE\x07\x06\x02\x02\xAE\u01B9" + + "\x03\x02\x02\x02\xAF\xB0\x07\'\x02\x02\xB0\xB1\x05 \x11\x02\xB1\xB2\x05" + + "(\x15\x02\xB2\xB6\x05(\x15\x02\xB3\xB5\x05(\x15\x02\xB4\xB3\x03\x02\x02" + + "\x02\xB5\xB8\x03\x02\x02\x02\xB6\xB4\x03\x02\x02\x02\xB6\xB7\x03\x02\x02" + + "\x02\xB7\xBC\x03\x02\x02\x02\xB8\xB6\x03\x02\x02\x02\xB9\xBB\x05\n\x06" + + "\x02\xBA\xB9\x03\x02\x02\x02\xBB\xBE\x03\x02\x02\x02\xBC\xBA\x03\x02\x02" + + "\x02\xBC\xBD\x03\x02\x02\x02\xBD\u01B9\x03\x02\x02\x02\xBE\xBC\x03\x02" + + "\x02\x02\xBF\xC0\x07(\x02\x02\xC0\xC1\x05 \x11\x02\xC1\xC2\x05(\x15\x02" + + "\xC2\xC6\x05(\x15\x02\xC3\xC5\x05(\x15\x02\xC4\xC3\x03\x02\x02\x02\xC5" + + "\xC8\x03\x02\x02\x02\xC6\xC4\x03\x02\x02\x02\xC6\xC7\x03\x02\x02\x02\xC7" + + "\xD0\x03\x02\x02\x02\xC8\xC6\x03\x02\x02\x02\xC9\xCD\x07\x11\x02\x02\xCA" + + "\xCC\x05(\x15\x02\xCB\xCA\x03\x02\x02\x02\xCC\xCF\x03\x02\x02\x02\xCD" + + "\xCB\x03\x02\x02\x02\xCD\xCE\x03\x02\x02\x02\xCE\xD1\x03\x02\x02\x02\xCF" + + "\xCD\x03\x02\x02\x02\xD0\xC9\x03\x02\x02\x02\xD0\xD1\x03\x02\x02\x02\xD1" + + "\xD5\x03\x02\x02\x02\xD2\xD4\x05\n\x06\x02\xD3\xD2\x03\x02\x02\x02\xD4" + + "\xD7\x03\x02\x02\x02\xD5\xD3\x03\x02\x02\x02\xD5\xD6\x03\x02\x02\x02\xD6" + + "\u01B9\x03\x02\x02\x02\xD7\xD5\x03\x02\x02\x02\xD8\xD9\x07)\x02\x02\xD9" + + "\xDA\x05 \x11\x02\xDA\xDE\x07\x05\x02\x02\xDB\xDD\x05(\x15\x02\xDC\xDB" + + "\x03\x02\x02\x02\xDD\xE0\x03\x02\x02\x02\xDE\xDC\x03\x02\x02\x02\xDE\xDF" + + "\x03\x02\x02\x02\xDF\xE1\x03\x02\x02\x02\xE0\xDE\x03\x02\x02\x02\xE1\xE2" + + "\x07\x06\x02\x02\xE2\xE6\x07\x05\x02\x02\xE3\xE5\x05(\x15\x02\xE4\xE3" + + "\x03\x02\x02\x02\xE5\xE8\x03\x02\x02\x02\xE6\xE4\x03\x02\x02\x02\xE6\xE7" + + "\x03\x02\x02\x02\xE7\xE9\x03\x02\x02\x02\xE8\xE6\x03\x02\x02\x02\xE9\xEA" + + "\x07\x06\x02\x02\xEA\xEE\x05(\x15\x02\xEB\xED\x05\n\x06\x02\xEC\xEB\x03" + + "\x02\x02\x02\xED\xF0\x03\x02\x02\x02\xEE\xEC\x03\x02\x02\x02\xEE\xEF\x03" + + "\x02\x02\x02\xEF\u01B9\x03\x02\x02\x02\xF0\xEE\x03\x02\x02\x02\xF1\xF2" + + "\x07*\x02\x02\xF2\xF3\x05 \x11\x02\xF3\xF7\x07\x05\x02\x02\xF4\xF6\x05" + + "(\x15\x02\xF5\xF4\x03\x02\x02\x02\xF6\xF9\x03\x02\x02\x02\xF7\xF5\x03" + + "\x02\x02\x02\xF7\xF8\x03\x02\x02\x02\xF8\xFA\x03\x02\x02\x02\xF9\xF7\x03" + + "\x02\x02\x02\xFA\xFB\x07\x06\x02\x02\xFB\xFF\x07\x05\x02\x02\xFC\xFE\x05" + + "(\x15\x02\xFD\xFC\x03\x02\x02\x02\xFE\u0101\x03\x02\x02\x02\xFF\xFD\x03" + + "\x02\x02\x02\xFF\u0100\x03\x02\x02\x02\u0100\u0102\x03\x02\x02\x02\u0101" + + "\xFF\x03\x02\x02\x02\u0102\u0103\x07\x06\x02\x02\u0103\u0104\x05(\x15" + + "\x02\u0104\u0108\x05(\x15\x02\u0105\u0107\x05\n\x06\x02\u0106\u0105\x03" + + "\x02\x02\x02\u0107\u010A\x03\x02\x02\x02\u0108\u0106\x03\x02\x02\x02\u0108" + + "\u0109\x03\x02\x02\x02\u0109\u01B9\x03\x02\x02\x02\u010A\u0108\x03\x02" + + "\x02\x02\u010B\u010C\x07+\x02\x02\u010C\u010D\x05 \x11\x02\u010D\u0111" + + "\x07\x05\x02\x02\u010E\u0110\x05(\x15\x02\u010F\u010E\x03\x02\x02\x02" + + "\u0110\u0113\x03\x02\x02\x02\u0111\u010F\x03\x02\x02\x02\u0111\u0112\x03" + + "\x02\x02\x02\u0112\u0114\x03\x02\x02\x02\u0113\u0111\x03\x02\x02\x02\u0114" + + "\u0115\x07\x06\x02\x02\u0115\u0119\x07\x05\x02\x02\u0116\u0118\x05(\x15" + + "\x02\u0117\u0116\x03\x02\x02\x02\u0118\u011B\x03\x02\x02\x02\u0119\u0117" + + "\x03\x02\x02\x02\u0119\u011A\x03\x02\x02\x02\u011A\u011C\x03\x02\x02\x02" + + "\u011B\u0119\x03\x02\x02\x02\u011C\u011D\x07\x06\x02\x02\u011D\u011E\x05" + + "(\x15\x02\u011E\u0122\x05(\x15\x02\u011F\u0121\x05\n\x06\x02\u0120\u011F" + + "\x03\x02\x02\x02\u0121\u0124\x03\x02\x02\x02\u0122\u0120\x03\x02\x02\x02" + + "\u0122\u0123\x03\x02\x02\x02\u0123\u01B9\x03\x02\x02\x02\u0124\u0122\x03" + + "\x02\x02\x02\u0125\u0126\x07,\x02\x02\u0126\u0127\x05 \x11\x02\u0127\u012B" + + "\x07\x05\x02\x02\u0128\u012A\x05(\x15\x02\u0129\u0128\x03\x02\x02\x02" + + "\u012A\u012D\x03\x02\x02\x02\u012B\u0129\x03\x02\x02\x02\u012B\u012C\x03" + + "\x02\x02\x02\u012C\u012E\x03\x02\x02\x02\u012D\u012B\x03\x02\x02\x02\u012E" + + "\u012F\x07\x06\x02\x02\u012F\u0133\x07\x05\x02\x02\u0130\u0132\x05(\x15" + + "\x02\u0131\u0130\x03\x02\x02\x02\u0132\u0135\x03\x02\x02\x02\u0133\u0131" + + "\x03\x02\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0136\x03\x02\x02\x02" + + "\u0135\u0133\x03\x02\x02\x02\u0136\u0137\x07\x06\x02\x02\u0137\u013B\x07" + + "\x05\x02\x02\u0138\u013A\x05\b\x05\x02\u0139\u0138\x03\x02\x02\x02\u013A" + + "\u013D\x03\x02\x02\x02\u013B\u0139\x03\x02\x02\x02\u013B\u013C\x03\x02" + + "\x02\x02\u013C\u013E\x03\x02\x02\x02\u013D\u013B\x03\x02\x02\x02\u013E" + + "\u013F\x07\x06\x02\x02\u013F\u01B9\x03\x02\x02\x02\u0140\u0141\x07-\x02" + + "\x02\u0141\u0145\x05 \x11\x02\u0142\u0144\x05\f\x07\x02\u0143\u0142\x03" + + "\x02\x02\x02\u0144\u0147\x03\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0145" + + "\u0146\x03\x02\x02\x02\u0146\u0148\x03\x02\x02\x02\u0147\u0145\x03\x02" + + "\x02\x02\u0148\u0149\x07\x06\x02\x02\u0149\u01B9\x03\x02\x02\x02\u014A" + + "\u014B\x07.\x02\x02\u014B\u014C\x05 \x11\x02\u014C\u014D\x05(\x15\x02" + + "\u014D\u014E\x050\x19\x02\u014E\u01B9\x03\x02\x02\x02\u014F\u0150\x07" + + "6\x02\x02\u0150\u0151\x05 \x11\x02\u0151\u0152\x05(\x15\x02\u0152\u0153" + + "\x05\"\x12\x02\u0153\u01B9\x03\x02\x02\x02\u0154\u0155\x07/\x02\x02\u0155" + + "\u0156\x05 \x11\x02\u0156\u0157\x05(\x15\x02\u0157\u015B\x05(\x15\x02" + + "\u0158\u015A\x05(\x15\x02\u0159\u0158\x03\x02\x02\x02\u015A\u015D\x03" + + "\x02\x02\x02\u015B\u0159\x03\x02\x02\x02\u015B\u015C\x03\x02\x02\x02\u015C" + + "\u0161\x03\x02\x02\x02\u015D\u015B\x03\x02\x02\x02\u015E\u0160\x05\n\x06" + + "\x02\u015F\u015E\x03\x02\x02\x02\u0160\u0163\x03\x02\x02\x02\u0161\u015F" + + "\x03\x02\x02\x02\u0161\u0162\x03\x02\x02\x02\u0162\u01B9\x03\x02\x02\x02" + + "\u0163\u0161\x03\x02\x02\x02\u0164\u0165\x070\x02\x02\u0165\u0166\x05" + + " \x11\x02\u0166\u0167\x05(\x15\x02\u0167\u016B\x05(\x15\x02\u0168\u016A" + + "\x05\n\x06\x02\u0169\u0168\x03\x02\x02\x02\u016A\u016D\x03\x02\x02\x02" + + "\u016B\u0169\x03\x02\x02\x02\u016B\u016C\x03\x02\x02\x02\u016C\u01B9\x03" + + "\x02\x02\x02\u016D\u016B\x03\x02\x02\x02\u016E\u016F\x071\x02\x02\u016F" + + "\u0170\x05(\x15\x02\u0170\u0171\x05(\x15\x02\u0171\u0175\x05(\x15\x02" + + "\u0172\u0174\x05\n\x06\x02\u0173\u0172\x03\x02\x02\x02\u0174\u0177\x03" + + "\x02\x02\x02\u0175\u0173\x03\x02\x02\x02\u0175\u0176\x03\x02\x02\x02\u0176" + + "\u01B9\x03\x02\x02\x02\u0177\u0175\x03\x02\x02\x02\u0178\u0179\x072\x02" + + "\x02\u0179\u017A\x05 \x11\x02\u017A\u017B\x05(\x15\x02\u017B\u017F\x05" + + "(\x15\x02\u017C\u017E\x05 \x11\x02\u017D\u017C\x03\x02\x02\x02\u017E\u0181" + + "\x03\x02\x02\x02\u017F\u017D\x03\x02\x02\x02\u017F\u0180\x03\x02\x02\x02" + + "\u0180\u0185\x03\x02\x02\x02\u0181\u017F\x03\x02\x02\x02\u0182\u0184\x05" + + "\n\x06\x02\u0183\u0182\x03\x02\x02\x02\u0184\u0187\x03\x02\x02\x02\u0185" + + "\u0183\x03\x02\x02\x02\u0185\u0186\x03\x02\x02\x02\u0186\u01B9\x03\x02" + + "\x02\x02\u0187\u0185\x03\x02\x02\x02\u0188\u0189\x073\x02\x02\u0189\u018A" + + "\x05(\x15\x02\u018A\u018B\x05(\x15\x02\u018B\u018F\x05(\x15\x02\u018C" + + "\u018E\x05(\x15\x02\u018D\u018C\x03\x02\x02\x02\u018E\u0191\x03\x02\x02" + + "\x02\u018F\u018D\x03\x02\x02\x02\u018F\u0190\x03\x02\x02\x02\u0190\u0195" + + "\x03\x02\x02\x02\u0191\u018F\x03\x02\x02\x02\u0192\u0194\x05\n\x06\x02" + + "\u0193\u0192\x03\x02\x02\x02\u0194\u0197\x03\x02\x02\x02\u0195\u0193\x03" + + "\x02\x02\x02\u0195\u0196\x03\x02\x02\x02\u0196\u01B9\x03\x02\x02\x02\u0197" + + "\u0195\x03\x02\x02\x02\u0198\u0199\x074\x02\x02\u0199\u019A\x05 \x11\x02" + + "\u019A\u019B\x05(\x15\x02\u019B\u019F\x05(\x15\x02\u019C\u019E\x05 \x11" + + "\x02\u019D\u019C\x03\x02\x02\x02\u019E\u01A1\x03\x02\x02\x02\u019F\u019D" + + "\x03\x02\x02\x02\u019F\u01A0\x03\x02\x02\x02\u01A0\u01A5\x03\x02\x02\x02" + + "\u01A1\u019F\x03\x02\x02\x02\u01A2\u01A4\x05\n\x06\x02\u01A3\u01A2\x03" + + "\x02\x02\x02\u01A4\u01A7\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02\u01A5" + + "\u01A6\x03\x02\x02\x02\u01A6\u01B9\x03\x02\x02\x02\u01A7\u01A5\x03\x02" + + "\x02\x02\u01A8\u01A9\x075\x02\x02\u01A9\u01AA\x05(\x15\x02\u01AA\u01AB" + + "\x05(\x15\x02\u01AB\u01AF\x05(\x15\x02\u01AC\u01AE\x05(\x15\x02\u01AD" + + "\u01AC\x03\x02\x02\x02\u01AE\u01B1\x03\x02\x02\x02\u01AF\u01AD\x03\x02" + + "\x02\x02\u01AF\u01B0\x03\x02\x02\x02\u01B0\u01B5\x03\x02\x02\x02\u01B1" + + "\u01AF\x03\x02\x02\x02\u01B2\u01B4\x05\n\x06\x02\u01B3\u01B2\x03\x02\x02" + + "\x02\u01B4\u01B7\x03\x02\x02\x02\u01B5\u01B3\x03\x02\x02\x02\u01B5\u01B6" + + "\x03\x02\x02\x02\u01B6\u01B9\x03\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02" + + "\u01B8>\x03\x02\x02\x02\u01B8I\x03\x02\x02\x02\u01B8V\x03\x02\x02\x02" + + "\u01B8c\x03\x02\x02\x02\u01B8v\x03\x02\x02\x02\u01B8\x86\x03\x02\x02\x02" + + "\u01B8\x9B\x03\x02\x02\x02\u01B8\xAF\x03\x02\x02\x02\u01B8\xBF\x03\x02" + + "\x02\x02\u01B8\xD8\x03\x02\x02\x02\u01B8\xF1\x03\x02\x02\x02\u01B8\u010B" + + "\x03\x02\x02\x02\u01B8\u0125\x03\x02\x02\x02\u01B8\u0140\x03\x02\x02\x02" + + "\u01B8\u014A\x03\x02\x02\x02\u01B8\u014F\x03\x02\x02\x02\u01B8\u0154\x03" + + "\x02\x02\x02\u01B8\u0164\x03\x02\x02\x02\u01B8\u016E\x03\x02\x02\x02\u01B8" + + "\u0178\x03\x02\x02\x02\u01B8\u0188\x03\x02\x02\x02\u01B8\u0198\x03\x02" + + "\x02\x02\u01B8\u01A8\x03\x02\x02\x02\u01B9\x07\x03\x02\x02\x02\u01BA\u01BB" + + "\x05(\x15\x02\u01BB\u01BC\x05(\x15\x02\u01BC\t\x03\x02\x02\x02\u01BD\u01C0" + + "\x07\x07\x02\x02\u01BE\u01C0\x07\b\x02\x02\u01BF\u01BD\x03\x02\x02\x02" + + "\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C1\x03\x02\x02\x02\u01C1\u01C2\x05" + + "(\x15\x02\u01C2\v\x03\x02\x02\x02\u01C3\u01C6\x07\x07\x02\x02\u01C4\u01C5" + + "\x07\t\x02\x02\u01C5\u01C7\x050\x19\x02\u01C6\u01C4\x03\x02\x02\x02\u01C6" + + "\u01C7\x03\x02\x02\x02\u01C7\u01C8\x03\x02\x02\x02\u01C8\u01CA\x05(\x15" + + "\x02\u01C9\u01CB\x07\n\x02\x02\u01CA\u01C9\x03\x02\x02\x02\u01CA\u01CB" + + "\x03\x02\x02\x02\u01CB\u01CD\x03\x02\x02\x02\u01CC\u01CE\x07\x05\x02\x02" + + "\u01CD\u01CC\x03\x02\x02\x02\u01CD\u01CE\x03\x02\x02\x02\u01CE\u01CF\x03" + + "\x02\x02\x02\u01CF\u01D0\x05(\x15\x02\u01D0\u01D1\x07\x1D\x02\x02\u01D1" + + "\u01D6\x05\"\x12\x02\u01D2\u01D3\x07\v\x02\x02\u01D3\u01D5\x05\"\x12\x02" + + "\u01D4\u01D2\x03\x02\x02\x02\u01D5\u01D8\x03\x02\x02\x02\u01D6\u01D4\x03" + + "\x02\x02\x02\u01D6\u01D7\x03\x02\x02\x02\u01D7\u01DC\x03\x02\x02\x02\u01D8" + + "\u01D6\x03\x02\x02\x02\u01D9\u01DB\x05\x12\n\x02\u01DA\u01D9\x03\x02\x02" + + "\x02\u01DB\u01DE\x03\x02\x02\x02\u01DC\u01DA\x03\x02\x02\x02\u01DC\u01DD" + + "\x03\x02\x02\x02\u01DD\u01DF\x03\x02\x02\x02\u01DE\u01DC\x03\x02\x02\x02" + + "\u01DF\u01E0\x07\x06\x02\x02\u01E0\u01F4\x03\x02\x02\x02\u01E1\u01E2\x07" + + "\x17\x02\x02\u01E2\u01E6\x05 \x11\x02\u01E3\u01E5\x05\f\x07\x02\u01E4" + + "\u01E3\x03\x02\x02\x02\u01E5\u01E8\x03\x02\x02\x02\u01E6\u01E4\x03\x02" + + "\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7\u01E9\x03\x02\x02\x02\u01E8" + + "\u01E6\x03\x02\x02\x02\u01E9\u01EA\x07\x06\x02\x02\u01EA\u01F4\x03\x02" + + "\x02\x02\u01EB\u01EC\x07\x18\x02\x02\u01EC\u01ED\x05 \x11\x02\u01ED\u01EE" + + "\x05(\x15\x02\u01EE\u01EF\x05\x0E\b\x02\u01EF\u01F0\x07\x06\x02\x02\u01F0" + + "\u01F1\x05 \x11\x02\u01F1\u01F2\x05(\x15\x02\u01F2\u01F4\x03\x02\x02\x02" + + "\u01F3\u01C3\x03\x02"; + private static readonly _serializedATNSegment1: string = + "\x02\x02\u01F3\u01E1\x03\x02\x02\x02\u01F3\u01EB\x03\x02\x02\x02\u01F4" + + "\r\x03\x02\x02\x02\u01F5\u01F9\x05\x1E\x10\x02\u01F6\u01F8\x05\x10\t\x02" + + "\u01F7\u01F6\x03\x02\x02\x02\u01F8\u01FB\x03\x02\x02\x02\u01F9\u01F7\x03" + + "\x02\x02\x02\u01F9\u01FA\x03\x02\x02\x02\u01FA\x0F\x03\x02\x02\x02\u01FB" + + "\u01F9\x03\x02\x02\x02\u01FC\u01FF\x07\f\x02\x02\u01FD\u01FF\x07\v\x02" + + "\x02\u01FE\u01FC\x03\x02\x02\x02\u01FE\u01FD\x03\x02\x02\x02\u01FF\u0200" + + "\x03\x02\x02\x02\u0200\u0201\x05\x1E\x10\x02\u0201\x11\x03\x02\x02\x02" + + "\u0202\u0203\x07\x07\x02\x02\u0203\u0205\x05(\x15\x02\u0204\u0206\x07" + + "\n\x02\x02\u0205\u0204\x03\x02\x02\x02\u0205\u0206\x03\x02\x02\x02\u0206" + + "\u020A\x03\x02\x02\x02\u0207\u0209\x05\x18\r\x02\u0208\u0207\x03\x02\x02" + + "\x02\u0209\u020C\x03\x02\x02\x02\u020A\u0208\x03\x02\x02\x02\u020A\u020B" + + "\x03\x02\x02\x02\u020B\u020D\x03\x02\x02\x02\u020C\u020A\x03\x02\x02\x02" + + "\u020D\u020E\x05\x14\v\x02\u020E\u022C\x03\x02\x02\x02\u020F\u0211\x07" + + "\x0E\x02\x02\u0210\u0212\x05(\x15\x02\u0211\u0210\x03\x02\x02\x02\u0211" + + "\u0212\x03\x02\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213\u0214\x07\x0E" + + "\x02\x02\u0214\u0218\x05\"\x12\x02\u0215\u0217\x05\x18\r\x02\u0216\u0215" + + "\x03\x02\x02\x02\u0217\u021A\x03\x02\x02\x02\u0218\u0216\x03\x02\x02\x02" + + "\u0218\u0219\x03\x02\x02\x02\u0219\u021B\x03\x02\x02\x02\u021A\u0218\x03" + + "\x02\x02\x02\u021B\u021C\x05\x14\v\x02\u021C\u022C\x03\x02\x02\x02\u021D" + + "\u021F\x07\x0F\x02\x02\u021E\u0220\x07\x19\x02\x02\u021F\u021E\x03\x02" + + "\x02\x02\u021F\u0220\x03\x02\x02\x02\u0220\u0221\x03\x02\x02\x02\u0221" + + "\u0222\x05 \x11\x02\u0222\u0223\x05(\x15\x02\u0223\u022C\x03\x02\x02\x02" + + "\u0224\u0226\x07\x10\x02\x02\u0225\u0227\x07\x19\x02\x02\u0226\u0225\x03" + + "\x02\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227\u0228\x03\x02\x02\x02\u0228" + + "\u0229\x05 \x11\x02\u0229\u022A\x05(\x15\x02\u022A\u022C\x03\x02\x02\x02" + + "\u022B\u0202\x03\x02\x02\x02\u022B\u020F\x03\x02\x02\x02\u022B\u021D\x03" + + "\x02\x02\x02\u022B\u0224\x03\x02\x02\x02\u022C\x13\x03\x02\x02\x02\u022D" + + "\u022E\t\x02\x02\x02\u022E\u0238\x05(\x15\x02\u022F\u0231\x07\x1A\x02" + + "\x02\u0230\u0232\x07\x1E\x02\x02\u0231\u0230\x03\x02\x02\x02\u0231\u0232" + + "\x03\x02\x02\x02\u0232\u0233\x03\x02\x02\x02\u0233\u0234\x05 \x11\x02" + + "\u0234\u0235\x05(\x15\x02\u0235\u0238\x03\x02\x02\x02\u0236\u0238\x07" + + "\x1C\x02\x02\u0237\u022D\x03\x02\x02\x02\u0237\u022F\x03\x02\x02\x02\u0237" + + "\u0236\x03\x02\x02\x02\u0238\x15\x03\x02\x02\x02\u0239\u023A\x07\x06\x02" + + "\x02\u023A\u023B\x05 \x11\x02\u023B\u023C\x05(\x15\x02\u023C\u0258\x03" + + "\x02\x02\x02\u023D\u023E\x07\x1A\x02\x02\u023E\u023F\x05 \x11\x02\u023F" + + "\u0240\x05(\x15\x02\u0240\u0258\x03\x02\x02\x02\u0241\u0243\x07\x0F\x02" + + "\x02\u0242\u0244\x07\x19\x02\x02\u0243\u0242\x03\x02\x02\x02\u0243\u0244" + + "\x03\x02\x02\x02\u0244\u0245\x03\x02\x02\x02\u0245\u0246\x05 \x11\x02" + + "\u0246\u0247\x05(\x15\x02\u0247\u0258\x03\x02\x02\x02\u0248\u024A\x07" + + "\x10\x02\x02\u0249\u024B\x07\x19\x02\x02\u024A\u0249\x03\x02\x02\x02\u024A" + + "\u024B\x03\x02\x02\x02\u024B\u024C\x03\x02\x02\x02\u024C\u024D\x05 \x11" + + "\x02\u024D\u024E\x05(\x15\x02\u024E\u0258\x03\x02\x02\x02\u024F\u0258" + + "\x07\x1C\x02\x02\u0250\u0254\x07\x06\x02\x02\u0251\u0253\x05\x12\n\x02" + + "\u0252\u0251\x03\x02\x02\x02\u0253\u0256\x03\x02\x02\x02\u0254\u0252\x03" + + "\x02\x02\x02\u0254\u0255\x03\x02\x02\x02\u0255\u0258\x03\x02\x02\x02\u0256" + + "\u0254\x03\x02\x02\x02\u0257\u0239\x03\x02\x02\x02\u0257\u023D\x03\x02" + + "\x02\x02\u0257\u0241\x03\x02\x02\x02\u0257\u0248\x03\x02\x02\x02\u0257" + + "\u024F\x03\x02\x02\x02\u0257\u0250\x03\x02\x02\x02\u0258\x17\x03\x02\x02" + + "\x02\u0259\u025A\x07\x1B\x02\x02\u025A\u0266\x05&\x14\x02\u025B\u025C" + + "\x07\x11\x02\x02\u025C\u0266\x05(\x15\x02\u025D\u025E\x07\x12\x02\x02" + + "\u025E\u0266\x05&\x14\x02\u025F\u0260\x07\x13\x02\x02\u0260\u0266\x05" + + "&\x14\x02\u0261\u0262\x07\x14\x02\x02\u0262\u0266\x05&\x14\x02\u0263\u0264" + + "\x07\x15\x02\x02\u0264\u0266\x05(\x15\x02\u0265\u0259\x03\x02\x02\x02" + + "\u0265\u025B\x03\x02\x02\x02\u0265\u025D\x03\x02\x02\x02\u0265\u025F\x03" + + "\x02\x02\x02\u0265\u0261\x03\x02\x02\x02\u0265\u0263\x03\x02\x02\x02\u0266" + + "\x19\x03\x02\x02\x02\u0267\u0268\x07\x07\x02\x02\u0268\u0269\x05(\x15" + + "\x02\u0269\u026A\x07\n\x02\x02\u026A\u026C\x03\x02\x02\x02\u026B\u0267" + + "\x03\x02\x02\x02\u026B\u026C\x03\x02\x02\x02\u026C\u026D\x03\x02\x02\x02" + + "\u026D\u0272\x05\x1E\x10\x02\u026E\u026F\x07\v\x02\x02\u026F\u0271\x05" + + "\x1E\x10\x02\u0270\u026E\x03\x02\x02\x02\u0271\u0274\x03\x02\x02\x02\u0272" + + "\u0270\x03\x02\x02\x02\u0272\u0273\x03\x02\x02\x02\u0273\u0278\x03\x02" + + "\x02\x02\u0274\u0272\x03\x02\x02\x02\u0275\u0277\x05\x1C\x0F\x02\u0276" + + "\u0275\x03\x02\x02\x02\u0277\u027A\x03\x02\x02\x02\u0278\u0276\x03\x02" + + "\x02\x02\u0278\u0279\x03\x02\x02\x02\u0279\x1B\x03\x02\x02\x02\u027A\u0278" + + "\x03\x02\x02\x02\u027B\u027D\x07\f\x02\x02\u027C\u027E\x07\x1E\x02\x02" + + "\u027D\u027C\x03\x02\x02\x02\u027D\u027E\x03\x02\x02\x02\u027E\u027F\x03" + + "\x02\x02\x02\u027F\u0280\x05 \x11\x02\u0280\u0285\x05\x1E\x10\x02\u0281" + + "\u0282\x07\v\x02\x02\u0282\u0284\x05\x1E\x10\x02\u0283\u0281\x03\x02\x02" + + "\x02\u0284\u0287\x03\x02\x02\x02\u0285\u0283\x03\x02\x02\x02\u0285\u0286" + + "\x03\x02\x02\x02\u0286\u0294\x03\x02\x02\x02\u0287\u0285\x03\x02\x02\x02" + + "\u0288\u0289\x07\r\x02\x02\u0289\u028A\x05(\x15\x02\u028A\u028E\x07\x05" + + "\x02\x02\u028B\u028D\x05\x1C\x0F\x02\u028C\u028B\x03\x02\x02\x02\u028D" + + "\u0290\x03\x02\x02\x02\u028E\u028C\x03\x02\x02\x02\u028E\u028F\x03\x02" + + "\x02\x02\u028F\u0291\x03\x02\x02\x02\u0290\u028E\x03\x02\x02\x02\u0291" + + "\u0292\x07\x06\x02\x02\u0292\u0294\x03\x02\x02\x02\u0293\u027B\x03\x02" + + "\x02\x02\u0293\u0288\x03\x02\x02\x02\u0294\x1D\x03\x02\x02\x02\u0295\u0296" + + "\x07\x07\x02\x02\u0296\u0298\x05(\x15\x02\u0297\u0299\x07\n\x02\x02\u0298" + + "\u0297\x03\x02\x02\x02\u0298\u0299\x03\x02\x02\x02\u0299\u029B\x03\x02" + + "\x02\x02\u029A\u0295\x03\x02\x02\x02\u029A\u029B\x03\x02\x02\x02\u029B" + + "\u029C\x03\x02\x02\x02\u029C\u029F\x05\"\x12\x02\u029D\u029E\x07\x11\x02" + + "\x02\u029E\u02A0\x05(\x15\x02\u029F\u029D\x03\x02\x02\x02\u029F\u02A0" + + "\x03\x02\x02\x02\u02A0\x1F\x03\x02\x02\x02\u02A1\u02A2\x05(\x15\x02\u02A2" + + "!\x03\x02\x02\x02\u02A3\u02A4\x05&\x14\x02\u02A4#\x03\x02\x02\x02\u02A5" + + "\u02A9\x05(\x15\x02\u02A6\u02A9\x05.\x18\x02\u02A7\u02A9\x05&\x14\x02" + + "\u02A8\u02A5\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A7\x03" + + "\x02\x02\x02\u02A9%\x03\x02\x02\x02\u02AA\u02AC\x05(\x15\x02\u02AB\u02AD" + + "\x052\x1A\x02\u02AC\u02AB\x03\x02\x02\x02\u02AC\u02AD\x03\x02\x02\x02" + + "\u02AD\u02AE\x03\x02\x02\x02\u02AE\u02B0\x05(\x15\x02\u02AF\u02B1\x05" + + "2\x1A\x02\u02B0\u02AF\x03\x02\x02\x02\u02B0\u02B1\x03\x02\x02\x02\u02B1" + + "\u02B8\x03\x02\x02\x02\u02B2\u02B4\x05(\x15\x02\u02B3\u02B5\x052\x1A\x02" + + "\u02B4\u02B3\x03\x02\x02\x02\u02B4\u02B5\x03\x02\x02\x02\u02B5\u02B8\x03" + + "\x02\x02\x02\u02B6\u02B8\x05.\x18\x02\u02B7\u02AA\x03\x02\x02\x02\u02B7" + + "\u02B2\x03\x02\x02\x02\u02B7\u02B6\x03\x02\x02\x02\u02B8\'\x03\x02\x02" + + "\x02\u02B9\u02C2\x05*\x16\x02\u02BA\u02BD\x05*\x16\x02\u02BB\u02BC\x07" + + "C\x02\x02\u02BC\u02BE\x05*\x16\x02\u02BD\u02BB\x03\x02\x02\x02\u02BE\u02BF" + + "\x03\x02\x02\x02\u02BF\u02BD\x03\x02\x02\x02\u02BF\u02C0\x03\x02\x02\x02" + + "\u02C0\u02C2\x03\x02\x02\x02\u02C1\u02B9\x03\x02\x02\x02\u02C1\u02BA\x03" + + "\x02\x02\x02\u02C2)\x03\x02\x02\x02\u02C3\u02C9\x05,\x17\x02\u02C4\u02C9" + + "\x07@\x02\x02\u02C5\u02C9\x07>\x02\x02\u02C6\u02C9\x07F\x02\x02\u02C7" + + "\u02C9\x07?\x02\x02\u02C8\u02C3\x03\x02\x02\x02\u02C8\u02C4\x03\x02\x02" + + "\x02\u02C8\u02C5\x03\x02\x02\x02\u02C8\u02C6\x03\x02\x02\x02\u02C8\u02C7" + + "\x03\x02\x02\x02\u02C9+\x03\x02\x02\x02\u02CA\u02CB\x07E\x02\x02\u02CB" + + "-\x03\x02\x02\x02\u02CC\u02D5\x07<\x02\x02\u02CD\u02D5\x07A\x02\x02\u02CE" + + "\u02D5\x07B\x02\x02\u02CF\u02D0\x07\x1F\x02\x02\u02D0\u02D1\x07!\x02\x02" + + "\u02D1\u02D2\x05(\x15\x02\u02D2\u02D3\x07 \x02\x02\u02D3\u02D5\x03\x02" + + "\x02\x02\u02D4\u02CC\x03\x02\x02\x02\u02D4\u02CD\x03\x02\x02\x02\u02D4" + + "\u02CE\x03\x02\x02\x02\u02D4\u02CF\x03\x02\x02\x02\u02D5/\x03\x02\x02" + + "\x02\u02D6\u02D7\x07<\x02\x02\u02D71\x03\x02\x02\x02\u02D8\u02D9\x07=" + + "\x02\x02\u02D93\x03\x02\x02\x02`9AFKQX^glo}\x86\x89\x8C\x94\x9B\xA1\xA5" + + "\xAA\xB6\xBC\xC6\xCD\xD0\xD5\xDE\xE6\xEE\xF7\xFF\u0108\u0111\u0119\u0122" + + "\u012B\u0133\u013B\u0145\u015B\u0161\u016B\u0175\u017F\u0185\u018F\u0195" + + "\u019F\u01A5\u01AF\u01B5\u01B8\u01BF\u01C6\u01CA\u01CD\u01D6\u01DC\u01E6" + + "\u01F3\u01F9\u01FE\u0205\u020A\u0211\u0218\u021F\u0226\u022B\u0231\u0237" + + "\u0243\u024A\u0254\u0257\u0265\u026B\u0272\u0278\u027D\u0285\u028E\u0293" + + "\u0298\u029A\u029F\u02A8\u02AC\u02B0\u02B4\u02B7\u02BF\u02C1\u02C8\u02D4"; + public static readonly _serializedATN: string = Utils.join( + [ + DParser._serializedATNSegment0, + DParser._serializedATNSegment1, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!DParser.__ATN) { + DParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(DParser._serializedATN)); + } + + return DParser.__ATN; + } + +} + +export class RootRuleContext extends ParserRuleContext { + public dFileRule(): DFileRuleContext { + return this.getRuleContext(0, DFileRuleContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_rootRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterRootRule) { + listener.enterRootRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitRootRule) { + listener.exitRootRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitRootRule) { + return visitor.visitRootRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DFileRuleContext extends ParserRuleContext { + public _dActionRule!: DActionRuleContext; + public _actions: DActionRuleContext[] = []; + public EOF(): TerminalNode { return this.getToken(DParser.EOF, 0); } + public dActionRule(): DActionRuleContext[]; + public dActionRule(i: number): DActionRuleContext; + public dActionRule(i?: number): DActionRuleContext | DActionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(DActionRuleContext); + } else { + return this.getRuleContext(i, DActionRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_dFileRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterDFileRule) { + listener.enterDFileRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitDFileRule) { + listener.exitDFileRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitDFileRule) { + return visitor.visitDFileRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DActionRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_dActionRule; } + public copyFrom(ctx: DActionRuleContext): void { + super.copyFrom(ctx); + } +} +export class BeginDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _nonPausing!: StringRuleContext; + public _stateRule!: StateRuleContext; + public _states: StateRuleContext[] = []; + public BEGIN(): TerminalNode { return this.getToken(DParser.BEGIN, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext | undefined { + return this.tryGetRuleContext(0, StringRuleContext); + } + public stateRule(): StateRuleContext[]; + public stateRule(i: number): StateRuleContext; + public stateRule(i?: number): StateRuleContext | StateRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StateRuleContext); + } else { + return this.getRuleContext(i, StateRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterBeginDAction) { + listener.enterBeginDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitBeginDAction) { + listener.exitBeginDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitBeginDAction) { + return visitor.visitBeginDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AppendDActionContext extends DActionRuleContext { + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _stateRule!: StateRuleContext; + public _states: StateRuleContext[] = []; + public APPEND(): TerminalNode { return this.getToken(DParser.APPEND, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + public stateRule(): StateRuleContext[]; + public stateRule(i: number): StateRuleContext; + public stateRule(i?: number): StateRuleContext | StateRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StateRuleContext); + } else { + return this.getRuleContext(i, StateRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAppendDAction) { + listener.enterAppendDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAppendDAction) { + listener.exitAppendDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAppendDAction) { + return visitor.visitAppendDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AppendEarlyDActionContext extends DActionRuleContext { + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _stateRule!: StateRuleContext; + public _states: StateRuleContext[] = []; + public APPEND_EARLY(): TerminalNode { return this.getToken(DParser.APPEND_EARLY, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + public stateRule(): StateRuleContext[]; + public stateRule(i: number): StateRuleContext; + public stateRule(i?: number): StateRuleContext | StateRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StateRuleContext); + } else { + return this.getRuleContext(i, StateRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAppendEarlyDAction) { + listener.enterAppendEarlyDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAppendEarlyDAction) { + listener.exitAppendEarlyDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAppendEarlyDAction) { + return visitor.visitAppendEarlyDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ChainDActionContext extends DActionRuleContext { + public _weight!: SharpNumberRuleContext; + public _trigger!: StringRuleContext; + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public _body!: ChainDlgRuleContext; + public _epilog!: ChainActionEpilogRuleContext; + public CHAIN(): TerminalNode { return this.getToken(DParser.CHAIN, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public chainDlgRule(): ChainDlgRuleContext { + return this.getRuleContext(0, ChainDlgRuleContext); + } + public chainActionEpilogRule(): ChainActionEpilogRuleContext { + return this.getRuleContext(0, ChainActionEpilogRuleContext); + } + public IF(): TerminalNode | undefined { return this.tryGetToken(DParser.IF, 0); } + public THEN(): TerminalNode | undefined { return this.tryGetToken(DParser.THEN, 0); } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + public WEIGHT(): TerminalNode | undefined { return this.tryGetToken(DParser.WEIGHT, 0); } + public sharpNumberRule(): SharpNumberRuleContext | undefined { + return this.tryGetRuleContext(0, SharpNumberRuleContext); + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChainDAction) { + listener.enterChainDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChainDAction) { + listener.exitChainDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChainDAction) { + return visitor.visitChainDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InterjectDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public _globalVar!: StringRuleContext; + public _chainBlockRule!: ChainBlockRuleContext; + public _blocks: ChainBlockRuleContext[] = []; + public _epilog!: ChainActionEpilogRuleContext; + public INTERJECT(): TerminalNode { return this.getToken(DParser.INTERJECT, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public chainActionEpilogRule(): ChainActionEpilogRuleContext { + return this.getRuleContext(0, ChainActionEpilogRuleContext); + } + public chainBlockRule(): ChainBlockRuleContext[]; + public chainBlockRule(i: number): ChainBlockRuleContext; + public chainBlockRule(i?: number): ChainBlockRuleContext | ChainBlockRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainBlockRuleContext); + } else { + return this.getRuleContext(i, ChainBlockRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterInterjectDAction) { + listener.enterInterjectDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitInterjectDAction) { + listener.exitInterjectDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitInterjectDAction) { + return visitor.visitInterjectDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InterjectCopyTransDActionContext extends DActionRuleContext { + public _v1!: Token; + public _v2!: Token; + public _v3!: Token; + public _v4!: Token; + public _safe!: Token; + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public _globalVar!: StringRuleContext; + public _chainBlockRule!: ChainBlockRuleContext; + public _blocks: ChainBlockRuleContext[] = []; + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public INTERJECT_COPY_TRANS(): TerminalNode | undefined { return this.tryGetToken(DParser.INTERJECT_COPY_TRANS, 0); } + public INTERJECT_COPY_TRANS2(): TerminalNode | undefined { return this.tryGetToken(DParser.INTERJECT_COPY_TRANS2, 0); } + public INTERJECT_COPY_TRANS3(): TerminalNode | undefined { return this.tryGetToken(DParser.INTERJECT_COPY_TRANS3, 0); } + public INTERJECT_COPY_TRANS4(): TerminalNode | undefined { return this.tryGetToken(DParser.INTERJECT_COPY_TRANS4, 0); } + public SAFE(): TerminalNode | undefined { return this.tryGetToken(DParser.SAFE, 0); } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + public chainBlockRule(): ChainBlockRuleContext[]; + public chainBlockRule(i: number): ChainBlockRuleContext; + public chainBlockRule(i?: number): ChainBlockRuleContext | ChainBlockRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainBlockRuleContext); + } else { + return this.getRuleContext(i, ChainBlockRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterInterjectCopyTransDAction) { + listener.enterInterjectCopyTransDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitInterjectCopyTransDAction) { + listener.exitInterjectCopyTransDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitInterjectCopyTransDAction) { + return visitor.visitInterjectCopyTransDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExtendTopBottomDActionContext extends DActionRuleContext { + public _top!: Token; + public _bottom!: Token; + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _states: StringRuleContext[] = []; + public _position!: SharpNumberRuleContext; + public _transitionRule!: TransitionRuleContext; + public _transitions: TransitionRuleContext[] = []; + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public EXTEND_TOP(): TerminalNode | undefined { return this.tryGetToken(DParser.EXTEND_TOP, 0); } + public EXTEND_BOTTOM(): TerminalNode | undefined { return this.tryGetToken(DParser.EXTEND_BOTTOM, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public sharpNumberRule(): SharpNumberRuleContext | undefined { + return this.tryGetRuleContext(0, SharpNumberRuleContext); + } + public transitionRule(): TransitionRuleContext[]; + public transitionRule(i: number): TransitionRuleContext; + public transitionRule(i?: number): TransitionRuleContext | TransitionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(TransitionRuleContext); + } else { + return this.getRuleContext(i, TransitionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterExtendTopBottomDAction) { + listener.enterExtendTopBottomDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitExtendTopBottomDAction) { + listener.exitExtendTopBottomDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitExtendTopBottomDAction) { + return visitor.visitExtendTopBottomDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AddStateTriggerDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _trigger!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public ADD_STATE_TRIGGER(): TerminalNode { return this.getToken(DParser.ADD_STATE_TRIGGER, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAddStateTriggerDAction) { + listener.enterAddStateTriggerDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAddStateTriggerDAction) { + listener.exitAddStateTriggerDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAddStateTriggerDAction) { + return visitor.visitAddStateTriggerDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AddTransTriggerDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _trigger!: StringRuleContext; + public _tras: StringRuleContext[] = []; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public ADD_TRANS_TRIGGER(): TerminalNode { return this.getToken(DParser.ADD_TRANS_TRIGGER, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public DO(): TerminalNode | undefined { return this.tryGetToken(DParser.DO, 0); } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAddTransTriggerDAction) { + listener.enterAddTransTriggerDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAddTransTriggerDAction) { + listener.exitAddTransTriggerDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAddTransTriggerDAction) { + return visitor.visitAddTransTriggerDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AddTransActionDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _tras: StringRuleContext[] = []; + public _action!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public ADD_TRANS_ACTION(): TerminalNode { return this.getToken(DParser.ADD_TRANS_ACTION, 0); } + public BEGIN(): TerminalNode[]; + public BEGIN(i: number): TerminalNode; + public BEGIN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.BEGIN); + } else { + return this.getToken(DParser.BEGIN, i); + } + } + public END(): TerminalNode[]; + public END(i: number): TerminalNode; + public END(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.END); + } else { + return this.getToken(DParser.END, i); + } + } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAddTransActionDAction) { + listener.enterAddTransActionDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAddTransActionDAction) { + listener.exitAddTransActionDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAddTransActionDAction) { + return visitor.visitAddTransActionDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceTransActionDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _tras: StringRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_TRANS_ACTION(): TerminalNode { return this.getToken(DParser.REPLACE_TRANS_ACTION, 0); } + public BEGIN(): TerminalNode[]; + public BEGIN(i: number): TerminalNode; + public BEGIN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.BEGIN); + } else { + return this.getToken(DParser.BEGIN, i); + } + } + public END(): TerminalNode[]; + public END(i: number): TerminalNode; + public END(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.END); + } else { + return this.getToken(DParser.END, i); + } + } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceTransActionDAction) { + listener.enterReplaceTransActionDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceTransActionDAction) { + listener.exitReplaceTransActionDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceTransActionDAction) { + return visitor.visitReplaceTransActionDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceTransTriggerDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _tras: StringRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_TRANS_TRIGGER(): TerminalNode { return this.getToken(DParser.REPLACE_TRANS_TRIGGER, 0); } + public BEGIN(): TerminalNode[]; + public BEGIN(i: number): TerminalNode; + public BEGIN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.BEGIN); + } else { + return this.getToken(DParser.BEGIN, i); + } + } + public END(): TerminalNode[]; + public END(i: number): TerminalNode; + public END(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.END); + } else { + return this.getToken(DParser.END, i); + } + } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceTransTriggerDAction) { + listener.enterReplaceTransTriggerDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceTransTriggerDAction) { + listener.exitReplaceTransTriggerDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceTransTriggerDAction) { + return visitor.visitReplaceTransTriggerDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AlterTransDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _tras: StringRuleContext[] = []; + public _alterTransCommand!: AlterTransCommandContext; + public _changes: AlterTransCommandContext[] = []; + public ALTER_TRANS(): TerminalNode { return this.getToken(DParser.ALTER_TRANS, 0); } + public BEGIN(): TerminalNode[]; + public BEGIN(i: number): TerminalNode; + public BEGIN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.BEGIN); + } else { + return this.getToken(DParser.BEGIN, i); + } + } + public END(): TerminalNode[]; + public END(i: number): TerminalNode; + public END(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.END); + } else { + return this.getToken(DParser.END, i); + } + } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public alterTransCommand(): AlterTransCommandContext[]; + public alterTransCommand(i: number): AlterTransCommandContext; + public alterTransCommand(i?: number): AlterTransCommandContext | AlterTransCommandContext[] { + if (i === undefined) { + return this.getRuleContexts(AlterTransCommandContext); + } else { + return this.getRuleContext(i, AlterTransCommandContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAlterTransDAction) { + listener.enterAlterTransDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAlterTransDAction) { + listener.exitAlterTransDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAlterTransDAction) { + return visitor.visitAlterTransDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stateRule!: StateRuleContext; + public _newStates: StateRuleContext[] = []; + public REPLACE(): TerminalNode { return this.getToken(DParser.REPLACE, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stateRule(): StateRuleContext[]; + public stateRule(i: number): StateRuleContext; + public stateRule(i?: number): StateRuleContext | StateRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StateRuleContext); + } else { + return this.getRuleContext(i, StateRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceDAction) { + listener.enterReplaceDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceDAction) { + listener.exitReplaceDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceDAction) { + return visitor.visitReplaceDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SetWeightDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public _weight!: SharpNumberRuleContext; + public SET_WEIGHT(): TerminalNode { return this.getToken(DParser.SET_WEIGHT, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public sharpNumberRule(): SharpNumberRuleContext { + return this.getRuleContext(0, SharpNumberRuleContext); + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterSetWeightDAction) { + listener.enterSetWeightDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitSetWeightDAction) { + listener.exitSetWeightDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitSetWeightDAction) { + return visitor.visitSetWeightDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceSayDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public _newVal!: SayTextRuleContext; + public REPLACE_SAY(): TerminalNode { return this.getToken(DParser.REPLACE_SAY, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public sayTextRule(): SayTextRuleContext { + return this.getRuleContext(0, SayTextRuleContext); + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceSayDAction) { + listener.enterReplaceSayDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceSayDAction) { + listener.exitReplaceSayDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceSayDAction) { + return visitor.visitReplaceSayDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceStateTriggerDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _stringRule!: StringRuleContext; + public _labels: StringRuleContext[] = []; + public _trigger!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_STATE_TRIGGER(): TerminalNode { return this.getToken(DParser.REPLACE_STATE_TRIGGER, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceStateTriggerDAction) { + listener.enterReplaceStateTriggerDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceStateTriggerDAction) { + listener.exitReplaceStateTriggerDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceStateTriggerDAction) { + return visitor.visitReplaceStateTriggerDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceTriggerTextDActionContext extends DActionRuleContext { + public _dlg!: FileRuleContext; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_TRIGGER_TEXT(): TerminalNode { return this.getToken(DParser.REPLACE_TRIGGER_TEXT, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceTriggerTextDAction) { + listener.enterReplaceTriggerTextDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceTriggerTextDAction) { + listener.exitReplaceTriggerTextDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceTriggerTextDAction) { + return visitor.visitReplaceTriggerTextDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceTriggerTextRegexpDActionContext extends DActionRuleContext { + public _dlgRegexp!: StringRuleContext; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_TRIGGER_TEXT_REGEXP(): TerminalNode { return this.getToken(DParser.REPLACE_TRIGGER_TEXT_REGEXP, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceTriggerTextRegexpDAction) { + listener.enterReplaceTriggerTextRegexpDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceTriggerTextRegexpDAction) { + listener.exitReplaceTriggerTextRegexpDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceTriggerTextRegexpDAction) { + return visitor.visitReplaceTriggerTextRegexpDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceActionTextDActionContext extends DActionRuleContext { + public _fileRule!: FileRuleContext; + public _dlgs: FileRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_ACTION_TEXT(): TerminalNode { return this.getToken(DParser.REPLACE_ACTION_TEXT, 0); } + public fileRule(): FileRuleContext[]; + public fileRule(i: number): FileRuleContext; + public fileRule(i?: number): FileRuleContext | FileRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(FileRuleContext); + } else { + return this.getRuleContext(i, FileRuleContext); + } + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceActionTextDAction) { + listener.enterReplaceActionTextDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceActionTextDAction) { + listener.exitReplaceActionTextDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceActionTextDAction) { + return visitor.visitReplaceActionTextDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceActionTextRegexpDActionContext extends DActionRuleContext { + public _stringRule!: StringRuleContext; + public _dlgRegexps: StringRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_ACTION_TEXT_REGEXP(): TerminalNode { return this.getToken(DParser.REPLACE_ACTION_TEXT_REGEXP, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceActionTextRegexpDAction) { + listener.enterReplaceActionTextRegexpDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceActionTextRegexpDAction) { + listener.exitReplaceActionTextRegexpDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceActionTextRegexpDAction) { + return visitor.visitReplaceActionTextRegexpDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceActionTextProcessDActionContext extends DActionRuleContext { + public _fileRule!: FileRuleContext; + public _dlgs: FileRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_ACTION_TEXT_PROCESS(): TerminalNode { return this.getToken(DParser.REPLACE_ACTION_TEXT_PROCESS, 0); } + public fileRule(): FileRuleContext[]; + public fileRule(i: number): FileRuleContext; + public fileRule(i?: number): FileRuleContext | FileRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(FileRuleContext); + } else { + return this.getRuleContext(i, FileRuleContext); + } + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceActionTextProcessDAction) { + listener.enterReplaceActionTextProcessDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceActionTextProcessDAction) { + listener.exitReplaceActionTextProcessDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceActionTextProcessDAction) { + return visitor.visitReplaceActionTextProcessDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplaceActionTextProcessRegexpDActionContext extends DActionRuleContext { + public _stringRule!: StringRuleContext; + public _dlgRegexps: StringRuleContext[] = []; + public _oldText!: StringRuleContext; + public _newText!: StringRuleContext; + public _conditionRule!: ConditionRuleContext; + public _conditions: ConditionRuleContext[] = []; + public REPLACE_ACTION_TEXT_PROCESS_REGEXP(): TerminalNode { return this.getToken(DParser.REPLACE_ACTION_TEXT_PROCESS_REGEXP, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public conditionRule(): ConditionRuleContext[]; + public conditionRule(i: number): ConditionRuleContext; + public conditionRule(i?: number): ConditionRuleContext | ConditionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ConditionRuleContext); + } else { + return this.getRuleContext(i, ConditionRuleContext); + } + } + constructor(ctx: DActionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplaceActionTextProcessRegexpDAction) { + listener.enterReplaceActionTextProcessRegexpDAction(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplaceActionTextProcessRegexpDAction) { + listener.exitReplaceActionTextProcessRegexpDAction(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplaceActionTextProcessRegexpDAction) { + return visitor.visitReplaceActionTextProcessRegexpDAction(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AlterTransCommandContext extends ParserRuleContext { + public _type!: StringRuleContext; + public _newVal!: StringRuleContext; + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_alterTransCommand; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAlterTransCommand) { + listener.enterAlterTransCommand(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAlterTransCommand) { + listener.exitAlterTransCommand(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAlterTransCommand) { + return visitor.visitAlterTransCommand(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ConditionRuleContext extends ParserRuleContext { + public _isIf!: Token; + public _isUnless!: Token; + public _predicate!: StringRuleContext; + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public IF(): TerminalNode | undefined { return this.tryGetToken(DParser.IF, 0); } + public UNLESS(): TerminalNode | undefined { return this.tryGetToken(DParser.UNLESS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_conditionRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterConditionRule) { + listener.enterConditionRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitConditionRule) { + listener.exitConditionRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitConditionRule) { + return visitor.visitConditionRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StateRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_stateRule; } + public copyFrom(ctx: StateRuleContext): void { + super.copyFrom(ctx); + } +} +export class IfThenStateContext extends StateRuleContext { + public _weight!: SharpNumberRuleContext; + public _trigger!: StringRuleContext; + public _label!: StringRuleContext; + public _sayTextRule!: SayTextRuleContext; + public _lines: SayTextRuleContext[] = []; + public _transitionRule!: TransitionRuleContext; + public _transitions: TransitionRuleContext[] = []; + public IF(): TerminalNode { return this.getToken(DParser.IF, 0); } + public SAY(): TerminalNode { return this.getToken(DParser.SAY, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public sayTextRule(): SayTextRuleContext[]; + public sayTextRule(i: number): SayTextRuleContext; + public sayTextRule(i?: number): SayTextRuleContext | SayTextRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(SayTextRuleContext); + } else { + return this.getRuleContext(i, SayTextRuleContext); + } + } + public WEIGHT(): TerminalNode | undefined { return this.tryGetToken(DParser.WEIGHT, 0); } + public THEN(): TerminalNode | undefined { return this.tryGetToken(DParser.THEN, 0); } + public BEGIN(): TerminalNode | undefined { return this.tryGetToken(DParser.BEGIN, 0); } + public EQ(): TerminalNode[]; + public EQ(i: number): TerminalNode; + public EQ(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.EQ); + } else { + return this.getToken(DParser.EQ, i); + } + } + public sharpNumberRule(): SharpNumberRuleContext | undefined { + return this.tryGetRuleContext(0, SharpNumberRuleContext); + } + public transitionRule(): TransitionRuleContext[]; + public transitionRule(i: number): TransitionRuleContext; + public transitionRule(i?: number): TransitionRuleContext | TransitionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(TransitionRuleContext); + } else { + return this.getRuleContext(i, TransitionRuleContext); + } + } + constructor(ctx: StateRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterIfThenState) { + listener.enterIfThenState(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitIfThenState) { + listener.exitIfThenState(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitIfThenState) { + return visitor.visitIfThenState(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class AppendiStateContext extends StateRuleContext { + public _dlg!: FileRuleContext; + public _stateRule!: StateRuleContext; + public _states: StateRuleContext[] = []; + public APPENDI(): TerminalNode { return this.getToken(DParser.APPENDI, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stateRule(): StateRuleContext[]; + public stateRule(i: number): StateRuleContext; + public stateRule(i?: number): StateRuleContext | StateRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StateRuleContext); + } else { + return this.getRuleContext(i, StateRuleContext); + } + } + constructor(ctx: StateRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterAppendiState) { + listener.enterAppendiState(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitAppendiState) { + listener.exitAppendiState(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitAppendiState) { + return visitor.visitAppendiState(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class Chain2StateContext extends StateRuleContext { + public _dlg!: FileRuleContext; + public _entryLabel!: StringRuleContext; + public _body!: Chain2DlgRuleContext; + public _exitDlg!: FileRuleContext; + public _exitLabel!: StringRuleContext; + public CHAIN2(): TerminalNode { return this.getToken(DParser.CHAIN2, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext[]; + public fileRule(i: number): FileRuleContext; + public fileRule(i?: number): FileRuleContext | FileRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(FileRuleContext); + } else { + return this.getRuleContext(i, FileRuleContext); + } + } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public chain2DlgRule(): Chain2DlgRuleContext { + return this.getRuleContext(0, Chain2DlgRuleContext); + } + constructor(ctx: StateRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChain2State) { + listener.enterChain2State(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChain2State) { + listener.exitChain2State(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChain2State) { + return visitor.visitChain2State(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class Chain2DlgRuleContext extends ParserRuleContext { + public _initialLine!: ChainElementRuleContext; + public _chain2ElementRule!: Chain2ElementRuleContext; + public _restLines: Chain2ElementRuleContext[] = []; + public chainElementRule(): ChainElementRuleContext { + return this.getRuleContext(0, ChainElementRuleContext); + } + public chain2ElementRule(): Chain2ElementRuleContext[]; + public chain2ElementRule(i: number): Chain2ElementRuleContext; + public chain2ElementRule(i?: number): Chain2ElementRuleContext | Chain2ElementRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(Chain2ElementRuleContext); + } else { + return this.getRuleContext(i, Chain2ElementRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chain2DlgRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChain2DlgRule) { + listener.enterChain2DlgRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChain2DlgRule) { + listener.exitChain2DlgRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChain2DlgRule) { + return visitor.visitChain2DlgRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class Chain2ElementRuleContext extends ParserRuleContext { + public _operator!: Token; + public _line!: ChainElementRuleContext; + public chainElementRule(): ChainElementRuleContext { + return this.getRuleContext(0, ChainElementRuleContext); + } + public EQEQ(): TerminalNode | undefined { return this.tryGetToken(DParser.EQEQ, 0); } + public EQ(): TerminalNode | undefined { return this.tryGetToken(DParser.EQ, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chain2ElementRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChain2ElementRule) { + listener.enterChain2ElementRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChain2ElementRule) { + listener.exitChain2ElementRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChain2ElementRule) { + return visitor.visitChain2ElementRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TransitionRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_transitionRule; } + public copyFrom(ctx: TransitionRuleContext): void { + super.copyFrom(ctx); + } +} +export class IfThenTransitionContext extends TransitionRuleContext { + public _trigger!: StringRuleContext; + public _transitionFeatureRule!: TransitionFeatureRuleContext; + public _features: TransitionFeatureRuleContext[] = []; + public _transitionTargetRule!: TransitionTargetRuleContext; + public _out: TransitionTargetRuleContext[] = []; + public IF(): TerminalNode { return this.getToken(DParser.IF, 0); } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public transitionTargetRule(): TransitionTargetRuleContext { + return this.getRuleContext(0, TransitionTargetRuleContext); + } + public THEN(): TerminalNode | undefined { return this.tryGetToken(DParser.THEN, 0); } + public transitionFeatureRule(): TransitionFeatureRuleContext[]; + public transitionFeatureRule(i: number): TransitionFeatureRuleContext; + public transitionFeatureRule(i?: number): TransitionFeatureRuleContext | TransitionFeatureRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(TransitionFeatureRuleContext); + } else { + return this.getRuleContext(i, TransitionFeatureRuleContext); + } + } + constructor(ctx: TransitionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterIfThenTransition) { + listener.enterIfThenTransition(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitIfThenTransition) { + listener.exitIfThenTransition(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitIfThenTransition) { + return visitor.visitIfThenTransition(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReplyTransitionContext extends TransitionRuleContext { + public _trigger!: StringRuleContext; + public _reply!: SayTextRuleContext; + public _transitionFeatureRule!: TransitionFeatureRuleContext; + public _features: TransitionFeatureRuleContext[] = []; + public _transitionTargetRule!: TransitionTargetRuleContext; + public _out: TransitionTargetRuleContext[] = []; + public PLUS(): TerminalNode[]; + public PLUS(i: number): TerminalNode; + public PLUS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.PLUS); + } else { + return this.getToken(DParser.PLUS, i); + } + } + public sayTextRule(): SayTextRuleContext { + return this.getRuleContext(0, SayTextRuleContext); + } + public transitionTargetRule(): TransitionTargetRuleContext { + return this.getRuleContext(0, TransitionTargetRuleContext); + } + public stringRule(): StringRuleContext | undefined { + return this.tryGetRuleContext(0, StringRuleContext); + } + public transitionFeatureRule(): TransitionFeatureRuleContext[]; + public transitionFeatureRule(i: number): TransitionFeatureRuleContext; + public transitionFeatureRule(i?: number): TransitionFeatureRuleContext | TransitionFeatureRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(TransitionFeatureRuleContext); + } else { + return this.getRuleContext(i, TransitionFeatureRuleContext); + } + } + constructor(ctx: TransitionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplyTransition) { + listener.enterReplyTransition(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplyTransition) { + listener.exitReplyTransition(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplyTransition) { + return visitor.visitReplyTransition(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CopyTransTransitionContext extends TransitionRuleContext { + public _safe!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public COPY_TRANS(): TerminalNode { return this.getToken(DParser.COPY_TRANS, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public SAFE(): TerminalNode | undefined { return this.tryGetToken(DParser.SAFE, 0); } + constructor(ctx: TransitionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterCopyTransTransition) { + listener.enterCopyTransTransition(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitCopyTransTransition) { + listener.exitCopyTransTransition(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitCopyTransTransition) { + return visitor.visitCopyTransTransition(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CopyTransLateTransitionContext extends TransitionRuleContext { + public _safe!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public COPY_TRANS_LATE(): TerminalNode { return this.getToken(DParser.COPY_TRANS_LATE, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public SAFE(): TerminalNode | undefined { return this.tryGetToken(DParser.SAFE, 0); } + constructor(ctx: TransitionRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterCopyTransLateTransition) { + listener.enterCopyTransLateTransition(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitCopyTransLateTransition) { + listener.exitCopyTransLateTransition(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitCopyTransLateTransition) { + return visitor.visitCopyTransLateTransition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TransitionTargetRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_transitionTargetRule; } + public copyFrom(ctx: TransitionTargetRuleContext): void { + super.copyFrom(ctx); + } +} +export class GotoTransitionTargetContext extends TransitionTargetRuleContext { + public _label!: StringRuleContext; + public GOTO(): TerminalNode | undefined { return this.tryGetToken(DParser.GOTO, 0); } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(DParser.PLUS, 0); } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(ctx: TransitionTargetRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterGotoTransitionTarget) { + listener.enterGotoTransitionTarget(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitGotoTransitionTarget) { + listener.exitGotoTransitionTarget(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitGotoTransitionTarget) { + return visitor.visitGotoTransitionTarget(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExternTransitionTargetContext extends TransitionTargetRuleContext { + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public EXTERN(): TerminalNode { return this.getToken(DParser.EXTERN, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + constructor(ctx: TransitionTargetRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterExternTransitionTarget) { + listener.enterExternTransitionTarget(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitExternTransitionTarget) { + listener.exitExternTransitionTarget(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitExternTransitionTarget) { + return visitor.visitExternTransitionTarget(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExitTransitionTargetContext extends TransitionTargetRuleContext { + public EXIT(): TerminalNode { return this.getToken(DParser.EXIT, 0); } + constructor(ctx: TransitionTargetRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterExitTransitionTarget) { + listener.enterExitTransitionTarget(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitExitTransitionTarget) { + listener.exitExitTransitionTarget(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitExitTransitionTarget) { + return visitor.visitExitTransitionTarget(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ChainActionEpilogRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chainActionEpilogRule; } + public copyFrom(ctx: ChainActionEpilogRuleContext): void { + super.copyFrom(ctx); + } +} +export class EndChainActionEpilogContext extends ChainActionEpilogRuleContext { + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterEndChainActionEpilog) { + listener.enterEndChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitEndChainActionEpilog) { + listener.exitEndChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitEndChainActionEpilog) { + return visitor.visitEndChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExternChainActionEpilogContext extends ChainActionEpilogRuleContext { + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public EXTERN(): TerminalNode { return this.getToken(DParser.EXTERN, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterExternChainActionEpilog) { + listener.enterExternChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitExternChainActionEpilog) { + listener.exitExternChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitExternChainActionEpilog) { + return visitor.visitExternChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CopyTransChainActionEpilogContext extends ChainActionEpilogRuleContext { + public _safe!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public COPY_TRANS(): TerminalNode { return this.getToken(DParser.COPY_TRANS, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public SAFE(): TerminalNode | undefined { return this.tryGetToken(DParser.SAFE, 0); } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterCopyTransChainActionEpilog) { + listener.enterCopyTransChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitCopyTransChainActionEpilog) { + listener.exitCopyTransChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitCopyTransChainActionEpilog) { + return visitor.visitCopyTransChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CopyTransLateChainActionEpilogContext extends ChainActionEpilogRuleContext { + public _safe!: Token; + public _dlg!: FileRuleContext; + public _label!: StringRuleContext; + public COPY_TRANS_LATE(): TerminalNode { return this.getToken(DParser.COPY_TRANS_LATE, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public SAFE(): TerminalNode | undefined { return this.tryGetToken(DParser.SAFE, 0); } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterCopyTransLateChainActionEpilog) { + listener.enterCopyTransLateChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitCopyTransLateChainActionEpilog) { + listener.exitCopyTransLateChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitCopyTransLateChainActionEpilog) { + return visitor.visitCopyTransLateChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ExitChainActionEpilogContext extends ChainActionEpilogRuleContext { + public EXIT(): TerminalNode { return this.getToken(DParser.EXIT, 0); } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterExitChainActionEpilog) { + listener.enterExitChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitExitChainActionEpilog) { + listener.exitExitChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitExitChainActionEpilog) { + return visitor.visitExitChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class EndWithTransitionsChainActionEpilogContext extends ChainActionEpilogRuleContext { + public _transitionRule!: TransitionRuleContext; + public _transitions: TransitionRuleContext[] = []; + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public transitionRule(): TransitionRuleContext[]; + public transitionRule(i: number): TransitionRuleContext; + public transitionRule(i?: number): TransitionRuleContext | TransitionRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(TransitionRuleContext); + } else { + return this.getRuleContext(i, TransitionRuleContext); + } + } + constructor(ctx: ChainActionEpilogRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterEndWithTransitionsChainActionEpilog) { + listener.enterEndWithTransitionsChainActionEpilog(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitEndWithTransitionsChainActionEpilog) { + listener.exitEndWithTransitionsChainActionEpilog(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitEndWithTransitionsChainActionEpilog) { + return visitor.visitEndWithTransitionsChainActionEpilog(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TransitionFeatureRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_transitionFeatureRule; } + public copyFrom(ctx: TransitionFeatureRuleContext): void { + super.copyFrom(ctx); + } +} +export class ReplyTransitionFeatureContext extends TransitionFeatureRuleContext { + public _line!: DlgLineRuleContext; + public REPLY(): TerminalNode { return this.getToken(DParser.REPLY, 0); } + public dlgLineRule(): DlgLineRuleContext { + return this.getRuleContext(0, DlgLineRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReplyTransitionFeature) { + listener.enterReplyTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReplyTransitionFeature) { + listener.exitReplyTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReplyTransitionFeature) { + return visitor.visitReplyTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class DoTransitionFeatureContext extends TransitionFeatureRuleContext { + public _action!: StringRuleContext; + public DO(): TerminalNode { return this.getToken(DParser.DO, 0); } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterDoTransitionFeature) { + listener.enterDoTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitDoTransitionFeature) { + listener.exitDoTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitDoTransitionFeature) { + return visitor.visitDoTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class JournalTransitionFeatureContext extends TransitionFeatureRuleContext { + public _entry!: DlgLineRuleContext; + public JOURNAL(): TerminalNode { return this.getToken(DParser.JOURNAL, 0); } + public dlgLineRule(): DlgLineRuleContext { + return this.getRuleContext(0, DlgLineRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterJournalTransitionFeature) { + listener.enterJournalTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitJournalTransitionFeature) { + listener.exitJournalTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitJournalTransitionFeature) { + return visitor.visitJournalTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class SolvedJournalTransitionFeatureContext extends TransitionFeatureRuleContext { + public _entry!: DlgLineRuleContext; + public SOLVED_JOURNAL(): TerminalNode { return this.getToken(DParser.SOLVED_JOURNAL, 0); } + public dlgLineRule(): DlgLineRuleContext { + return this.getRuleContext(0, DlgLineRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterSolvedJournalTransitionFeature) { + listener.enterSolvedJournalTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitSolvedJournalTransitionFeature) { + listener.exitSolvedJournalTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitSolvedJournalTransitionFeature) { + return visitor.visitSolvedJournalTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnsolvedJournalTransitionFeatureContext extends TransitionFeatureRuleContext { + public _entry!: DlgLineRuleContext; + public UNSOLVED_JOURNAL(): TerminalNode { return this.getToken(DParser.UNSOLVED_JOURNAL, 0); } + public dlgLineRule(): DlgLineRuleContext { + return this.getRuleContext(0, DlgLineRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterUnsolvedJournalTransitionFeature) { + listener.enterUnsolvedJournalTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitUnsolvedJournalTransitionFeature) { + listener.exitUnsolvedJournalTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitUnsolvedJournalTransitionFeature) { + return visitor.visitUnsolvedJournalTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FlagsTransitionFeatureContext extends TransitionFeatureRuleContext { + public _flags!: StringRuleContext; + public FLAGS(): TerminalNode { return this.getToken(DParser.FLAGS, 0); } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(ctx: TransitionFeatureRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterFlagsTransitionFeature) { + listener.enterFlagsTransitionFeature(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitFlagsTransitionFeature) { + listener.exitFlagsTransitionFeature(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitFlagsTransitionFeature) { + return visitor.visitFlagsTransitionFeature(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ChainDlgRuleContext extends ParserRuleContext { + public _trigger!: StringRuleContext; + public _chainElementRule!: ChainElementRuleContext; + public _initialSpeakerLines: ChainElementRuleContext[] = []; + public _chainBlockRule!: ChainBlockRuleContext; + public _blocks: ChainBlockRuleContext[] = []; + public chainElementRule(): ChainElementRuleContext[]; + public chainElementRule(i: number): ChainElementRuleContext; + public chainElementRule(i?: number): ChainElementRuleContext | ChainElementRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainElementRuleContext); + } else { + return this.getRuleContext(i, ChainElementRuleContext); + } + } + public IF(): TerminalNode | undefined { return this.tryGetToken(DParser.IF, 0); } + public THEN(): TerminalNode | undefined { return this.tryGetToken(DParser.THEN, 0); } + public EQ(): TerminalNode[]; + public EQ(i: number): TerminalNode; + public EQ(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.EQ); + } else { + return this.getToken(DParser.EQ, i); + } + } + public stringRule(): StringRuleContext | undefined { + return this.tryGetRuleContext(0, StringRuleContext); + } + public chainBlockRule(): ChainBlockRuleContext[]; + public chainBlockRule(i: number): ChainBlockRuleContext; + public chainBlockRule(i?: number): ChainBlockRuleContext | ChainBlockRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainBlockRuleContext); + } else { + return this.getRuleContext(i, ChainBlockRuleContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chainDlgRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChainDlgRule) { + listener.enterChainDlgRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChainDlgRule) { + listener.exitChainDlgRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChainDlgRule) { + return visitor.visitChainDlgRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ChainBlockRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chainBlockRule; } + public copyFrom(ctx: ChainBlockRuleContext): void { + super.copyFrom(ctx); + } +} +export class MonologChainBlockContext extends ChainBlockRuleContext { + public _ifExists!: Token; + public _dlg!: FileRuleContext; + public _chainElementRule!: ChainElementRuleContext; + public _elements: ChainElementRuleContext[] = []; + public EQEQ(): TerminalNode { return this.getToken(DParser.EQEQ, 0); } + public fileRule(): FileRuleContext { + return this.getRuleContext(0, FileRuleContext); + } + public chainElementRule(): ChainElementRuleContext[]; + public chainElementRule(i: number): ChainElementRuleContext; + public chainElementRule(i?: number): ChainElementRuleContext | ChainElementRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainElementRuleContext); + } else { + return this.getRuleContext(i, ChainElementRuleContext); + } + } + public EQ(): TerminalNode[]; + public EQ(i: number): TerminalNode; + public EQ(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.EQ); + } else { + return this.getToken(DParser.EQ, i); + } + } + public IF_FILE_EXISTS(): TerminalNode | undefined { return this.tryGetToken(DParser.IF_FILE_EXISTS, 0); } + constructor(ctx: ChainBlockRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterMonologChainBlock) { + listener.enterMonologChainBlock(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitMonologChainBlock) { + listener.exitMonologChainBlock(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitMonologChainBlock) { + return visitor.visitMonologChainBlock(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BranchChainBlockContext extends ChainBlockRuleContext { + public _trigger!: StringRuleContext; + public _chainBlockRule!: ChainBlockRuleContext; + public _blocks: ChainBlockRuleContext[] = []; + public BRANCH(): TerminalNode { return this.getToken(DParser.BRANCH, 0); } + public BEGIN(): TerminalNode { return this.getToken(DParser.BEGIN, 0); } + public END(): TerminalNode { return this.getToken(DParser.END, 0); } + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public chainBlockRule(): ChainBlockRuleContext[]; + public chainBlockRule(i: number): ChainBlockRuleContext; + public chainBlockRule(i?: number): ChainBlockRuleContext | ChainBlockRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(ChainBlockRuleContext); + } else { + return this.getRuleContext(i, ChainBlockRuleContext); + } + } + constructor(ctx: ChainBlockRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterBranchChainBlock) { + listener.enterBranchChainBlock(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitBranchChainBlock) { + listener.exitBranchChainBlock(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitBranchChainBlock) { + return visitor.visitBranchChainBlock(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ChainElementRuleContext extends ParserRuleContext { + public _trigger!: StringRuleContext; + public _line!: SayTextRuleContext; + public _action!: StringRuleContext; + public sayTextRule(): SayTextRuleContext { + return this.getRuleContext(0, SayTextRuleContext); + } + public IF(): TerminalNode | undefined { return this.tryGetToken(DParser.IF, 0); } + public DO(): TerminalNode | undefined { return this.tryGetToken(DParser.DO, 0); } + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public THEN(): TerminalNode | undefined { return this.tryGetToken(DParser.THEN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_chainElementRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterChainElementRule) { + listener.enterChainElementRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitChainElementRule) { + listener.exitChainElementRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitChainElementRule) { + return visitor.visitChainElementRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FileRuleContext extends ParserRuleContext { + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_fileRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterFileRule) { + listener.enterFileRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitFileRule) { + listener.exitFileRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitFileRule) { + return visitor.visitFileRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SayTextRuleContext extends ParserRuleContext { + public dlgLineRule(): DlgLineRuleContext { + return this.getRuleContext(0, DlgLineRuleContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_sayTextRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterSayTextRule) { + listener.enterSayTextRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitSayTextRule) { + listener.exitSayTextRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitSayTextRule) { + return visitor.visitSayTextRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TraLineRuleContext extends ParserRuleContext { + public _string!: StringRuleContext; + public _ref!: ReferenceRuleContext; + public _dlgLine!: DlgLineRuleContext; + public stringRule(): StringRuleContext | undefined { + return this.tryGetRuleContext(0, StringRuleContext); + } + public referenceRule(): ReferenceRuleContext | undefined { + return this.tryGetRuleContext(0, ReferenceRuleContext); + } + public dlgLineRule(): DlgLineRuleContext | undefined { + return this.tryGetRuleContext(0, DlgLineRuleContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_traLineRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterTraLineRule) { + listener.enterTraLineRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitTraLineRule) { + listener.exitTraLineRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitTraLineRule) { + return visitor.visitTraLineRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class DlgLineRuleContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_dlgLineRule; } + public copyFrom(ctx: DlgLineRuleContext): void { + super.copyFrom(ctx); + } +} +export class GenderedTextContext extends DlgLineRuleContext { + public _maleLine!: StringRuleContext; + public _maleSound!: SoundRuleContext; + public _femaleLine!: StringRuleContext; + public _femaleSound!: SoundRuleContext; + public stringRule(): StringRuleContext[]; + public stringRule(i: number): StringRuleContext; + public stringRule(i?: number): StringRuleContext | StringRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringRuleContext); + } else { + return this.getRuleContext(i, StringRuleContext); + } + } + public soundRule(): SoundRuleContext[]; + public soundRule(i: number): SoundRuleContext; + public soundRule(i?: number): SoundRuleContext | SoundRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(SoundRuleContext); + } else { + return this.getRuleContext(i, SoundRuleContext); + } + } + constructor(ctx: DlgLineRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterGenderedText) { + listener.enterGenderedText(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitGenderedText) { + listener.exitGenderedText(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitGenderedText) { + return visitor.visitGenderedText(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class GenderNeutralTextContext extends DlgLineRuleContext { + public _line!: StringRuleContext; + public _sound!: SoundRuleContext; + public stringRule(): StringRuleContext { + return this.getRuleContext(0, StringRuleContext); + } + public soundRule(): SoundRuleContext | undefined { + return this.tryGetRuleContext(0, SoundRuleContext); + } + constructor(ctx: DlgLineRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterGenderNeutralText) { + listener.enterGenderNeutralText(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitGenderNeutralText) { + listener.exitGenderNeutralText(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitGenderNeutralText) { + return visitor.visitGenderNeutralText(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ReferencedTextContext extends DlgLineRuleContext { + public referenceRule(): ReferenceRuleContext { + return this.getRuleContext(0, ReferenceRuleContext); + } + constructor(ctx: DlgLineRuleContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReferencedText) { + listener.enterReferencedText(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReferencedText) { + listener.exitReferencedText(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReferencedText) { + return visitor.visitReferencedText(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringRuleContext extends ParserRuleContext { + public _stringLiteralRule!: StringLiteralRuleContext; + public _parts: StringLiteralRuleContext[] = []; + public stringLiteralRule(): StringLiteralRuleContext[]; + public stringLiteralRule(i: number): StringLiteralRuleContext; + public stringLiteralRule(i?: number): StringLiteralRuleContext | StringLiteralRuleContext[] { + if (i === undefined) { + return this.getRuleContexts(StringLiteralRuleContext); + } else { + return this.getRuleContext(i, StringLiteralRuleContext); + } + } + public CONCAT(): TerminalNode[]; + public CONCAT(i: number): TerminalNode; + public CONCAT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(DParser.CONCAT); + } else { + return this.getToken(DParser.CONCAT, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_stringRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterStringRule) { + listener.enterStringRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitStringRule) { + listener.exitStringRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitStringRule) { + return visitor.visitStringRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StringLiteralRuleContext extends ParserRuleContext { + public identifierRule(): IdentifierRuleContext | undefined { + return this.tryGetRuleContext(0, IdentifierRuleContext); + } + public PERCENT_STRING(): TerminalNode | undefined { return this.tryGetToken(DParser.PERCENT_STRING, 0); } + public TILDE_STRING(): TerminalNode | undefined { return this.tryGetToken(DParser.TILDE_STRING, 0); } + public LONG_TILDE_STRING(): TerminalNode | undefined { return this.tryGetToken(DParser.LONG_TILDE_STRING, 0); } + public QUOTE_STRING(): TerminalNode | undefined { return this.tryGetToken(DParser.QUOTE_STRING, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_stringLiteralRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterStringLiteralRule) { + listener.enterStringLiteralRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitStringLiteralRule) { + listener.exitStringLiteralRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitStringLiteralRule) { + return visitor.visitStringLiteralRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IdentifierRuleContext extends ParserRuleContext { + public IDENTIFIER(): TerminalNode { return this.getToken(DParser.IDENTIFIER, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_identifierRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterIdentifierRule) { + listener.enterIdentifierRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitIdentifierRule) { + listener.exitIdentifierRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitIdentifierRule) { + return visitor.visitIdentifierRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ReferenceRuleContext extends ParserRuleContext { + public SHARP_NUMBER(): TerminalNode | undefined { return this.tryGetToken(DParser.SHARP_NUMBER, 0); } + public FORCED_STRING_REFERENCE(): TerminalNode | undefined { return this.tryGetToken(DParser.FORCED_STRING_REFERENCE, 0); } + public TRANSLATION_REFERENCE(): TerminalNode | undefined { return this.tryGetToken(DParser.TRANSLATION_REFERENCE, 0); } + public PAREN_OPEN(): TerminalNode | undefined { return this.tryGetToken(DParser.PAREN_OPEN, 0); } + public AT(): TerminalNode | undefined { return this.tryGetToken(DParser.AT, 0); } + public stringRule(): StringRuleContext | undefined { + return this.tryGetRuleContext(0, StringRuleContext); + } + public PAREN_CLOSE(): TerminalNode | undefined { return this.tryGetToken(DParser.PAREN_CLOSE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_referenceRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterReferenceRule) { + listener.enterReferenceRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitReferenceRule) { + listener.exitReferenceRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitReferenceRule) { + return visitor.visitReferenceRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SharpNumberRuleContext extends ParserRuleContext { + public SHARP_NUMBER(): TerminalNode { return this.getToken(DParser.SHARP_NUMBER, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_sharpNumberRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterSharpNumberRule) { + listener.enterSharpNumberRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitSharpNumberRule) { + listener.exitSharpNumberRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitSharpNumberRule) { + return visitor.visitSharpNumberRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class SoundRuleContext extends ParserRuleContext { + public SOUND_STRING(): TerminalNode { return this.getToken(DParser.SOUND_STRING, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return DParser.RULE_soundRule; } + // @Override + public enterRule(listener: DParserListener): void { + if (listener.enterSoundRule) { + listener.enterSoundRule(this); + } + } + // @Override + public exitRule(listener: DParserListener): void { + if (listener.exitSoundRule) { + listener.exitSoundRule(this); + } + } + // @Override + public accept(visitor: DParserVisitor): Result { + if (visitor.visitSoundRule) { + return visitor.visitSoundRule(this); + } else { + return visitor.visitChildren(this); + } + } +} + + diff --git a/server/src/dparser/DParserListener.ts b/server/src/dparser/DParserListener.ts new file mode 100644 index 0000000..ea75115 --- /dev/null +++ b/server/src/dparser/DParserListener.ts @@ -0,0 +1,1013 @@ +// Generated from ./src/antlr4/lapdu/DParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; + +import { GenderedTextContext } from "./DParser"; +import { GenderNeutralTextContext } from "./DParser"; +import { ReferencedTextContext } from "./DParser"; +import { IfThenStateContext } from "./DParser"; +import { AppendiStateContext } from "./DParser"; +import { Chain2StateContext } from "./DParser"; +import { ReplyTransitionFeatureContext } from "./DParser"; +import { DoTransitionFeatureContext } from "./DParser"; +import { JournalTransitionFeatureContext } from "./DParser"; +import { SolvedJournalTransitionFeatureContext } from "./DParser"; +import { UnsolvedJournalTransitionFeatureContext } from "./DParser"; +import { FlagsTransitionFeatureContext } from "./DParser"; +import { EndChainActionEpilogContext } from "./DParser"; +import { ExternChainActionEpilogContext } from "./DParser"; +import { CopyTransChainActionEpilogContext } from "./DParser"; +import { CopyTransLateChainActionEpilogContext } from "./DParser"; +import { ExitChainActionEpilogContext } from "./DParser"; +import { EndWithTransitionsChainActionEpilogContext } from "./DParser"; +import { BeginDActionContext } from "./DParser"; +import { AppendDActionContext } from "./DParser"; +import { AppendEarlyDActionContext } from "./DParser"; +import { ChainDActionContext } from "./DParser"; +import { InterjectDActionContext } from "./DParser"; +import { InterjectCopyTransDActionContext } from "./DParser"; +import { ExtendTopBottomDActionContext } from "./DParser"; +import { AddStateTriggerDActionContext } from "./DParser"; +import { AddTransTriggerDActionContext } from "./DParser"; +import { AddTransActionDActionContext } from "./DParser"; +import { ReplaceTransActionDActionContext } from "./DParser"; +import { ReplaceTransTriggerDActionContext } from "./DParser"; +import { AlterTransDActionContext } from "./DParser"; +import { ReplaceDActionContext } from "./DParser"; +import { SetWeightDActionContext } from "./DParser"; +import { ReplaceSayDActionContext } from "./DParser"; +import { ReplaceStateTriggerDActionContext } from "./DParser"; +import { ReplaceTriggerTextDActionContext } from "./DParser"; +import { ReplaceTriggerTextRegexpDActionContext } from "./DParser"; +import { ReplaceActionTextDActionContext } from "./DParser"; +import { ReplaceActionTextRegexpDActionContext } from "./DParser"; +import { ReplaceActionTextProcessDActionContext } from "./DParser"; +import { ReplaceActionTextProcessRegexpDActionContext } from "./DParser"; +import { IfThenTransitionContext } from "./DParser"; +import { ReplyTransitionContext } from "./DParser"; +import { CopyTransTransitionContext } from "./DParser"; +import { CopyTransLateTransitionContext } from "./DParser"; +import { MonologChainBlockContext } from "./DParser"; +import { BranchChainBlockContext } from "./DParser"; +import { GotoTransitionTargetContext } from "./DParser"; +import { ExternTransitionTargetContext } from "./DParser"; +import { ExitTransitionTargetContext } from "./DParser"; +import { RootRuleContext } from "./DParser"; +import { DFileRuleContext } from "./DParser"; +import { DActionRuleContext } from "./DParser"; +import { AlterTransCommandContext } from "./DParser"; +import { ConditionRuleContext } from "./DParser"; +import { StateRuleContext } from "./DParser"; +import { Chain2DlgRuleContext } from "./DParser"; +import { Chain2ElementRuleContext } from "./DParser"; +import { TransitionRuleContext } from "./DParser"; +import { TransitionTargetRuleContext } from "./DParser"; +import { ChainActionEpilogRuleContext } from "./DParser"; +import { TransitionFeatureRuleContext } from "./DParser"; +import { ChainDlgRuleContext } from "./DParser"; +import { ChainBlockRuleContext } from "./DParser"; +import { ChainElementRuleContext } from "./DParser"; +import { FileRuleContext } from "./DParser"; +import { SayTextRuleContext } from "./DParser"; +import { TraLineRuleContext } from "./DParser"; +import { DlgLineRuleContext } from "./DParser"; +import { StringRuleContext } from "./DParser"; +import { StringLiteralRuleContext } from "./DParser"; +import { IdentifierRuleContext } from "./DParser"; +import { ReferenceRuleContext } from "./DParser"; +import { SharpNumberRuleContext } from "./DParser"; +import { SoundRuleContext } from "./DParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `DParser`. + */ +export interface DParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `genderedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + enterGenderedText?: (ctx: GenderedTextContext) => void; + /** + * Exit a parse tree produced by the `genderedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + exitGenderedText?: (ctx: GenderedTextContext) => void; + + /** + * Enter a parse tree produced by the `genderNeutralText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + enterGenderNeutralText?: (ctx: GenderNeutralTextContext) => void; + /** + * Exit a parse tree produced by the `genderNeutralText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + exitGenderNeutralText?: (ctx: GenderNeutralTextContext) => void; + + /** + * Enter a parse tree produced by the `referencedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + enterReferencedText?: (ctx: ReferencedTextContext) => void; + /** + * Exit a parse tree produced by the `referencedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + exitReferencedText?: (ctx: ReferencedTextContext) => void; + + /** + * Enter a parse tree produced by the `ifThenState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + enterIfThenState?: (ctx: IfThenStateContext) => void; + /** + * Exit a parse tree produced by the `ifThenState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + exitIfThenState?: (ctx: IfThenStateContext) => void; + + /** + * Enter a parse tree produced by the `appendiState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + enterAppendiState?: (ctx: AppendiStateContext) => void; + /** + * Exit a parse tree produced by the `appendiState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + exitAppendiState?: (ctx: AppendiStateContext) => void; + + /** + * Enter a parse tree produced by the `chain2State` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + enterChain2State?: (ctx: Chain2StateContext) => void; + /** + * Exit a parse tree produced by the `chain2State` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + */ + exitChain2State?: (ctx: Chain2StateContext) => void; + + /** + * Enter a parse tree produced by the `replyTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterReplyTransitionFeature?: (ctx: ReplyTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `replyTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitReplyTransitionFeature?: (ctx: ReplyTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `doTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterDoTransitionFeature?: (ctx: DoTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `doTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitDoTransitionFeature?: (ctx: DoTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `journalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterJournalTransitionFeature?: (ctx: JournalTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `journalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitJournalTransitionFeature?: (ctx: JournalTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `solvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterSolvedJournalTransitionFeature?: (ctx: SolvedJournalTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `solvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitSolvedJournalTransitionFeature?: (ctx: SolvedJournalTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `unsolvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterUnsolvedJournalTransitionFeature?: (ctx: UnsolvedJournalTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `unsolvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitUnsolvedJournalTransitionFeature?: (ctx: UnsolvedJournalTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `flagsTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterFlagsTransitionFeature?: (ctx: FlagsTransitionFeatureContext) => void; + /** + * Exit a parse tree produced by the `flagsTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitFlagsTransitionFeature?: (ctx: FlagsTransitionFeatureContext) => void; + + /** + * Enter a parse tree produced by the `endChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterEndChainActionEpilog?: (ctx: EndChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `endChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitEndChainActionEpilog?: (ctx: EndChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `externChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterExternChainActionEpilog?: (ctx: ExternChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `externChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitExternChainActionEpilog?: (ctx: ExternChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `copyTransChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterCopyTransChainActionEpilog?: (ctx: CopyTransChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `copyTransChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitCopyTransChainActionEpilog?: (ctx: CopyTransChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `copyTransLateChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterCopyTransLateChainActionEpilog?: (ctx: CopyTransLateChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `copyTransLateChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitCopyTransLateChainActionEpilog?: (ctx: CopyTransLateChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `exitChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterExitChainActionEpilog?: (ctx: ExitChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `exitChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitExitChainActionEpilog?: (ctx: ExitChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `endWithTransitionsChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterEndWithTransitionsChainActionEpilog?: (ctx: EndWithTransitionsChainActionEpilogContext) => void; + /** + * Exit a parse tree produced by the `endWithTransitionsChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitEndWithTransitionsChainActionEpilog?: (ctx: EndWithTransitionsChainActionEpilogContext) => void; + + /** + * Enter a parse tree produced by the `beginDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterBeginDAction?: (ctx: BeginDActionContext) => void; + /** + * Exit a parse tree produced by the `beginDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitBeginDAction?: (ctx: BeginDActionContext) => void; + + /** + * Enter a parse tree produced by the `appendDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAppendDAction?: (ctx: AppendDActionContext) => void; + /** + * Exit a parse tree produced by the `appendDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAppendDAction?: (ctx: AppendDActionContext) => void; + + /** + * Enter a parse tree produced by the `appendEarlyDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAppendEarlyDAction?: (ctx: AppendEarlyDActionContext) => void; + /** + * Exit a parse tree produced by the `appendEarlyDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAppendEarlyDAction?: (ctx: AppendEarlyDActionContext) => void; + + /** + * Enter a parse tree produced by the `chainDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterChainDAction?: (ctx: ChainDActionContext) => void; + /** + * Exit a parse tree produced by the `chainDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitChainDAction?: (ctx: ChainDActionContext) => void; + + /** + * Enter a parse tree produced by the `interjectDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterInterjectDAction?: (ctx: InterjectDActionContext) => void; + /** + * Exit a parse tree produced by the `interjectDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitInterjectDAction?: (ctx: InterjectDActionContext) => void; + + /** + * Enter a parse tree produced by the `interjectCopyTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterInterjectCopyTransDAction?: (ctx: InterjectCopyTransDActionContext) => void; + /** + * Exit a parse tree produced by the `interjectCopyTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitInterjectCopyTransDAction?: (ctx: InterjectCopyTransDActionContext) => void; + + /** + * Enter a parse tree produced by the `extendTopBottomDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterExtendTopBottomDAction?: (ctx: ExtendTopBottomDActionContext) => void; + /** + * Exit a parse tree produced by the `extendTopBottomDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitExtendTopBottomDAction?: (ctx: ExtendTopBottomDActionContext) => void; + + /** + * Enter a parse tree produced by the `addStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAddStateTriggerDAction?: (ctx: AddStateTriggerDActionContext) => void; + /** + * Exit a parse tree produced by the `addStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAddStateTriggerDAction?: (ctx: AddStateTriggerDActionContext) => void; + + /** + * Enter a parse tree produced by the `addTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAddTransTriggerDAction?: (ctx: AddTransTriggerDActionContext) => void; + /** + * Exit a parse tree produced by the `addTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAddTransTriggerDAction?: (ctx: AddTransTriggerDActionContext) => void; + + /** + * Enter a parse tree produced by the `addTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAddTransActionDAction?: (ctx: AddTransActionDActionContext) => void; + /** + * Exit a parse tree produced by the `addTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAddTransActionDAction?: (ctx: AddTransActionDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceTransActionDAction?: (ctx: ReplaceTransActionDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceTransActionDAction?: (ctx: ReplaceTransActionDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceTransTriggerDAction?: (ctx: ReplaceTransTriggerDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceTransTriggerDAction?: (ctx: ReplaceTransTriggerDActionContext) => void; + + /** + * Enter a parse tree produced by the `alterTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterAlterTransDAction?: (ctx: AlterTransDActionContext) => void; + /** + * Exit a parse tree produced by the `alterTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitAlterTransDAction?: (ctx: AlterTransDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceDAction?: (ctx: ReplaceDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceDAction?: (ctx: ReplaceDActionContext) => void; + + /** + * Enter a parse tree produced by the `setWeightDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterSetWeightDAction?: (ctx: SetWeightDActionContext) => void; + /** + * Exit a parse tree produced by the `setWeightDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitSetWeightDAction?: (ctx: SetWeightDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceSayDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceSayDAction?: (ctx: ReplaceSayDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceSayDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceSayDAction?: (ctx: ReplaceSayDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceStateTriggerDAction?: (ctx: ReplaceStateTriggerDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceStateTriggerDAction?: (ctx: ReplaceStateTriggerDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceTriggerTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceTriggerTextDAction?: (ctx: ReplaceTriggerTextDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceTriggerTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceTriggerTextDAction?: (ctx: ReplaceTriggerTextDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceTriggerTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceTriggerTextRegexpDAction?: (ctx: ReplaceTriggerTextRegexpDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceTriggerTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceTriggerTextRegexpDAction?: (ctx: ReplaceTriggerTextRegexpDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceActionTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceActionTextDAction?: (ctx: ReplaceActionTextDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceActionTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceActionTextDAction?: (ctx: ReplaceActionTextDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceActionTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceActionTextRegexpDAction?: (ctx: ReplaceActionTextRegexpDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceActionTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceActionTextRegexpDAction?: (ctx: ReplaceActionTextRegexpDActionContext) => void; + + /** + * Enter a parse tree produced by the `replaceActionTextProcessDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceActionTextProcessDAction?: (ctx: ReplaceActionTextProcessDActionContext) => void; + /** + * Exit a parse tree produced by the `replaceActionTextProcessDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceActionTextProcessDAction?: (ctx: ReplaceActionTextProcessDActionContext) => void; + + /** + * Enter a parse tree produced by the `ReplaceActionTextProcessRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterReplaceActionTextProcessRegexpDAction?: (ctx: ReplaceActionTextProcessRegexpDActionContext) => void; + /** + * Exit a parse tree produced by the `ReplaceActionTextProcessRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitReplaceActionTextProcessRegexpDAction?: (ctx: ReplaceActionTextProcessRegexpDActionContext) => void; + + /** + * Enter a parse tree produced by the `ifThenTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + enterIfThenTransition?: (ctx: IfThenTransitionContext) => void; + /** + * Exit a parse tree produced by the `ifThenTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + exitIfThenTransition?: (ctx: IfThenTransitionContext) => void; + + /** + * Enter a parse tree produced by the `replyTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + enterReplyTransition?: (ctx: ReplyTransitionContext) => void; + /** + * Exit a parse tree produced by the `replyTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + exitReplyTransition?: (ctx: ReplyTransitionContext) => void; + + /** + * Enter a parse tree produced by the `copyTransTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + enterCopyTransTransition?: (ctx: CopyTransTransitionContext) => void; + /** + * Exit a parse tree produced by the `copyTransTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + exitCopyTransTransition?: (ctx: CopyTransTransitionContext) => void; + + /** + * Enter a parse tree produced by the `copyTransLateTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + enterCopyTransLateTransition?: (ctx: CopyTransLateTransitionContext) => void; + /** + * Exit a parse tree produced by the `copyTransLateTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + */ + exitCopyTransLateTransition?: (ctx: CopyTransLateTransitionContext) => void; + + /** + * Enter a parse tree produced by the `monologChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + enterMonologChainBlock?: (ctx: MonologChainBlockContext) => void; + /** + * Exit a parse tree produced by the `monologChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + exitMonologChainBlock?: (ctx: MonologChainBlockContext) => void; + + /** + * Enter a parse tree produced by the `branchChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + enterBranchChainBlock?: (ctx: BranchChainBlockContext) => void; + /** + * Exit a parse tree produced by the `branchChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + exitBranchChainBlock?: (ctx: BranchChainBlockContext) => void; + + /** + * Enter a parse tree produced by the `gotoTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + enterGotoTransitionTarget?: (ctx: GotoTransitionTargetContext) => void; + /** + * Exit a parse tree produced by the `gotoTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + exitGotoTransitionTarget?: (ctx: GotoTransitionTargetContext) => void; + + /** + * Enter a parse tree produced by the `externTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + enterExternTransitionTarget?: (ctx: ExternTransitionTargetContext) => void; + /** + * Exit a parse tree produced by the `externTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + exitExternTransitionTarget?: (ctx: ExternTransitionTargetContext) => void; + + /** + * Enter a parse tree produced by the `exitTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + enterExitTransitionTarget?: (ctx: ExitTransitionTargetContext) => void; + /** + * Exit a parse tree produced by the `exitTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + exitExitTransitionTarget?: (ctx: ExitTransitionTargetContext) => void; + + /** + * Enter a parse tree produced by `DParser.rootRule`. + * @param ctx the parse tree + */ + enterRootRule?: (ctx: RootRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.rootRule`. + * @param ctx the parse tree + */ + exitRootRule?: (ctx: RootRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.dFileRule`. + * @param ctx the parse tree + */ + enterDFileRule?: (ctx: DFileRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.dFileRule`. + * @param ctx the parse tree + */ + exitDFileRule?: (ctx: DFileRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.dActionRule`. + * @param ctx the parse tree + */ + enterDActionRule?: (ctx: DActionRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.dActionRule`. + * @param ctx the parse tree + */ + exitDActionRule?: (ctx: DActionRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.alterTransCommand`. + * @param ctx the parse tree + */ + enterAlterTransCommand?: (ctx: AlterTransCommandContext) => void; + /** + * Exit a parse tree produced by `DParser.alterTransCommand`. + * @param ctx the parse tree + */ + exitAlterTransCommand?: (ctx: AlterTransCommandContext) => void; + + /** + * Enter a parse tree produced by `DParser.conditionRule`. + * @param ctx the parse tree + */ + enterConditionRule?: (ctx: ConditionRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.conditionRule`. + * @param ctx the parse tree + */ + exitConditionRule?: (ctx: ConditionRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.stateRule`. + * @param ctx the parse tree + */ + enterStateRule?: (ctx: StateRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.stateRule`. + * @param ctx the parse tree + */ + exitStateRule?: (ctx: StateRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chain2DlgRule`. + * @param ctx the parse tree + */ + enterChain2DlgRule?: (ctx: Chain2DlgRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chain2DlgRule`. + * @param ctx the parse tree + */ + exitChain2DlgRule?: (ctx: Chain2DlgRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chain2ElementRule`. + * @param ctx the parse tree + */ + enterChain2ElementRule?: (ctx: Chain2ElementRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chain2ElementRule`. + * @param ctx the parse tree + */ + exitChain2ElementRule?: (ctx: Chain2ElementRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.transitionRule`. + * @param ctx the parse tree + */ + enterTransitionRule?: (ctx: TransitionRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.transitionRule`. + * @param ctx the parse tree + */ + exitTransitionRule?: (ctx: TransitionRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + enterTransitionTargetRule?: (ctx: TransitionTargetRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.transitionTargetRule`. + * @param ctx the parse tree + */ + exitTransitionTargetRule?: (ctx: TransitionTargetRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + enterChainActionEpilogRule?: (ctx: ChainActionEpilogRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + */ + exitChainActionEpilogRule?: (ctx: ChainActionEpilogRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + enterTransitionFeatureRule?: (ctx: TransitionFeatureRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.transitionFeatureRule`. + * @param ctx the parse tree + */ + exitTransitionFeatureRule?: (ctx: TransitionFeatureRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chainDlgRule`. + * @param ctx the parse tree + */ + enterChainDlgRule?: (ctx: ChainDlgRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chainDlgRule`. + * @param ctx the parse tree + */ + exitChainDlgRule?: (ctx: ChainDlgRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + enterChainBlockRule?: (ctx: ChainBlockRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chainBlockRule`. + * @param ctx the parse tree + */ + exitChainBlockRule?: (ctx: ChainBlockRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.chainElementRule`. + * @param ctx the parse tree + */ + enterChainElementRule?: (ctx: ChainElementRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.chainElementRule`. + * @param ctx the parse tree + */ + exitChainElementRule?: (ctx: ChainElementRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.fileRule`. + * @param ctx the parse tree + */ + enterFileRule?: (ctx: FileRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.fileRule`. + * @param ctx the parse tree + */ + exitFileRule?: (ctx: FileRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.sayTextRule`. + * @param ctx the parse tree + */ + enterSayTextRule?: (ctx: SayTextRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.sayTextRule`. + * @param ctx the parse tree + */ + exitSayTextRule?: (ctx: SayTextRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.traLineRule`. + * @param ctx the parse tree + */ + enterTraLineRule?: (ctx: TraLineRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.traLineRule`. + * @param ctx the parse tree + */ + exitTraLineRule?: (ctx: TraLineRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + enterDlgLineRule?: (ctx: DlgLineRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.dlgLineRule`. + * @param ctx the parse tree + */ + exitDlgLineRule?: (ctx: DlgLineRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.stringRule`. + * @param ctx the parse tree + */ + enterStringRule?: (ctx: StringRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.stringRule`. + * @param ctx the parse tree + */ + exitStringRule?: (ctx: StringRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.stringLiteralRule`. + * @param ctx the parse tree + */ + enterStringLiteralRule?: (ctx: StringLiteralRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.stringLiteralRule`. + * @param ctx the parse tree + */ + exitStringLiteralRule?: (ctx: StringLiteralRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.identifierRule`. + * @param ctx the parse tree + */ + enterIdentifierRule?: (ctx: IdentifierRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.identifierRule`. + * @param ctx the parse tree + */ + exitIdentifierRule?: (ctx: IdentifierRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.referenceRule`. + * @param ctx the parse tree + */ + enterReferenceRule?: (ctx: ReferenceRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.referenceRule`. + * @param ctx the parse tree + */ + exitReferenceRule?: (ctx: ReferenceRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.sharpNumberRule`. + * @param ctx the parse tree + */ + enterSharpNumberRule?: (ctx: SharpNumberRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.sharpNumberRule`. + * @param ctx the parse tree + */ + exitSharpNumberRule?: (ctx: SharpNumberRuleContext) => void; + + /** + * Enter a parse tree produced by `DParser.soundRule`. + * @param ctx the parse tree + */ + enterSoundRule?: (ctx: SoundRuleContext) => void; + /** + * Exit a parse tree produced by `DParser.soundRule`. + * @param ctx the parse tree + */ + exitSoundRule?: (ctx: SoundRuleContext) => void; +} + diff --git a/server/src/dparser/DParserVisitor.ts b/server/src/dparser/DParserVisitor.ts new file mode 100644 index 0000000..10c2c21 --- /dev/null +++ b/server/src/dparser/DParserVisitor.ts @@ -0,0 +1,666 @@ +// Generated from ./src/antlr4/lapdu/DParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; + +import { GenderedTextContext } from "./DParser"; +import { GenderNeutralTextContext } from "./DParser"; +import { ReferencedTextContext } from "./DParser"; +import { IfThenStateContext } from "./DParser"; +import { AppendiStateContext } from "./DParser"; +import { Chain2StateContext } from "./DParser"; +import { ReplyTransitionFeatureContext } from "./DParser"; +import { DoTransitionFeatureContext } from "./DParser"; +import { JournalTransitionFeatureContext } from "./DParser"; +import { SolvedJournalTransitionFeatureContext } from "./DParser"; +import { UnsolvedJournalTransitionFeatureContext } from "./DParser"; +import { FlagsTransitionFeatureContext } from "./DParser"; +import { EndChainActionEpilogContext } from "./DParser"; +import { ExternChainActionEpilogContext } from "./DParser"; +import { CopyTransChainActionEpilogContext } from "./DParser"; +import { CopyTransLateChainActionEpilogContext } from "./DParser"; +import { ExitChainActionEpilogContext } from "./DParser"; +import { EndWithTransitionsChainActionEpilogContext } from "./DParser"; +import { BeginDActionContext } from "./DParser"; +import { AppendDActionContext } from "./DParser"; +import { AppendEarlyDActionContext } from "./DParser"; +import { ChainDActionContext } from "./DParser"; +import { InterjectDActionContext } from "./DParser"; +import { InterjectCopyTransDActionContext } from "./DParser"; +import { ExtendTopBottomDActionContext } from "./DParser"; +import { AddStateTriggerDActionContext } from "./DParser"; +import { AddTransTriggerDActionContext } from "./DParser"; +import { AddTransActionDActionContext } from "./DParser"; +import { ReplaceTransActionDActionContext } from "./DParser"; +import { ReplaceTransTriggerDActionContext } from "./DParser"; +import { AlterTransDActionContext } from "./DParser"; +import { ReplaceDActionContext } from "./DParser"; +import { SetWeightDActionContext } from "./DParser"; +import { ReplaceSayDActionContext } from "./DParser"; +import { ReplaceStateTriggerDActionContext } from "./DParser"; +import { ReplaceTriggerTextDActionContext } from "./DParser"; +import { ReplaceTriggerTextRegexpDActionContext } from "./DParser"; +import { ReplaceActionTextDActionContext } from "./DParser"; +import { ReplaceActionTextRegexpDActionContext } from "./DParser"; +import { ReplaceActionTextProcessDActionContext } from "./DParser"; +import { ReplaceActionTextProcessRegexpDActionContext } from "./DParser"; +import { IfThenTransitionContext } from "./DParser"; +import { ReplyTransitionContext } from "./DParser"; +import { CopyTransTransitionContext } from "./DParser"; +import { CopyTransLateTransitionContext } from "./DParser"; +import { MonologChainBlockContext } from "./DParser"; +import { BranchChainBlockContext } from "./DParser"; +import { GotoTransitionTargetContext } from "./DParser"; +import { ExternTransitionTargetContext } from "./DParser"; +import { ExitTransitionTargetContext } from "./DParser"; +import { RootRuleContext } from "./DParser"; +import { DFileRuleContext } from "./DParser"; +import { DActionRuleContext } from "./DParser"; +import { AlterTransCommandContext } from "./DParser"; +import { ConditionRuleContext } from "./DParser"; +import { StateRuleContext } from "./DParser"; +import { Chain2DlgRuleContext } from "./DParser"; +import { Chain2ElementRuleContext } from "./DParser"; +import { TransitionRuleContext } from "./DParser"; +import { TransitionTargetRuleContext } from "./DParser"; +import { ChainActionEpilogRuleContext } from "./DParser"; +import { TransitionFeatureRuleContext } from "./DParser"; +import { ChainDlgRuleContext } from "./DParser"; +import { ChainBlockRuleContext } from "./DParser"; +import { ChainElementRuleContext } from "./DParser"; +import { FileRuleContext } from "./DParser"; +import { SayTextRuleContext } from "./DParser"; +import { TraLineRuleContext } from "./DParser"; +import { DlgLineRuleContext } from "./DParser"; +import { StringRuleContext } from "./DParser"; +import { StringLiteralRuleContext } from "./DParser"; +import { IdentifierRuleContext } from "./DParser"; +import { ReferenceRuleContext } from "./DParser"; +import { SharpNumberRuleContext } from "./DParser"; +import { SoundRuleContext } from "./DParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `DParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export interface DParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `genderedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGenderedText?: (ctx: GenderedTextContext) => Result; + + /** + * Visit a parse tree produced by the `genderNeutralText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGenderNeutralText?: (ctx: GenderNeutralTextContext) => Result; + + /** + * Visit a parse tree produced by the `referencedText` + * labeled alternative in `DParser.dlgLineRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReferencedText?: (ctx: ReferencedTextContext) => Result; + + /** + * Visit a parse tree produced by the `ifThenState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfThenState?: (ctx: IfThenStateContext) => Result; + + /** + * Visit a parse tree produced by the `appendiState` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAppendiState?: (ctx: AppendiStateContext) => Result; + + /** + * Visit a parse tree produced by the `chain2State` + * labeled alternative in `DParser.stateRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChain2State?: (ctx: Chain2StateContext) => Result; + + /** + * Visit a parse tree produced by the `replyTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplyTransitionFeature?: (ctx: ReplyTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `doTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDoTransitionFeature?: (ctx: DoTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `journalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJournalTransitionFeature?: (ctx: JournalTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `solvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSolvedJournalTransitionFeature?: (ctx: SolvedJournalTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `unsolvedJournalTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnsolvedJournalTransitionFeature?: (ctx: UnsolvedJournalTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `flagsTransitionFeature` + * labeled alternative in `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFlagsTransitionFeature?: (ctx: FlagsTransitionFeatureContext) => Result; + + /** + * Visit a parse tree produced by the `endChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEndChainActionEpilog?: (ctx: EndChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `externChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExternChainActionEpilog?: (ctx: ExternChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `copyTransChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCopyTransChainActionEpilog?: (ctx: CopyTransChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `copyTransLateChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCopyTransLateChainActionEpilog?: (ctx: CopyTransLateChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `exitChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExitChainActionEpilog?: (ctx: ExitChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `endWithTransitionsChainActionEpilog` + * labeled alternative in `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitEndWithTransitionsChainActionEpilog?: (ctx: EndWithTransitionsChainActionEpilogContext) => Result; + + /** + * Visit a parse tree produced by the `beginDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBeginDAction?: (ctx: BeginDActionContext) => Result; + + /** + * Visit a parse tree produced by the `appendDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAppendDAction?: (ctx: AppendDActionContext) => Result; + + /** + * Visit a parse tree produced by the `appendEarlyDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAppendEarlyDAction?: (ctx: AppendEarlyDActionContext) => Result; + + /** + * Visit a parse tree produced by the `chainDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChainDAction?: (ctx: ChainDActionContext) => Result; + + /** + * Visit a parse tree produced by the `interjectDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterjectDAction?: (ctx: InterjectDActionContext) => Result; + + /** + * Visit a parse tree produced by the `interjectCopyTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterjectCopyTransDAction?: (ctx: InterjectCopyTransDActionContext) => Result; + + /** + * Visit a parse tree produced by the `extendTopBottomDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExtendTopBottomDAction?: (ctx: ExtendTopBottomDActionContext) => Result; + + /** + * Visit a parse tree produced by the `addStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAddStateTriggerDAction?: (ctx: AddStateTriggerDActionContext) => Result; + + /** + * Visit a parse tree produced by the `addTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAddTransTriggerDAction?: (ctx: AddTransTriggerDActionContext) => Result; + + /** + * Visit a parse tree produced by the `addTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAddTransActionDAction?: (ctx: AddTransActionDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceTransActionDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceTransActionDAction?: (ctx: ReplaceTransActionDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceTransTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceTransTriggerDAction?: (ctx: ReplaceTransTriggerDActionContext) => Result; + + /** + * Visit a parse tree produced by the `alterTransDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlterTransDAction?: (ctx: AlterTransDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceDAction?: (ctx: ReplaceDActionContext) => Result; + + /** + * Visit a parse tree produced by the `setWeightDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetWeightDAction?: (ctx: SetWeightDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceSayDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceSayDAction?: (ctx: ReplaceSayDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceStateTriggerDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceStateTriggerDAction?: (ctx: ReplaceStateTriggerDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceTriggerTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceTriggerTextDAction?: (ctx: ReplaceTriggerTextDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceTriggerTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceTriggerTextRegexpDAction?: (ctx: ReplaceTriggerTextRegexpDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceActionTextDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceActionTextDAction?: (ctx: ReplaceActionTextDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceActionTextRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceActionTextRegexpDAction?: (ctx: ReplaceActionTextRegexpDActionContext) => Result; + + /** + * Visit a parse tree produced by the `replaceActionTextProcessDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceActionTextProcessDAction?: (ctx: ReplaceActionTextProcessDActionContext) => Result; + + /** + * Visit a parse tree produced by the `ReplaceActionTextProcessRegexpDAction` + * labeled alternative in `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceActionTextProcessRegexpDAction?: (ctx: ReplaceActionTextProcessRegexpDActionContext) => Result; + + /** + * Visit a parse tree produced by the `ifThenTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfThenTransition?: (ctx: IfThenTransitionContext) => Result; + + /** + * Visit a parse tree produced by the `replyTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplyTransition?: (ctx: ReplyTransitionContext) => Result; + + /** + * Visit a parse tree produced by the `copyTransTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCopyTransTransition?: (ctx: CopyTransTransitionContext) => Result; + + /** + * Visit a parse tree produced by the `copyTransLateTransition` + * labeled alternative in `DParser.transitionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCopyTransLateTransition?: (ctx: CopyTransLateTransitionContext) => Result; + + /** + * Visit a parse tree produced by the `monologChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMonologChainBlock?: (ctx: MonologChainBlockContext) => Result; + + /** + * Visit a parse tree produced by the `branchChainBlock` + * labeled alternative in `DParser.chainBlockRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBranchChainBlock?: (ctx: BranchChainBlockContext) => Result; + + /** + * Visit a parse tree produced by the `gotoTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGotoTransitionTarget?: (ctx: GotoTransitionTargetContext) => Result; + + /** + * Visit a parse tree produced by the `externTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExternTransitionTarget?: (ctx: ExternTransitionTargetContext) => Result; + + /** + * Visit a parse tree produced by the `exitTransitionTarget` + * labeled alternative in `DParser.transitionTargetRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExitTransitionTarget?: (ctx: ExitTransitionTargetContext) => Result; + + /** + * Visit a parse tree produced by `DParser.rootRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRootRule?: (ctx: RootRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.dFileRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDFileRule?: (ctx: DFileRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.dActionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDActionRule?: (ctx: DActionRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.alterTransCommand`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlterTransCommand?: (ctx: AlterTransCommandContext) => Result; + + /** + * Visit a parse tree produced by `DParser.conditionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConditionRule?: (ctx: ConditionRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.stateRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStateRule?: (ctx: StateRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chain2DlgRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChain2DlgRule?: (ctx: Chain2DlgRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chain2ElementRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChain2ElementRule?: (ctx: Chain2ElementRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.transitionRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransitionRule?: (ctx: TransitionRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.transitionTargetRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransitionTargetRule?: (ctx: TransitionTargetRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chainActionEpilogRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChainActionEpilogRule?: (ctx: ChainActionEpilogRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.transitionFeatureRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransitionFeatureRule?: (ctx: TransitionFeatureRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chainDlgRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChainDlgRule?: (ctx: ChainDlgRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chainBlockRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChainBlockRule?: (ctx: ChainBlockRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.chainElementRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitChainElementRule?: (ctx: ChainElementRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.fileRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFileRule?: (ctx: FileRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.sayTextRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSayTextRule?: (ctx: SayTextRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.traLineRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTraLineRule?: (ctx: TraLineRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.dlgLineRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDlgLineRule?: (ctx: DlgLineRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.stringRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringRule?: (ctx: StringRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.stringLiteralRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLiteralRule?: (ctx: StringLiteralRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.identifierRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierRule?: (ctx: IdentifierRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.referenceRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReferenceRule?: (ctx: ReferenceRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.sharpNumberRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSharpNumberRule?: (ctx: SharpNumberRuleContext) => Result; + + /** + * Visit a parse tree produced by `DParser.soundRule`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSoundRule?: (ctx: SoundRuleContext) => Result; +} + diff --git a/server/src/galactus.ts b/server/src/galactus.ts index 39a6747..6829780 100644 --- a/server/src/galactus.ts +++ b/server/src/galactus.ts @@ -103,9 +103,9 @@ const languages: LanguageList = [ id: "weidu-d", features: { completion: true, - definition: false, + definition: true, hover: true, - udf: false, + udf: true, headers: false, externalHeaders: false, parse: true, diff --git a/server/src/language.ts b/server/src/language.ts index 2440b10..5ea10cc 100644 --- a/server/src/language.ts +++ b/server/src/language.ts @@ -1,4 +1,4 @@ -import { Hover } from "vscode-languageserver/node"; +import { Hover, Location } from "vscode-languageserver/node"; import { conlog, getRelPath, isDirectory, isSubpath, uriToPath } from "./common"; import * as completion from "./completion"; import * as definition from "./definition"; @@ -6,6 +6,7 @@ import * as fallout from "./fallout"; import * as hover from "./hover"; import * as signature from "./signature"; import * as weidu from "./weidu"; +import * as d from "./d"; export interface Features { completion: boolean; @@ -326,7 +327,6 @@ export class Language implements Language { if (!this.features.udf) { return; } - switch (this.id) { case "fallout-ssl": fileData = fallout.loadFileData(uri, text, filePath); @@ -335,6 +335,9 @@ export class Language implements Language { case "weidu-tp2-tpl": fileData = weidu.loadFileData(uri, text, filePath); break; + case "weidu-d": + fileData = d.loadFileData(uri, text); + break; default: conlog(`Language ${this.id} doesn't support reload.`); return; diff --git a/server/src/server.ts b/server/src/server.ts index 7116658..9d5facc 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -17,6 +17,7 @@ import { Galactus } from "./galactus"; import { preview } from "./preview"; import * as settings from "./settings"; import { defaultSettings, MLSsettings } from "./settings"; +import { findSymbolAtPosition as findTransitionAtPosition } from "./d"; // Create a connection for the server. The connection uses Node's IPC as a transport. // Also include all preview / proposed LSP features. @@ -271,6 +272,9 @@ connection.onDefinition((params) => { } const langId = textDoc.languageId; const text = textDoc.getText(); - const symbol = symbolAtPosition(text, params.position); + let symbol = symbolAtPosition(text, params.position); + if (langId == "weidu-d") { + symbol = findTransitionAtPosition(text, params.position); + } return gala?.definition(langId, symbol); });