adaptive-expressions
Version: 
Common Expression Language
1,297 lines (1,266 loc) • 133 kB
text/typescript
// Generated from src/CommonRegex.g4 by ANTLR 4.7.3-SNAPSHOT
/**
 * @module adaptive-expressions
 */
/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License.
 */
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 { CommonRegexListener } from "./CommonRegexListener";
import { CommonRegexVisitor } from "./CommonRegexVisitor";
export class CommonRegexParser extends Parser {
	public static readonly Quoted = 1;
	public static readonly BlockQuoted = 2;
	public static readonly BellChar = 3;
	public static readonly ControlChar = 4;
	public static readonly EscapeChar = 5;
	public static readonly FormFeed = 6;
	public static readonly NewLine = 7;
	public static readonly CarriageReturn = 8;
	public static readonly Tab = 9;
	public static readonly Backslash = 10;
	public static readonly HexChar = 11;
	public static readonly Dot = 12;
	public static readonly DecimalDigit = 13;
	public static readonly NotDecimalDigit = 14;
	public static readonly CharWithProperty = 15;
	public static readonly CharWithoutProperty = 16;
	public static readonly WhiteSpace = 17;
	public static readonly NotWhiteSpace = 18;
	public static readonly WordChar = 19;
	public static readonly NotWordChar = 20;
	public static readonly CharacterClassStart = 21;
	public static readonly CharacterClassEnd = 22;
	public static readonly Caret = 23;
	public static readonly Hyphen = 24;
	public static readonly QuestionMark = 25;
	public static readonly Plus = 26;
	public static readonly Star = 27;
	public static readonly OpenBrace = 28;
	public static readonly CloseBrace = 29;
	public static readonly Comma = 30;
	public static readonly EndOfSubject = 31;
	public static readonly Pipe = 32;
	public static readonly OpenParen = 33;
	public static readonly CloseParen = 34;
	public static readonly LessThan = 35;
	public static readonly GreaterThan = 36;
	public static readonly SingleQuote = 37;
	public static readonly Underscore = 38;
	public static readonly Colon = 39;
	public static readonly Hash = 40;
	public static readonly Equals = 41;
	public static readonly Exclamation = 42;
	public static readonly Ampersand = 43;
	public static readonly ALC = 44;
	public static readonly BLC = 45;
	public static readonly CLC = 46;
	public static readonly DLC = 47;
	public static readonly ELC = 48;
	public static readonly FLC = 49;
	public static readonly GLC = 50;
	public static readonly HLC = 51;
	public static readonly ILC = 52;
	public static readonly JLC = 53;
	public static readonly KLC = 54;
	public static readonly LLC = 55;
	public static readonly MLC = 56;
	public static readonly NLC = 57;
	public static readonly OLC = 58;
	public static readonly PLC = 59;
	public static readonly QLC = 60;
	public static readonly RLC = 61;
	public static readonly SLC = 62;
	public static readonly TLC = 63;
	public static readonly ULC = 64;
	public static readonly VLC = 65;
	public static readonly WLC = 66;
	public static readonly XLC = 67;
	public static readonly YLC = 68;
	public static readonly ZLC = 69;
	public static readonly AUC = 70;
	public static readonly BUC = 71;
	public static readonly CUC = 72;
	public static readonly DUC = 73;
	public static readonly EUC = 74;
	public static readonly FUC = 75;
	public static readonly GUC = 76;
	public static readonly HUC = 77;
	public static readonly IUC = 78;
	public static readonly JUC = 79;
	public static readonly KUC = 80;
	public static readonly LUC = 81;
	public static readonly MUC = 82;
	public static readonly NUC = 83;
	public static readonly OUC = 84;
	public static readonly PUC = 85;
	public static readonly QUC = 86;
	public static readonly RUC = 87;
	public static readonly SUC = 88;
	public static readonly TUC = 89;
	public static readonly UUC = 90;
	public static readonly VUC = 91;
	public static readonly WUC = 92;
	public static readonly XUC = 93;
	public static readonly YUC = 94;
	public static readonly ZUC = 95;
	public static readonly D1 = 96;
	public static readonly D2 = 97;
	public static readonly D3 = 98;
	public static readonly D4 = 99;
	public static readonly D5 = 100;
	public static readonly D6 = 101;
	public static readonly D7 = 102;
	public static readonly D8 = 103;
	public static readonly D9 = 104;
	public static readonly D0 = 105;
	public static readonly OtherChar = 106;
	public static readonly RULE_parse = 0;
	public static readonly RULE_alternation = 1;
	public static readonly RULE_expr = 2;
	public static readonly RULE_element = 3;
	public static readonly RULE_quantifier = 4;
	public static readonly RULE_quantifier_type = 5;
	public static readonly RULE_character_class = 6;
	public static readonly RULE_capture = 7;
	public static readonly RULE_non_capture = 8;
	public static readonly RULE_option = 9;
	public static readonly RULE_option_flag = 10;
	public static readonly RULE_atom = 11;
	public static readonly RULE_cc_atom = 12;
	public static readonly RULE_shared_atom = 13;
	public static readonly RULE_literal = 14;
	public static readonly RULE_cc_literal = 15;
	public static readonly RULE_shared_literal = 16;
	public static readonly RULE_number = 17;
	public static readonly RULE_octal_char = 18;
	public static readonly RULE_octal_digit = 19;
	public static readonly RULE_digits = 20;
	public static readonly RULE_digit = 21;
	public static readonly RULE_name = 22;
	public static readonly RULE_alpha_nums = 23;
	public static readonly RULE_non_close_parens = 24;
	public static readonly RULE_non_close_paren = 25;
	public static readonly RULE_letter = 26;
	// tslint:disable:no-trailing-whitespace
	public static readonly ruleNames: string[] = [
		"parse", "alternation", "expr", "element", "quantifier", "quantifier_type", 
		"character_class", "capture", "non_capture", "option", "option_flag", 
		"atom", "cc_atom", "shared_atom", "literal", "cc_literal", "shared_literal", 
		"number", "octal_char", "octal_digit", "digits", "digit", "name", "alpha_nums", 
		"non_close_parens", "non_close_paren", "letter",
	];
	private static readonly _LITERAL_NAMES: Array<string | undefined> = [
		undefined, undefined, undefined, "'\\'", "'\\'", "'\\'", "'\\'", "'\\'", 
		"'\\'", "'\\'", "'\\'", undefined, "'.'", "'\\'", "'\\'", undefined, undefined, 
		"'\\'", "'\\'", "'\\'", "'\\'", "'['", "']'", "'^'", "'-'", "'?'", "'+'", 
		"'*'", "'{'", "'}'", "','", "'$'", "'|'", "'('", "')'", "'<'", "'>'", 
		"'''", "'_'", "':'", "'#'", "'='", "'!'", "'&'", "'a'", "'b'", "'c'", 
		"'d'", "'e'", "'f'", "'g'", "'h'", "'i'", "'j'", "'k'", "'l'", "'m'", 
		"'n'", "'o'", "'p'", "'q'", "'r'", "'s'", "'t'", "'u'", "'v'", "'w'", 
		"'x'", "'y'", "'z'", "'A'", "'B'", "'C'", "'D'", "'E'", "'F'", "'G'", 
		"'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'", "'P'", "'Q'", 
		"'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'", "'Z'", "'1'", 
		"'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "'0'",
	];
	private static readonly _SYMBOLIC_NAMES: Array<string | undefined> = [
		undefined, "Quoted", "BlockQuoted", "BellChar", "ControlChar", "EscapeChar", 
		"FormFeed", "NewLine", "CarriageReturn", "Tab", "Backslash", "HexChar", 
		"Dot", "DecimalDigit", "NotDecimalDigit", "CharWithProperty", "CharWithoutProperty", 
		"WhiteSpace", "NotWhiteSpace", "WordChar", "NotWordChar", "CharacterClassStart", 
		"CharacterClassEnd", "Caret", "Hyphen", "QuestionMark", "Plus", "Star", 
		"OpenBrace", "CloseBrace", "Comma", "EndOfSubject", "Pipe", "OpenParen", 
		"CloseParen", "LessThan", "GreaterThan", "SingleQuote", "Underscore", 
		"Colon", "Hash", "Equals", "Exclamation", "Ampersand", "ALC", "BLC", "CLC", 
		"DLC", "ELC", "FLC", "GLC", "HLC", "ILC", "JLC", "KLC", "LLC", "MLC", 
		"NLC", "OLC", "PLC", "QLC", "RLC", "SLC", "TLC", "ULC", "VLC", "WLC", 
		"XLC", "YLC", "ZLC", "AUC", "BUC", "CUC", "DUC", "EUC", "FUC", "GUC", 
		"HUC", "IUC", "JUC", "KUC", "LUC", "MUC", "NUC", "OUC", "PUC", "QUC", 
		"RUC", "SUC", "TUC", "UUC", "VUC", "WUC", "XUC", "YUC", "ZUC", "D1", "D2", 
		"D3", "D4", "D5", "D6", "D7", "D8", "D9", "D0", "OtherChar",
	];
	public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CommonRegexParser._LITERAL_NAMES, CommonRegexParser._SYMBOLIC_NAMES, []);
	// @Override
	// @NotNull
	public get vocabulary(): Vocabulary {
		return CommonRegexParser.VOCABULARY;
	}
	// tslint:enable:no-trailing-whitespace
	// @Override
	public get grammarFileName(): string { return "CommonRegex.g4"; }
	// @Override
	public get ruleNames(): string[] { return CommonRegexParser.ruleNames; }
	// @Override
	public get serializedATN(): string { return CommonRegexParser._serializedATN; }
	constructor(input: TokenStream) {
		super(input);
		this._interp = new ParserATNSimulator(CommonRegexParser._ATN, this);
	}
	// @RuleVersion(0)
	public parse(): ParseContext {
		let _localctx: ParseContext = new ParseContext(this._ctx, this.state);
		this.enterRule(_localctx, 0, CommonRegexParser.RULE_parse);
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 54;
			this.alternation();
			this.state = 55;
			this.match(CommonRegexParser.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 alternation(): AlternationContext {
		let _localctx: AlternationContext = new AlternationContext(this._ctx, this.state);
		this.enterRule(_localctx, 2, CommonRegexParser.RULE_alternation);
		let _la: number;
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 57;
			this.expr();
			this.state = 62;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while (_la === CommonRegexParser.Pipe) {
				{
				{
				this.state = 58;
				this.match(CommonRegexParser.Pipe);
				this.state = 59;
				this.expr();
				}
				}
				this.state = 64;
				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 expr(): ExprContext {
		let _localctx: ExprContext = new ExprContext(this._ctx, this.state);
		this.enterRule(_localctx, 4, CommonRegexParser.RULE_expr);
		let _la: number;
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 68;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CommonRegexParser.Quoted) | (1 << CommonRegexParser.BlockQuoted) | (1 << CommonRegexParser.BellChar) | (1 << CommonRegexParser.ControlChar) | (1 << CommonRegexParser.EscapeChar) | (1 << CommonRegexParser.FormFeed) | (1 << CommonRegexParser.NewLine) | (1 << CommonRegexParser.CarriageReturn) | (1 << CommonRegexParser.Tab) | (1 << CommonRegexParser.Backslash) | (1 << CommonRegexParser.HexChar) | (1 << CommonRegexParser.Dot) | (1 << CommonRegexParser.DecimalDigit) | (1 << CommonRegexParser.NotDecimalDigit) | (1 << CommonRegexParser.CharWithProperty) | (1 << CommonRegexParser.CharWithoutProperty) | (1 << CommonRegexParser.WhiteSpace) | (1 << CommonRegexParser.NotWhiteSpace) | (1 << CommonRegexParser.WordChar) | (1 << CommonRegexParser.NotWordChar) | (1 << CommonRegexParser.CharacterClassStart) | (1 << CommonRegexParser.CharacterClassEnd) | (1 << CommonRegexParser.Caret) | (1 << CommonRegexParser.Hyphen) | (1 << CommonRegexParser.OpenBrace) | (1 << CommonRegexParser.CloseBrace) | (1 << CommonRegexParser.Comma) | (1 << CommonRegexParser.EndOfSubject))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (CommonRegexParser.OpenParen - 33)) | (1 << (CommonRegexParser.LessThan - 33)) | (1 << (CommonRegexParser.GreaterThan - 33)) | (1 << (CommonRegexParser.SingleQuote - 33)) | (1 << (CommonRegexParser.Underscore - 33)) | (1 << (CommonRegexParser.Colon - 33)) | (1 << (CommonRegexParser.Hash - 33)) | (1 << (CommonRegexParser.Equals - 33)) | (1 << (CommonRegexParser.Exclamation - 33)) | (1 << (CommonRegexParser.Ampersand - 33)) | (1 << (CommonRegexParser.ALC - 33)) | (1 << (CommonRegexParser.BLC - 33)) | (1 << (CommonRegexParser.CLC - 33)) | (1 << (CommonRegexParser.DLC - 33)) | (1 << (CommonRegexParser.ELC - 33)) | (1 << (CommonRegexParser.FLC - 33)) | (1 << (CommonRegexParser.GLC - 33)) | (1 << (CommonRegexParser.HLC - 33)) | (1 << (CommonRegexParser.ILC - 33)) | (1 << (CommonRegexParser.JLC - 33)) | (1 << (CommonRegexParser.KLC - 33)) | (1 << (CommonRegexParser.LLC - 33)) | (1 << (CommonRegexParser.MLC - 33)) | (1 << (CommonRegexParser.NLC - 33)) | (1 << (CommonRegexParser.OLC - 33)) | (1 << (CommonRegexParser.PLC - 33)) | (1 << (CommonRegexParser.QLC - 33)) | (1 << (CommonRegexParser.RLC - 33)) | (1 << (CommonRegexParser.SLC - 33)) | (1 << (CommonRegexParser.TLC - 33)) | (1 << (CommonRegexParser.ULC - 33)))) !== 0) || ((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & ((1 << (CommonRegexParser.VLC - 65)) | (1 << (CommonRegexParser.WLC - 65)) | (1 << (CommonRegexParser.XLC - 65)) | (1 << (CommonRegexParser.YLC - 65)) | (1 << (CommonRegexParser.ZLC - 65)) | (1 << (CommonRegexParser.AUC - 65)) | (1 << (CommonRegexParser.BUC - 65)) | (1 << (CommonRegexParser.CUC - 65)) | (1 << (CommonRegexParser.DUC - 65)) | (1 << (CommonRegexParser.EUC - 65)) | (1 << (CommonRegexParser.FUC - 65)) | (1 << (CommonRegexParser.GUC - 65)) | (1 << (CommonRegexParser.HUC - 65)) | (1 << (CommonRegexParser.IUC - 65)) | (1 << (CommonRegexParser.JUC - 65)) | (1 << (CommonRegexParser.KUC - 65)) | (1 << (CommonRegexParser.LUC - 65)) | (1 << (CommonRegexParser.MUC - 65)) | (1 << (CommonRegexParser.NUC - 65)) | (1 << (CommonRegexParser.OUC - 65)) | (1 << (CommonRegexParser.PUC - 65)) | (1 << (CommonRegexParser.QUC - 65)) | (1 << (CommonRegexParser.RUC - 65)) | (1 << (CommonRegexParser.SUC - 65)) | (1 << (CommonRegexParser.TUC - 65)) | (1 << (CommonRegexParser.UUC - 65)) | (1 << (CommonRegexParser.VUC - 65)) | (1 << (CommonRegexParser.WUC - 65)) | (1 << (CommonRegexParser.XUC - 65)) | (1 << (CommonRegexParser.YUC - 65)) | (1 << (CommonRegexParser.ZUC - 65)) | (1 << (CommonRegexParser.D1 - 65)))) !== 0) || ((((_la - 97)) & ~0x1F) === 0 && ((1 << (_la - 97)) & ((1 << (CommonRegexParser.D2 - 97)) | (1 << (CommonRegexParser.D3 - 97)) | (1 << (CommonRegexParser.D4 - 97)) | (1 << (CommonRegexParser.D5 - 97)) | (1 << (CommonRegexParser.D6 - 97)) | (1 << (CommonRegexParser.D7 - 97)) | (1 << (CommonRegexParser.D8 - 97)) | (1 << (CommonRegexParser.D9 - 97)) | (1 << (CommonRegexParser.D0 - 97)) | (1 << (CommonRegexParser.OtherChar - 97)))) !== 0)) {
				{
				{
				this.state = 65;
				this.element();
				}
				}
				this.state = 70;
				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 element(): ElementContext {
		let _localctx: ElementContext = new ElementContext(this._ctx, this.state);
		this.enterRule(_localctx, 6, CommonRegexParser.RULE_element);
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 71;
			this.atom();
			this.state = 73;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 2, this._ctx) ) {
			case 1:
				{
				this.state = 72;
				this.quantifier();
				}
				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 quantifier(): QuantifierContext {
		let _localctx: QuantifierContext = new QuantifierContext(this._ctx, this.state);
		this.enterRule(_localctx, 8, CommonRegexParser.RULE_quantifier);
		try {
			this.state = 99;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) {
			case 1:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 75;
				this.match(CommonRegexParser.QuestionMark);
				this.state = 76;
				this.quantifier_type();
				}
				break;
			case 2:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 77;
				this.match(CommonRegexParser.Plus);
				this.state = 78;
				this.quantifier_type();
				}
				break;
			case 3:
				this.enterOuterAlt(_localctx, 3);
				{
				this.state = 79;
				this.match(CommonRegexParser.Star);
				this.state = 80;
				this.quantifier_type();
				}
				break;
			case 4:
				this.enterOuterAlt(_localctx, 4);
				{
				this.state = 81;
				this.match(CommonRegexParser.OpenBrace);
				this.state = 82;
				this.number();
				this.state = 83;
				this.match(CommonRegexParser.CloseBrace);
				this.state = 84;
				this.quantifier_type();
				}
				break;
			case 5:
				this.enterOuterAlt(_localctx, 5);
				{
				this.state = 86;
				this.match(CommonRegexParser.OpenBrace);
				this.state = 87;
				this.number();
				this.state = 88;
				this.match(CommonRegexParser.Comma);
				this.state = 89;
				this.match(CommonRegexParser.CloseBrace);
				this.state = 90;
				this.quantifier_type();
				}
				break;
			case 6:
				this.enterOuterAlt(_localctx, 6);
				{
				this.state = 92;
				this.match(CommonRegexParser.OpenBrace);
				this.state = 93;
				this.number();
				this.state = 94;
				this.match(CommonRegexParser.Comma);
				this.state = 95;
				this.number();
				this.state = 96;
				this.match(CommonRegexParser.CloseBrace);
				this.state = 97;
				this.quantifier_type();
				}
				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 quantifier_type(): Quantifier_typeContext {
		let _localctx: Quantifier_typeContext = new Quantifier_typeContext(this._ctx, this.state);
		this.enterRule(_localctx, 10, CommonRegexParser.RULE_quantifier_type);
		try {
			this.state = 104;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case CommonRegexParser.Plus:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 101;
				this.match(CommonRegexParser.Plus);
				}
				break;
			case CommonRegexParser.QuestionMark:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 102;
				this.match(CommonRegexParser.QuestionMark);
				}
				break;
			case CommonRegexParser.EOF:
			case CommonRegexParser.Quoted:
			case CommonRegexParser.BlockQuoted:
			case CommonRegexParser.BellChar:
			case CommonRegexParser.ControlChar:
			case CommonRegexParser.EscapeChar:
			case CommonRegexParser.FormFeed:
			case CommonRegexParser.NewLine:
			case CommonRegexParser.CarriageReturn:
			case CommonRegexParser.Tab:
			case CommonRegexParser.Backslash:
			case CommonRegexParser.HexChar:
			case CommonRegexParser.Dot:
			case CommonRegexParser.DecimalDigit:
			case CommonRegexParser.NotDecimalDigit:
			case CommonRegexParser.CharWithProperty:
			case CommonRegexParser.CharWithoutProperty:
			case CommonRegexParser.WhiteSpace:
			case CommonRegexParser.NotWhiteSpace:
			case CommonRegexParser.WordChar:
			case CommonRegexParser.NotWordChar:
			case CommonRegexParser.CharacterClassStart:
			case CommonRegexParser.CharacterClassEnd:
			case CommonRegexParser.Caret:
			case CommonRegexParser.Hyphen:
			case CommonRegexParser.OpenBrace:
			case CommonRegexParser.CloseBrace:
			case CommonRegexParser.Comma:
			case CommonRegexParser.EndOfSubject:
			case CommonRegexParser.Pipe:
			case CommonRegexParser.OpenParen:
			case CommonRegexParser.CloseParen:
			case CommonRegexParser.LessThan:
			case CommonRegexParser.GreaterThan:
			case CommonRegexParser.SingleQuote:
			case CommonRegexParser.Underscore:
			case CommonRegexParser.Colon:
			case CommonRegexParser.Hash:
			case CommonRegexParser.Equals:
			case CommonRegexParser.Exclamation:
			case CommonRegexParser.Ampersand:
			case CommonRegexParser.ALC:
			case CommonRegexParser.BLC:
			case CommonRegexParser.CLC:
			case CommonRegexParser.DLC:
			case CommonRegexParser.ELC:
			case CommonRegexParser.FLC:
			case CommonRegexParser.GLC:
			case CommonRegexParser.HLC:
			case CommonRegexParser.ILC:
			case CommonRegexParser.JLC:
			case CommonRegexParser.KLC:
			case CommonRegexParser.LLC:
			case CommonRegexParser.MLC:
			case CommonRegexParser.NLC:
			case CommonRegexParser.OLC:
			case CommonRegexParser.PLC:
			case CommonRegexParser.QLC:
			case CommonRegexParser.RLC:
			case CommonRegexParser.SLC:
			case CommonRegexParser.TLC:
			case CommonRegexParser.ULC:
			case CommonRegexParser.VLC:
			case CommonRegexParser.WLC:
			case CommonRegexParser.XLC:
			case CommonRegexParser.YLC:
			case CommonRegexParser.ZLC:
			case CommonRegexParser.AUC:
			case CommonRegexParser.BUC:
			case CommonRegexParser.CUC:
			case CommonRegexParser.DUC:
			case CommonRegexParser.EUC:
			case CommonRegexParser.FUC:
			case CommonRegexParser.GUC:
			case CommonRegexParser.HUC:
			case CommonRegexParser.IUC:
			case CommonRegexParser.JUC:
			case CommonRegexParser.KUC:
			case CommonRegexParser.LUC:
			case CommonRegexParser.MUC:
			case CommonRegexParser.NUC:
			case CommonRegexParser.OUC:
			case CommonRegexParser.PUC:
			case CommonRegexParser.QUC:
			case CommonRegexParser.RUC:
			case CommonRegexParser.SUC:
			case CommonRegexParser.TUC:
			case CommonRegexParser.UUC:
			case CommonRegexParser.VUC:
			case CommonRegexParser.WUC:
			case CommonRegexParser.XUC:
			case CommonRegexParser.YUC:
			case CommonRegexParser.ZUC:
			case CommonRegexParser.D1:
			case CommonRegexParser.D2:
			case CommonRegexParser.D3:
			case CommonRegexParser.D4:
			case CommonRegexParser.D5:
			case CommonRegexParser.D6:
			case CommonRegexParser.D7:
			case CommonRegexParser.D8:
			case CommonRegexParser.D9:
			case CommonRegexParser.D0:
			case CommonRegexParser.OtherChar:
				this.enterOuterAlt(_localctx, 3);
				// tslint:disable-next-line:no-empty
				{
				}
				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 character_class(): Character_classContext {
		let _localctx: Character_classContext = new Character_classContext(this._ctx, this.state);
		this.enterRule(_localctx, 12, CommonRegexParser.RULE_character_class);
		let _la: number;
		try {
			this.state = 123;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) {
			case 1:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 106;
				this.match(CommonRegexParser.CharacterClassStart);
				this.state = 107;
				this.match(CommonRegexParser.Caret);
				this.state = 109;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				do {
					{
					{
					this.state = 108;
					this.cc_atom();
					}
					}
					this.state = 111;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
				} while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CommonRegexParser.Quoted) | (1 << CommonRegexParser.BlockQuoted) | (1 << CommonRegexParser.BellChar) | (1 << CommonRegexParser.ControlChar) | (1 << CommonRegexParser.EscapeChar) | (1 << CommonRegexParser.FormFeed) | (1 << CommonRegexParser.NewLine) | (1 << CommonRegexParser.CarriageReturn) | (1 << CommonRegexParser.Tab) | (1 << CommonRegexParser.Backslash) | (1 << CommonRegexParser.HexChar) | (1 << CommonRegexParser.Dot) | (1 << CommonRegexParser.DecimalDigit) | (1 << CommonRegexParser.NotDecimalDigit) | (1 << CommonRegexParser.CharWithProperty) | (1 << CommonRegexParser.CharWithoutProperty) | (1 << CommonRegexParser.WhiteSpace) | (1 << CommonRegexParser.NotWhiteSpace) | (1 << CommonRegexParser.WordChar) | (1 << CommonRegexParser.NotWordChar) | (1 << CommonRegexParser.CharacterClassStart) | (1 << CommonRegexParser.Caret) | (1 << CommonRegexParser.Hyphen) | (1 << CommonRegexParser.QuestionMark) | (1 << CommonRegexParser.Plus) | (1 << CommonRegexParser.Star) | (1 << CommonRegexParser.OpenBrace) | (1 << CommonRegexParser.CloseBrace) | (1 << CommonRegexParser.Comma) | (1 << CommonRegexParser.EndOfSubject))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (CommonRegexParser.Pipe - 32)) | (1 << (CommonRegexParser.OpenParen - 32)) | (1 << (CommonRegexParser.CloseParen - 32)) | (1 << (CommonRegexParser.LessThan - 32)) | (1 << (CommonRegexParser.GreaterThan - 32)) | (1 << (CommonRegexParser.SingleQuote - 32)) | (1 << (CommonRegexParser.Underscore - 32)) | (1 << (CommonRegexParser.Colon - 32)) | (1 << (CommonRegexParser.Hash - 32)) | (1 << (CommonRegexParser.Equals - 32)) | (1 << (CommonRegexParser.Exclamation - 32)) | (1 << (CommonRegexParser.Ampersand - 32)) | (1 << (CommonRegexParser.ALC - 32)) | (1 << (CommonRegexParser.BLC - 32)) | (1 << (CommonRegexParser.CLC - 32)) | (1 << (CommonRegexParser.DLC - 32)) | (1 << (CommonRegexParser.ELC - 32)) | (1 << (CommonRegexParser.FLC - 32)) | (1 << (CommonRegexParser.GLC - 32)) | (1 << (CommonRegexParser.HLC - 32)) | (1 << (CommonRegexParser.ILC - 32)) | (1 << (CommonRegexParser.JLC - 32)) | (1 << (CommonRegexParser.KLC - 32)) | (1 << (CommonRegexParser.LLC - 32)) | (1 << (CommonRegexParser.MLC - 32)) | (1 << (CommonRegexParser.NLC - 32)) | (1 << (CommonRegexParser.OLC - 32)) | (1 << (CommonRegexParser.PLC - 32)) | (1 << (CommonRegexParser.QLC - 32)) | (1 << (CommonRegexParser.RLC - 32)) | (1 << (CommonRegexParser.SLC - 32)) | (1 << (CommonRegexParser.TLC - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (CommonRegexParser.ULC - 64)) | (1 << (CommonRegexParser.VLC - 64)) | (1 << (CommonRegexParser.WLC - 64)) | (1 << (CommonRegexParser.XLC - 64)) | (1 << (CommonRegexParser.YLC - 64)) | (1 << (CommonRegexParser.ZLC - 64)) | (1 << (CommonRegexParser.AUC - 64)) | (1 << (CommonRegexParser.BUC - 64)) | (1 << (CommonRegexParser.CUC - 64)) | (1 << (CommonRegexParser.DUC - 64)) | (1 << (CommonRegexParser.EUC - 64)) | (1 << (CommonRegexParser.FUC - 64)) | (1 << (CommonRegexParser.GUC - 64)) | (1 << (CommonRegexParser.HUC - 64)) | (1 << (CommonRegexParser.IUC - 64)) | (1 << (CommonRegexParser.JUC - 64)) | (1 << (CommonRegexParser.KUC - 64)) | (1 << (CommonRegexParser.LUC - 64)) | (1 << (CommonRegexParser.MUC - 64)) | (1 << (CommonRegexParser.NUC - 64)) | (1 << (CommonRegexParser.OUC - 64)) | (1 << (CommonRegexParser.PUC - 64)) | (1 << (CommonRegexParser.QUC - 64)) | (1 << (CommonRegexParser.RUC - 64)) | (1 << (CommonRegexParser.SUC - 64)) | (1 << (CommonRegexParser.TUC - 64)) | (1 << (CommonRegexParser.UUC - 64)) | (1 << (CommonRegexParser.VUC - 64)) | (1 << (CommonRegexParser.WUC - 64)) | (1 << (CommonRegexParser.XUC - 64)) | (1 << (CommonRegexParser.YUC - 64)) | (1 << (CommonRegexParser.ZUC - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (CommonRegexParser.D1 - 96)) | (1 << (CommonRegexParser.D2 - 96)) | (1 << (CommonRegexParser.D3 - 96)) | (1 << (CommonRegexParser.D4 - 96)) | (1 << (CommonRegexParser.D5 - 96)) | (1 << (CommonRegexParser.D6 - 96)) | (1 << (CommonRegexParser.D7 - 96)) | (1 << (CommonRegexParser.D8 - 96)) | (1 << (CommonRegexParser.D9 - 96)) | (1 << (CommonRegexParser.D0 - 96)) | (1 << (CommonRegexParser.OtherChar - 96)))) !== 0));
				this.state = 113;
				this.match(CommonRegexParser.CharacterClassEnd);
				}
				break;
			case 2:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 115;
				this.match(CommonRegexParser.CharacterClassStart);
				this.state = 117;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
				do {
					{
					{
					this.state = 116;
					this.cc_atom();
					}
					}
					this.state = 119;
					this._errHandler.sync(this);
					_la = this._input.LA(1);
				} while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CommonRegexParser.Quoted) | (1 << CommonRegexParser.BlockQuoted) | (1 << CommonRegexParser.BellChar) | (1 << CommonRegexParser.ControlChar) | (1 << CommonRegexParser.EscapeChar) | (1 << CommonRegexParser.FormFeed) | (1 << CommonRegexParser.NewLine) | (1 << CommonRegexParser.CarriageReturn) | (1 << CommonRegexParser.Tab) | (1 << CommonRegexParser.Backslash) | (1 << CommonRegexParser.HexChar) | (1 << CommonRegexParser.Dot) | (1 << CommonRegexParser.DecimalDigit) | (1 << CommonRegexParser.NotDecimalDigit) | (1 << CommonRegexParser.CharWithProperty) | (1 << CommonRegexParser.CharWithoutProperty) | (1 << CommonRegexParser.WhiteSpace) | (1 << CommonRegexParser.NotWhiteSpace) | (1 << CommonRegexParser.WordChar) | (1 << CommonRegexParser.NotWordChar) | (1 << CommonRegexParser.CharacterClassStart) | (1 << CommonRegexParser.Caret) | (1 << CommonRegexParser.Hyphen) | (1 << CommonRegexParser.QuestionMark) | (1 << CommonRegexParser.Plus) | (1 << CommonRegexParser.Star) | (1 << CommonRegexParser.OpenBrace) | (1 << CommonRegexParser.CloseBrace) | (1 << CommonRegexParser.Comma) | (1 << CommonRegexParser.EndOfSubject))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (CommonRegexParser.Pipe - 32)) | (1 << (CommonRegexParser.OpenParen - 32)) | (1 << (CommonRegexParser.CloseParen - 32)) | (1 << (CommonRegexParser.LessThan - 32)) | (1 << (CommonRegexParser.GreaterThan - 32)) | (1 << (CommonRegexParser.SingleQuote - 32)) | (1 << (CommonRegexParser.Underscore - 32)) | (1 << (CommonRegexParser.Colon - 32)) | (1 << (CommonRegexParser.Hash - 32)) | (1 << (CommonRegexParser.Equals - 32)) | (1 << (CommonRegexParser.Exclamation - 32)) | (1 << (CommonRegexParser.Ampersand - 32)) | (1 << (CommonRegexParser.ALC - 32)) | (1 << (CommonRegexParser.BLC - 32)) | (1 << (CommonRegexParser.CLC - 32)) | (1 << (CommonRegexParser.DLC - 32)) | (1 << (CommonRegexParser.ELC - 32)) | (1 << (CommonRegexParser.FLC - 32)) | (1 << (CommonRegexParser.GLC - 32)) | (1 << (CommonRegexParser.HLC - 32)) | (1 << (CommonRegexParser.ILC - 32)) | (1 << (CommonRegexParser.JLC - 32)) | (1 << (CommonRegexParser.KLC - 32)) | (1 << (CommonRegexParser.LLC - 32)) | (1 << (CommonRegexParser.MLC - 32)) | (1 << (CommonRegexParser.NLC - 32)) | (1 << (CommonRegexParser.OLC - 32)) | (1 << (CommonRegexParser.PLC - 32)) | (1 << (CommonRegexParser.QLC - 32)) | (1 << (CommonRegexParser.RLC - 32)) | (1 << (CommonRegexParser.SLC - 32)) | (1 << (CommonRegexParser.TLC - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (CommonRegexParser.ULC - 64)) | (1 << (CommonRegexParser.VLC - 64)) | (1 << (CommonRegexParser.WLC - 64)) | (1 << (CommonRegexParser.XLC - 64)) | (1 << (CommonRegexParser.YLC - 64)) | (1 << (CommonRegexParser.ZLC - 64)) | (1 << (CommonRegexParser.AUC - 64)) | (1 << (CommonRegexParser.BUC - 64)) | (1 << (CommonRegexParser.CUC - 64)) | (1 << (CommonRegexParser.DUC - 64)) | (1 << (CommonRegexParser.EUC - 64)) | (1 << (CommonRegexParser.FUC - 64)) | (1 << (CommonRegexParser.GUC - 64)) | (1 << (CommonRegexParser.HUC - 64)) | (1 << (CommonRegexParser.IUC - 64)) | (1 << (CommonRegexParser.JUC - 64)) | (1 << (CommonRegexParser.KUC - 64)) | (1 << (CommonRegexParser.LUC - 64)) | (1 << (CommonRegexParser.MUC - 64)) | (1 << (CommonRegexParser.NUC - 64)) | (1 << (CommonRegexParser.OUC - 64)) | (1 << (CommonRegexParser.PUC - 64)) | (1 << (CommonRegexParser.QUC - 64)) | (1 << (CommonRegexParser.RUC - 64)) | (1 << (CommonRegexParser.SUC - 64)) | (1 << (CommonRegexParser.TUC - 64)) | (1 << (CommonRegexParser.UUC - 64)) | (1 << (CommonRegexParser.VUC - 64)) | (1 << (CommonRegexParser.WUC - 64)) | (1 << (CommonRegexParser.XUC - 64)) | (1 << (CommonRegexParser.YUC - 64)) | (1 << (CommonRegexParser.ZUC - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (CommonRegexParser.D1 - 96)) | (1 << (CommonRegexParser.D2 - 96)) | (1 << (CommonRegexParser.D3 - 96)) | (1 << (CommonRegexParser.D4 - 96)) | (1 << (CommonRegexParser.D5 - 96)) | (1 << (CommonRegexParser.D6 - 96)) | (1 << (CommonRegexParser.D7 - 96)) | (1 << (CommonRegexParser.D8 - 96)) | (1 << (CommonRegexParser.D9 - 96)) | (1 << (CommonRegexParser.D0 - 96)) | (1 << (CommonRegexParser.OtherChar - 96)))) !== 0));
				this.state = 121;
				this.match(CommonRegexParser.CharacterClassEnd);
				}
				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 capture(): CaptureContext {
		let _localctx: CaptureContext = new CaptureContext(this._ctx, this.state);
		this.enterRule(_localctx, 14, CommonRegexParser.RULE_capture);
		try {
			this.state = 137;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 8, this._ctx) ) {
			case 1:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 125;
				this.match(CommonRegexParser.OpenParen);
				this.state = 126;
				this.match(CommonRegexParser.QuestionMark);
				this.state = 127;
				this.match(CommonRegexParser.LessThan);
				this.state = 128;
				this.name();
				this.state = 129;
				this.match(CommonRegexParser.GreaterThan);
				this.state = 130;
				this.alternation();
				this.state = 131;
				this.match(CommonRegexParser.CloseParen);
				}
				break;
			case 2:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 133;
				this.match(CommonRegexParser.OpenParen);
				this.state = 134;
				this.alternation();
				this.state = 135;
				this.match(CommonRegexParser.CloseParen);
				}
				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 non_capture(): Non_captureContext {
		let _localctx: Non_captureContext = new Non_captureContext(this._ctx, this.state);
		this.enterRule(_localctx, 16, CommonRegexParser.RULE_non_capture);
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 139;
			this.match(CommonRegexParser.OpenParen);
			this.state = 140;
			this.match(CommonRegexParser.QuestionMark);
			this.state = 141;
			this.match(CommonRegexParser.Colon);
			this.state = 142;
			this.alternation();
			this.state = 143;
			this.match(CommonRegexParser.CloseParen);
			}
		}
		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 option(): OptionContext {
		let _localctx: OptionContext = new OptionContext(this._ctx, this.state);
		this.enterRule(_localctx, 18, CommonRegexParser.RULE_option);
		let _la: number;
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 145;
			this.match(CommonRegexParser.OpenParen);
			this.state = 146;
			this.match(CommonRegexParser.QuestionMark);
			this.state = 148;
			this._errHandler.sync(this);
			_la = this._input.LA(1);
			do {
				{
				{
				this.state = 147;
				this.option_flag();
				}
				}
				this.state = 150;
				this._errHandler.sync(this);
				_la = this._input.LA(1);
			} while (((((_la - 52)) & ~0x1F) === 0 && ((1 << (_la - 52)) & ((1 << (CommonRegexParser.ILC - 52)) | (1 << (CommonRegexParser.MLC - 52)) | (1 << (CommonRegexParser.SLC - 52)))) !== 0));
			this.state = 152;
			this.match(CommonRegexParser.CloseParen);
			}
		}
		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 option_flag(): Option_flagContext {
		let _localctx: Option_flagContext = new Option_flagContext(this._ctx, this.state);
		this.enterRule(_localctx, 20, CommonRegexParser.RULE_option_flag);
		let _la: number;
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 154;
			_la = this._input.LA(1);
			if (!(((((_la - 52)) & ~0x1F) === 0 && ((1 << (_la - 52)) & ((1 << (CommonRegexParser.ILC - 52)) | (1 << (CommonRegexParser.MLC - 52)) | (1 << (CommonRegexParser.SLC - 52)))) !== 0))) {
			this._errHandler.recoverInline(this);
			} else {
				if (this._input.LA(1) === Token.EOF) {
					this.matchedEOF = true;
				}
				this._errHandler.reportMatch(this);
				this.consume();
			}
			}
		}
		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 atom(): AtomContext {
		let _localctx: AtomContext = new AtomContext(this._ctx, this.state);
		this.enterRule(_localctx, 22, CommonRegexParser.RULE_atom);
		try {
			this.state = 165;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) {
			case 1:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 156;
				this.shared_atom();
				}
				break;
			case 2:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 157;
				this.literal();
				}
				break;
			case 3:
				this.enterOuterAlt(_localctx, 3);
				{
				this.state = 158;
				this.character_class();
				}
				break;
			case 4:
				this.enterOuterAlt(_localctx, 4);
				{
				this.state = 159;
				this.capture();
				}
				break;
			case 5:
				this.enterOuterAlt(_localctx, 5);
				{
				this.state = 160;
				this.non_capture();
				}
				break;
			case 6:
				this.enterOuterAlt(_localctx, 6);
				{
				this.state = 161;
				this.option();
				}
				break;
			case 7:
				this.enterOuterAlt(_localctx, 7);
				{
				this.state = 162;
				this.match(CommonRegexParser.Dot);
				}
				break;
			case 8:
				this.enterOuterAlt(_localctx, 8);
				{
				this.state = 163;
				this.match(CommonRegexParser.Caret);
				}
				break;
			case 9:
				this.enterOuterAlt(_localctx, 9);
				{
				this.state = 164;
				this.match(CommonRegexParser.EndOfSubject);
				}
				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 cc_atom(): Cc_atomContext {
		let _localctx: Cc_atomContext = new Cc_atomContext(this._ctx, this.state);
		this.enterRule(_localctx, 24, CommonRegexParser.RULE_cc_atom);
		try {
			this.state = 173;
			this._errHandler.sync(this);
			switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) {
			case 1:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 167;
				this.cc_literal();
				this.state = 168;
				this.match(CommonRegexParser.Hyphen);
				this.state = 169;
				this.cc_literal();
				}
				break;
			case 2:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 171;
				this.shared_atom();
				}
				break;
			case 3:
				this.enterOuterAlt(_localctx, 3);
				{
				this.state = 172;
				this.cc_literal();
				}
				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 shared_atom(): Shared_atomContext {
		let _localctx: Shared_atomContext = new Shared_atomContext(this._ctx, this.state);
		this.enterRule(_localctx, 26, CommonRegexParser.RULE_shared_atom);
		let _la: number;
		try {
			this.enterOuterAlt(_localctx, 1);
			{
			this.state = 175;
			_la = this._input.LA(1);
			if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CommonRegexParser.ControlChar) | (1 << CommonRegexParser.DecimalDigit) | (1 << CommonRegexParser.NotDecimalDigit) | (1 << CommonRegexParser.CharWithProperty) | (1 << CommonRegexParser.CharWithoutProperty) | (1 << CommonRegexParser.WhiteSpace) | (1 << CommonRegexParser.NotWhiteSpace) | (1 << CommonRegexParser.WordChar) | (1 << CommonRegexParser.NotWordChar))) !== 0))) {
			this._errHandler.recoverInline(this);
			} else {
				if (this._input.LA(1) === Token.EOF) {
					this.matchedEOF = true;
				}
				this._errHandler.reportMatch(this);
				this.consume();
			}
			}
		}
		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 literal(): LiteralContext {
		let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state);
		this.enterRule(_localctx, 28, CommonRegexParser.RULE_literal);
		try {
			this.state = 179;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case CommonRegexParser.Quoted:
			case CommonRegexParser.BlockQuoted:
			case CommonRegexParser.BellChar:
			case CommonRegexParser.EscapeChar:
			case CommonRegexParser.FormFeed:
			case CommonRegexParser.NewLine:
			case CommonRegexParser.CarriageReturn:
			case CommonRegexParser.Tab:
			case CommonRegexParser.Backslash:
			case CommonRegexParser.HexChar:
			case CommonRegexParser.Hyphen:
			case CommonRegexParser.OpenBrace:
			case CommonRegexParser.CloseBrace:
			case CommonRegexParser.Comma:
			case CommonRegexParser.LessThan:
			case CommonRegexParser.GreaterThan:
			case CommonRegexParser.SingleQuote:
			case CommonRegexParser.Underscore:
			case CommonRegexParser.Colon:
			case CommonRegexParser.Hash:
			case CommonRegexParser.Equals:
			case CommonRegexParser.Exclamation:
			case CommonRegexParser.Ampersand:
			case CommonRegexParser.ALC:
			case CommonRegexParser.BLC:
			case CommonRegexParser.CLC:
			case CommonRegexParser.DLC:
			case CommonRegexParser.ELC:
			case CommonRegexParser.FLC:
			case CommonRegexParser.GLC:
			case CommonRegexParser.HLC:
			case CommonRegexParser.ILC:
			case CommonRegexParser.JLC:
			case CommonRegexParser.KLC:
			case CommonRegexParser.LLC:
			case CommonRegexParser.MLC:
			case CommonRegexParser.NLC:
			case CommonRegexParser.OLC:
			case CommonRegexParser.PLC:
			case CommonRegexParser.QLC:
			case CommonRegexParser.RLC:
			case CommonRegexParser.SLC:
			case CommonRegexParser.TLC:
			case CommonRegexParser.ULC:
			case CommonRegexParser.VLC:
			case CommonRegexParser.WLC:
			case CommonRegexParser.XLC:
			case CommonRegexParser.YLC:
			case CommonRegexParser.ZLC:
			case CommonRegexParser.AUC:
			case CommonRegexParser.BUC:
			case CommonRegexParser.CUC:
			case CommonRegexParser.DUC:
			case CommonRegexParser.EUC:
			case CommonRegexParser.FUC:
			case CommonRegexParser.GUC:
			case CommonRegexParser.HUC:
			case CommonRegexParser.IUC:
			case CommonRegexParser.JUC:
			case CommonRegexParser.KUC:
			case CommonRegexParser.LUC:
			case CommonRegexParser.MUC:
			case CommonRegexParser.NUC:
			case CommonRegexParser.OUC:
			case CommonRegexParser.PUC:
			case CommonRegexParser.QUC:
			case CommonRegexParser.RUC:
			case CommonRegexParser.SUC:
			case CommonRegexParser.TUC:
			case CommonRegexParser.UUC:
			case CommonRegexParser.VUC:
			case CommonRegexParser.WUC:
			case CommonRegexParser.XUC:
			case CommonRegexParser.YUC:
			case CommonRegexParser.ZUC:
			case CommonRegexParser.D1:
			case CommonRegexParser.D2:
			case CommonRegexParser.D3:
			case CommonRegexParser.D4:
			case CommonRegexParser.D5:
			case CommonRegexParser.D6:
			case CommonRegexParser.D7:
			case CommonRegexParser.D8:
			case CommonRegexParser.D9:
			case CommonRegexParser.D0:
			case CommonRegexParser.OtherChar:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 177;
				this.shared_literal();
				}
				break;
			case CommonRegexParser.CharacterClassEnd:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 178;
				this.match(CommonRegexParser.CharacterClassEnd);
				}
				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 cc_literal(): Cc_literalContext {
		let _localctx: Cc_literalContext = new Cc_literalContext(this._ctx, this.state);
		this.enterRule(_localctx, 30, CommonRegexParser.RULE_cc_literal);
		try {
			this.state = 192;
			this._errHandler.sync(this);
			switch (this._input.LA(1)) {
			case CommonRegexParser.Quoted:
			case CommonRegexParser.BlockQuoted:
			case CommonRegexParser.BellChar:
			case CommonRegexParser.EscapeChar:
			case CommonRegexParser.FormFeed:
			case CommonRegexParser.NewLine:
			case CommonRegexParser.CarriageReturn:
			case CommonRegexParser.Tab:
			case CommonRegexParser.Backslash:
			case CommonRegexParser.HexChar:
			case CommonRegexParser.Hyphen:
			case CommonRegexParser.OpenBrace:
			case CommonRegexParser.CloseBrace:
			case CommonRegexParser.Comma:
			case CommonRegexParser.LessThan:
			case CommonRegexParser.GreaterThan:
			case CommonRegexParser.SingleQuote:
			case CommonRegexParser.Underscore:
			case CommonRegexParser.Colon:
			case CommonRegexParser.Hash:
			case CommonRegexParser.Equals:
			case CommonRegexParser.Exclamation:
			case CommonRegexParser.Ampersand:
			case CommonRegexParser.ALC:
			case CommonRegexParser.BLC:
			case CommonRegexParser.CLC:
			case CommonRegexParser.DLC:
			case CommonRegexParser.ELC:
			case CommonRegexParser.FLC:
			case CommonRegexParser.GLC:
			case CommonRegexParser.HLC:
			case CommonRegexParser.ILC:
			case CommonRegexParser.JLC:
			case CommonRegexParser.KLC:
			case CommonRegexParser.LLC:
			case CommonRegexParser.MLC:
			case CommonRegexParser.NLC:
			case CommonRegexParser.OLC:
			case CommonRegexParser.PLC:
			case CommonRegexParser.QLC:
			case CommonRegexParser.RLC:
			case CommonRegexParser.SLC:
			case CommonRegexParser.TLC:
			case CommonRegexParser.ULC:
			case CommonRegexParser.VLC:
			case CommonRegexParser.WLC:
			case CommonRegexParser.XLC:
			case CommonRegexParser.YLC:
			case CommonRegexParser.ZLC:
			case CommonRegexParser.AUC:
			case CommonRegexParser.BUC:
			case CommonRegexParser.CUC:
			case CommonRegexParser.DUC:
			case CommonRegexParser.EUC:
			case CommonRegexParser.FUC:
			case CommonRegexParser.GUC:
			case CommonRegexParser.HUC:
			case CommonRegexParser.IUC:
			case CommonRegexParser.JUC:
			case CommonRegexParser.KUC:
			case CommonRegexParser.LUC:
			case CommonRegexParser.MUC:
			case CommonRegexParser.NUC:
			case CommonRegexParser.OUC:
			case CommonRegexParser.PUC:
			case CommonRegexParser.QUC:
			case CommonRegexParser.RUC:
			case CommonRegexParser.SUC:
			case CommonRegexParser.TUC:
			case CommonRegexParser.UUC:
			case CommonRegexParser.VUC:
			case CommonRegexParser.WUC:
			case CommonRegexParser.XUC:
			case CommonRegexParser.YUC:
			case CommonRegexParser.ZUC:
			case CommonRegexParser.D1:
			case CommonRegexParser.D2:
			case CommonRegexParser.D3:
			case CommonRegexParser.D4:
			case CommonRegexParser.D5:
			case CommonRegexParser.D6:
			case CommonRegexParser.D7:
			case CommonRegexParser.D8:
			case CommonRegexParser.D9:
			case CommonRegexParser.D0:
			case CommonRegexParser.OtherChar:
				this.enterOuterAlt(_localctx, 1);
				{
				this.state = 181;
				this.shared_literal();
				}
				break;
			case CommonRegexParser.Dot:
				this.enterOuterAlt(_localctx, 2);
				{
				this.state = 182;
				this.match(CommonRegexParser.Dot);
				}
				break;
			case CommonRegexParser.CharacterClassStart:
				this.enterOuterAlt(_localctx, 3);
				{
				this.state = 183;
				this.match(CommonRegexParser.CharacterClassStart);
				}
				break;
			case CommonRegexParser.Caret:
				this.enterOuterAlt(_localctx, 4);
				{
				this.state = 184;
				this.match(CommonRegexParser.Caret);
				}
				break;
			case CommonRegexParser.QuestionMark:
				this.enterOuterAlt(_localctx, 5);
				{
				this.state = 185;
				this.match(CommonRege