All Downloads are FREE. Search and download functionalities are using the official Maven repository.

llmeier.rubysrc2cpg_3.2.0.440+7-e7df7a79.source-code.DeprecatedRubyParser Maven / Gradle / Ivy

// Generated from /home/mp/Projects/shiftleft/joern/joern-cli/frontends/rubysrc2cpg/src/main/antlr4/io/joern/rubysrc2cpg/deprecated/parser/DeprecatedRubyParser.g4 by ANTLR 4.7.2

    package io.joern.rubysrc2cpg.deprecated.parser;

import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class DeprecatedRubyParser extends Parser {
	static { RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION); }

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		STRING_INTERPOLATION_END=1, REGULAR_EXPRESSION_INTERPOLATION_END=2, REGULAR_EXPRESSION_START=3, 
		QUOTED_NON_EXPANDED_STRING_LITERAL_END=4, QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_END=5, 
		QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_END=6, QUOTED_EXPANDED_REGULAR_EXPRESSION_END=7, 
		QUOTED_EXPANDED_STRING_LITERAL_END=8, QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_END=9, 
		QUOTED_EXPANDED_STRING_ARRAY_LITERAL_END=10, QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_END=11, 
		DELIMITED_STRING_INTERPOLATION_END=12, DELIMITED_ARRAY_ITEM_INTERPOLATION_END=13, 
		NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE=14, EXPANDED_LITERAL_CHARACTER_SEQUENCE=15, 
		LINE__=16, ENCODING__=17, FILE__=18, BEGIN_=19, END_=20, ALIAS=21, AND=22, 
		BEGIN=23, BREAK=24, CASE=25, CLASS=26, DEF=27, IS_DEFINED=28, DO=29, ELSE=30, 
		ELSIF=31, END=32, ENSURE=33, FOR=34, FALSE=35, IF=36, IN=37, MODULE=38, 
		NEXT=39, NIL=40, NOT=41, OR=42, REDO=43, RESCUE=44, RETRY=45, RETURN=46, 
		SELF=47, SUPER=48, THEN=49, TRUE=50, UNDEF=51, UNLESS=52, UNTIL=53, WHEN=54, 
		WHILE=55, YIELD=56, LBRACK=57, RBRACK=58, LPAREN=59, RPAREN=60, LCURLY=61, 
		RCURLY=62, COLON=63, COLON2=64, COMMA=65, SEMI=66, DOT=67, DOT2=68, DOT3=69, 
		QMARK=70, EQGT=71, MINUSGT=72, EMARK=73, EMARKEQ=74, EMARKTILDE=75, AMP=76, 
		AMP2=77, AMPDOT=78, BAR=79, BAR2=80, EQ=81, EQ2=82, EQ3=83, CARET=84, 
		LTEQGT=85, EQTILDE=86, GT=87, GTEQ=88, LT=89, LTEQ=90, LT2=91, GT2=92, 
		PLUS=93, MINUS=94, STAR=95, STAR2=96, SLASH=97, PERCENT=98, TILDE=99, 
		PLUSAT=100, MINUSAT=101, ASSIGNMENT_OPERATOR=102, SINGLE_QUOTED_STRING_LITERAL=103, 
		DOUBLE_QUOTED_STRING_START=104, QUOTED_NON_EXPANDED_STRING_LITERAL_START=105, 
		QUOTED_EXPANDED_STRING_LITERAL_START=106, QUOTED_EXPANDED_REGULAR_EXPRESSION_START=107, 
		QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START=108, QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START=109, 
		QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START=110, HERE_DOC_IDENTIFIER=111, 
		HERE_DOC=112, QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START=113, QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START=114, 
		END_OF_PROGRAM_MARKER=115, DECIMAL_INTEGER_LITERAL=116, BINARY_INTEGER_LITERAL=117, 
		OCTAL_INTEGER_LITERAL=118, HEXADECIMAL_INTEGER_LITERAL=119, FLOAT_LITERAL_WITHOUT_EXPONENT=120, 
		FLOAT_LITERAL_WITH_EXPONENT=121, NL=122, WS=123, SYMBOL_LITERAL=124, LOCAL_VARIABLE_IDENTIFIER=125, 
		GLOBAL_VARIABLE_IDENTIFIER=126, INSTANCE_VARIABLE_IDENTIFIER=127, CLASS_VARIABLE_IDENTIFIER=128, 
		CONSTANT_IDENTIFIER=129, ASSIGNMENT_LIKE_METHOD_IDENTIFIER=130, SINGLE_LINE_COMMENT=131, 
		MULTI_LINE_COMMENT=132, UNRECOGNIZED=133, DOUBLE_QUOTED_STRING_END=134, 
		DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE=135, INTERPOLATED_CHARACTER_SEQUENCE=136, 
		STRING_INTERPOLATION_BEGIN=137, DELIMITED_STRING_INTERPOLATION_BEGIN=138, 
		EXPANDED_VARIABLE_CHARACTER_SEQUENCE=139, EXPANDED_LITERAL_CHARACTER=140, 
		NON_EXPANDED_LITERAL_CHARACTER=141, DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN=142, 
		EXPANDED_ARRAY_ITEM_SEPARATOR=143, EXPANDED_ARRAY_ITEM_CHARACTER=144, 
		NON_EXPANDED_ARRAY_ITEM_SEPARATOR=145, NON_EXPANDED_ARRAY_ITEM_CHARACTER=146, 
		REGULAR_EXPRESSION_END=147, REGULAR_EXPRESSION_BODY=148, REGULAR_EXPRESSION_INTERPOLATION_BEGIN=149, 
		DATA_SECTION_CONTENT=150;
	public static final int
		RULE_program = 0, RULE_compoundStatement = 1, RULE_statements = 2, RULE_statement = 3, 
		RULE_expressionOrCommand = 4, RULE_expression = 5, RULE_primary = 6, RULE_singleLeftHandSide = 7, 
		RULE_multipleLeftHandSide = 8, RULE_multipleLeftHandSideItem = 9, RULE_packingLeftHandSide = 10, 
		RULE_groupedLeftHandSide = 11, RULE_multipleRightHandSide = 12, RULE_expressionOrCommands = 13, 
		RULE_invocationWithoutParentheses = 14, RULE_command = 15, RULE_chainedCommandWithDoBlock = 16, 
		RULE_commandWithDoBlock = 17, RULE_argumentsWithoutParentheses = 18, RULE_arguments = 19, 
		RULE_argument = 20, RULE_blockArgument = 21, RULE_splattingArgument = 22, 
		RULE_indexingArguments = 23, RULE_argumentsWithParentheses = 24, RULE_expressions = 25, 
		RULE_block = 26, RULE_braceBlock = 27, RULE_doBlock = 28, RULE_blockParameter = 29, 
		RULE_blockParameters = 30, RULE_arrayConstructor = 31, RULE_expandedArrayElements = 32, 
		RULE_expandedArrayElement = 33, RULE_delimitedArrayItemInterpolation = 34, 
		RULE_nonExpandedArrayElements = 35, RULE_nonExpandedArrayElement = 36, 
		RULE_hashConstructor = 37, RULE_hashConstructorElements = 38, RULE_hashConstructorElement = 39, 
		RULE_associations = 40, RULE_association = 41, RULE_methodDefinition = 42, 
		RULE_procDefinition = 43, RULE_methodNamePart = 44, RULE_singletonObject = 45, 
		RULE_definedMethodName = 46, RULE_assignmentLikeMethodIdentifier = 47, 
		RULE_methodName = 48, RULE_methodIdentifier = 49, RULE_methodOnlyIdentifier = 50, 
		RULE_methodParameterPart = 51, RULE_parameters = 52, RULE_parameter = 53, 
		RULE_mandatoryParameter = 54, RULE_optionalParameter = 55, RULE_arrayParameter = 56, 
		RULE_hashParameter = 57, RULE_keywordParameter = 58, RULE_procParameter = 59, 
		RULE_ifExpression = 60, RULE_thenClause = 61, RULE_elsifClause = 62, RULE_elseClause = 63, 
		RULE_unlessExpression = 64, RULE_caseExpression = 65, RULE_whenClause = 66, 
		RULE_whenArgument = 67, RULE_whileExpression = 68, RULE_doClause = 69, 
		RULE_untilExpression = 70, RULE_forExpression = 71, RULE_forVariable = 72, 
		RULE_beginExpression = 73, RULE_bodyStatement = 74, RULE_rescueClause = 75, 
		RULE_exceptionClass = 76, RULE_exceptionVariableAssignment = 77, RULE_ensureClause = 78, 
		RULE_classDefinition = 79, RULE_classOrModuleReference = 80, RULE_moduleDefinition = 81, 
		RULE_yieldWithOptionalArgument = 82, RULE_jumpExpression = 83, RULE_variableReference = 84, 
		RULE_variableIdentifier = 85, RULE_pseudoVariableIdentifier = 86, RULE_scopedConstantReference = 87, 
		RULE_literal = 88, RULE_symbol = 89, RULE_stringExpression = 90, RULE_quotedStringExpression = 91, 
		RULE_simpleString = 92, RULE_delimitedStringInterpolation = 93, RULE_stringInterpolation = 94, 
		RULE_interpolatedStringSequence = 95, RULE_regexInterpolation = 96, RULE_interpolatedRegexSequence = 97, 
		RULE_quotedRegexInterpolation = 98, RULE_numericLiteral = 99, RULE_unsignedNumericLiteral = 100, 
		RULE_definedMethodNameOrSymbol = 101, RULE_keyword = 102, RULE_operatorMethodName = 103;
	private static String[] makeRuleNames() {
		return new String[] {
			"program", "compoundStatement", "statements", "statement", "expressionOrCommand", 
			"expression", "primary", "singleLeftHandSide", "multipleLeftHandSide", 
			"multipleLeftHandSideItem", "packingLeftHandSide", "groupedLeftHandSide", 
			"multipleRightHandSide", "expressionOrCommands", "invocationWithoutParentheses", 
			"command", "chainedCommandWithDoBlock", "commandWithDoBlock", "argumentsWithoutParentheses", 
			"arguments", "argument", "blockArgument", "splattingArgument", "indexingArguments", 
			"argumentsWithParentheses", "expressions", "block", "braceBlock", "doBlock", 
			"blockParameter", "blockParameters", "arrayConstructor", "expandedArrayElements", 
			"expandedArrayElement", "delimitedArrayItemInterpolation", "nonExpandedArrayElements", 
			"nonExpandedArrayElement", "hashConstructor", "hashConstructorElements", 
			"hashConstructorElement", "associations", "association", "methodDefinition", 
			"procDefinition", "methodNamePart", "singletonObject", "definedMethodName", 
			"assignmentLikeMethodIdentifier", "methodName", "methodIdentifier", "methodOnlyIdentifier", 
			"methodParameterPart", "parameters", "parameter", "mandatoryParameter", 
			"optionalParameter", "arrayParameter", "hashParameter", "keywordParameter", 
			"procParameter", "ifExpression", "thenClause", "elsifClause", "elseClause", 
			"unlessExpression", "caseExpression", "whenClause", "whenArgument", "whileExpression", 
			"doClause", "untilExpression", "forExpression", "forVariable", "beginExpression", 
			"bodyStatement", "rescueClause", "exceptionClass", "exceptionVariableAssignment", 
			"ensureClause", "classDefinition", "classOrModuleReference", "moduleDefinition", 
			"yieldWithOptionalArgument", "jumpExpression", "variableReference", "variableIdentifier", 
			"pseudoVariableIdentifier", "scopedConstantReference", "literal", "symbol", 
			"stringExpression", "quotedStringExpression", "simpleString", "delimitedStringInterpolation", 
			"stringInterpolation", "interpolatedStringSequence", "regexInterpolation", 
			"interpolatedRegexSequence", "quotedRegexInterpolation", "numericLiteral", 
			"unsignedNumericLiteral", "definedMethodNameOrSymbol", "keyword", "operatorMethodName"
		};
	}
	public static final String[] ruleNames = makeRuleNames();

	private static String[] makeLiteralNames() {
		return new String[] {
			null, null, null, null, null, null, null, null, null, null, null, null, 
			null, null, null, null, "'__LINE__'", "'__ENCODING__'", "'__FILE__'", 
			"'BEGIN'", "'END'", "'alias'", "'and'", "'begin'", "'break'", "'case'", 
			"'class'", "'def'", "'defined?'", "'do'", "'else'", "'elsif'", "'end'", 
			"'ensure'", "'for'", "'false'", "'if'", "'in'", "'module'", "'next'", 
			"'nil'", "'not'", "'or'", "'redo'", "'rescue'", "'retry'", "'return'", 
			"'self'", "'super'", "'then'", "'true'", "'undef'", "'unless'", "'until'", 
			"'when'", "'while'", "'yield'", "'['", "']'", "'('", "')'", "'{'", "'}'", 
			"':'", "'::'", "','", "';'", "'.'", "'..'", "'...'", "'?'", "'=>'", "'->'", 
			"'!'", "'!='", "'!~'", "'&'", "'&&'", "'&.'", "'|'", "'||'", "'='", "'=='", 
			"'==='", "'^'", "'<=>'", "'=~'", "'>'", "'>='", "'<'", "'<='", "'<<'", 
			"'>>'", "'+'", "'-'", "'*'", "'**'", "'/'", "'%'", "'~'", "'+@'", "'-@'"
		};
	}
	private static final String[] _LITERAL_NAMES = makeLiteralNames();
	private static String[] makeSymbolicNames() {
		return new String[] {
			null, "STRING_INTERPOLATION_END", "REGULAR_EXPRESSION_INTERPOLATION_END", 
			"REGULAR_EXPRESSION_START", "QUOTED_NON_EXPANDED_STRING_LITERAL_END", 
			"QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_END", "QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_END", 
			"QUOTED_EXPANDED_REGULAR_EXPRESSION_END", "QUOTED_EXPANDED_STRING_LITERAL_END", 
			"QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_END", "QUOTED_EXPANDED_STRING_ARRAY_LITERAL_END", 
			"QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_END", "DELIMITED_STRING_INTERPOLATION_END", 
			"DELIMITED_ARRAY_ITEM_INTERPOLATION_END", "NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE", 
			"EXPANDED_LITERAL_CHARACTER_SEQUENCE", "LINE__", "ENCODING__", "FILE__", 
			"BEGIN_", "END_", "ALIAS", "AND", "BEGIN", "BREAK", "CASE", "CLASS", 
			"DEF", "IS_DEFINED", "DO", "ELSE", "ELSIF", "END", "ENSURE", "FOR", "FALSE", 
			"IF", "IN", "MODULE", "NEXT", "NIL", "NOT", "OR", "REDO", "RESCUE", "RETRY", 
			"RETURN", "SELF", "SUPER", "THEN", "TRUE", "UNDEF", "UNLESS", "UNTIL", 
			"WHEN", "WHILE", "YIELD", "LBRACK", "RBRACK", "LPAREN", "RPAREN", "LCURLY", 
			"RCURLY", "COLON", "COLON2", "COMMA", "SEMI", "DOT", "DOT2", "DOT3", 
			"QMARK", "EQGT", "MINUSGT", "EMARK", "EMARKEQ", "EMARKTILDE", "AMP", 
			"AMP2", "AMPDOT", "BAR", "BAR2", "EQ", "EQ2", "EQ3", "CARET", "LTEQGT", 
			"EQTILDE", "GT", "GTEQ", "LT", "LTEQ", "LT2", "GT2", "PLUS", "MINUS", 
			"STAR", "STAR2", "SLASH", "PERCENT", "TILDE", "PLUSAT", "MINUSAT", "ASSIGNMENT_OPERATOR", 
			"SINGLE_QUOTED_STRING_LITERAL", "DOUBLE_QUOTED_STRING_START", "QUOTED_NON_EXPANDED_STRING_LITERAL_START", 
			"QUOTED_EXPANDED_STRING_LITERAL_START", "QUOTED_EXPANDED_REGULAR_EXPRESSION_START", 
			"QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START", "QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START", 
			"QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START", "HERE_DOC_IDENTIFIER", 
			"HERE_DOC", "QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START", "QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START", 
			"END_OF_PROGRAM_MARKER", "DECIMAL_INTEGER_LITERAL", "BINARY_INTEGER_LITERAL", 
			"OCTAL_INTEGER_LITERAL", "HEXADECIMAL_INTEGER_LITERAL", "FLOAT_LITERAL_WITHOUT_EXPONENT", 
			"FLOAT_LITERAL_WITH_EXPONENT", "NL", "WS", "SYMBOL_LITERAL", "LOCAL_VARIABLE_IDENTIFIER", 
			"GLOBAL_VARIABLE_IDENTIFIER", "INSTANCE_VARIABLE_IDENTIFIER", "CLASS_VARIABLE_IDENTIFIER", 
			"CONSTANT_IDENTIFIER", "ASSIGNMENT_LIKE_METHOD_IDENTIFIER", "SINGLE_LINE_COMMENT", 
			"MULTI_LINE_COMMENT", "UNRECOGNIZED", "DOUBLE_QUOTED_STRING_END", "DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE", 
			"INTERPOLATED_CHARACTER_SEQUENCE", "STRING_INTERPOLATION_BEGIN", "DELIMITED_STRING_INTERPOLATION_BEGIN", 
			"EXPANDED_VARIABLE_CHARACTER_SEQUENCE", "EXPANDED_LITERAL_CHARACTER", 
			"NON_EXPANDED_LITERAL_CHARACTER", "DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN", 
			"EXPANDED_ARRAY_ITEM_SEPARATOR", "EXPANDED_ARRAY_ITEM_CHARACTER", "NON_EXPANDED_ARRAY_ITEM_SEPARATOR", 
			"NON_EXPANDED_ARRAY_ITEM_CHARACTER", "REGULAR_EXPRESSION_END", "REGULAR_EXPRESSION_BODY", 
			"REGULAR_EXPRESSION_INTERPOLATION_BEGIN", "DATA_SECTION_CONTENT"
		};
	}
	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);

	/**
	 * @deprecated Use {@link #VOCABULARY} instead.
	 */
	@Deprecated
	public static final String[] tokenNames;
	static {
		tokenNames = new String[_SYMBOLIC_NAMES.length];
		for (int i = 0; i < tokenNames.length; i++) {
			tokenNames[i] = VOCABULARY.getLiteralName(i);
			if (tokenNames[i] == null) {
				tokenNames[i] = VOCABULARY.getSymbolicName(i);
			}

			if (tokenNames[i] == null) {
				tokenNames[i] = "";
			}
		}
	}

	@Override
	@Deprecated
	public String[] getTokenNames() {
		return tokenNames;
	}

	@Override

	public Vocabulary getVocabulary() {
		return VOCABULARY;
	}

	@Override
	public String getGrammarFileName() { return "DeprecatedRubyParser.g4"; }

	@Override
	public String[] getRuleNames() { return ruleNames; }

	@Override
	public String getSerializedATN() { return _serializedATN; }

	@Override
	public ATN getATN() { return _ATN; }

	public DeprecatedRubyParser(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}

	public static class ProgramContext extends ParserRuleContext {
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode EOF() { return getToken(DeprecatedRubyParser.EOF, 0); }
		public ProgramContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_program; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterProgram(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitProgram(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitProgram(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ProgramContext program() throws RecognitionException {
		ProgramContext _localctx = new ProgramContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_program);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(208);
			compoundStatement();
			setState(209);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CompoundStatementContext extends ParserRuleContext {
		public StatementsContext statements() {
			return getRuleContext(StatementsContext.class,0);
		}
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public CompoundStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_compoundStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterCompoundStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitCompoundStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitCompoundStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CompoundStatementContext compoundStatement() throws RecognitionException {
		CompoundStatementContext _localctx = new CompoundStatementContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_compoundStatement);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(214);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,0,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(211);
					_la = _input.LA(1);
					if ( !(_la==SEMI || _la==NL) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
					} 
				}
				setState(216);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,0,_ctx);
			}
			setState(218);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
			case 1:
				{
				setState(217);
				statements();
				}
				break;
			}
			setState(223);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==SEMI || _la==NL) {
				{
				{
				setState(220);
				_la = _input.LA(1);
				if ( !(_la==SEMI || _la==NL) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				}
				setState(225);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StatementsContext extends ParserRuleContext {
		public List statement() {
			return getRuleContexts(StatementContext.class);
		}
		public StatementContext statement(int i) {
			return getRuleContext(StatementContext.class,i);
		}
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public StatementsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_statements; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterStatements(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitStatements(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitStatements(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StatementsContext statements() throws RecognitionException {
		StatementsContext _localctx = new StatementsContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_statements);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(226);
			statement(0);
			setState(235);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,4,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(228); 
					_errHandler.sync(this);
					_la = _input.LA(1);
					do {
						{
						{
						setState(227);
						_la = _input.LA(1);
						if ( !(_la==SEMI || _la==NL) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						}
						}
						setState(230); 
						_errHandler.sync(this);
						_la = _input.LA(1);
					} while ( _la==SEMI || _la==NL );
					setState(232);
					statement(0);
					}
					} 
				}
				setState(237);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,4,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StatementContext extends ParserRuleContext {
		public StatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_statement; }
	 
		public StatementContext() { }
		public void copyFrom(StatementContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class EndStatementContext extends StatementContext {
		public TerminalNode END_() { return getToken(DeprecatedRubyParser.END_, 0); }
		public TerminalNode LCURLY() { return getToken(DeprecatedRubyParser.LCURLY, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode RCURLY() { return getToken(DeprecatedRubyParser.RCURLY, 0); }
		public EndStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterEndStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitEndStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitEndStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BeginStatementContext extends StatementContext {
		public TerminalNode BEGIN_() { return getToken(DeprecatedRubyParser.BEGIN_, 0); }
		public TerminalNode LCURLY() { return getToken(DeprecatedRubyParser.LCURLY, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode RCURLY() { return getToken(DeprecatedRubyParser.RCURLY, 0); }
		public BeginStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBeginStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBeginStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBeginStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ModifierStatementContext extends StatementContext {
		public Token mod;
		public List statement() {
			return getRuleContexts(StatementContext.class);
		}
		public StatementContext statement(int i) {
			return getRuleContext(StatementContext.class,i);
		}
		public TerminalNode IF() { return getToken(DeprecatedRubyParser.IF, 0); }
		public TerminalNode UNLESS() { return getToken(DeprecatedRubyParser.UNLESS, 0); }
		public TerminalNode WHILE() { return getToken(DeprecatedRubyParser.WHILE, 0); }
		public TerminalNode UNTIL() { return getToken(DeprecatedRubyParser.UNTIL, 0); }
		public TerminalNode RESCUE() { return getToken(DeprecatedRubyParser.RESCUE, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ModifierStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterModifierStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitModifierStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitModifierStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AliasStatementContext extends StatementContext {
		public TerminalNode ALIAS() { return getToken(DeprecatedRubyParser.ALIAS, 0); }
		public List definedMethodNameOrSymbol() {
			return getRuleContexts(DefinedMethodNameOrSymbolContext.class);
		}
		public DefinedMethodNameOrSymbolContext definedMethodNameOrSymbol(int i) {
			return getRuleContext(DefinedMethodNameOrSymbolContext.class,i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public AliasStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAliasStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAliasStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAliasStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UndefStatementContext extends StatementContext {
		public TerminalNode UNDEF() { return getToken(DeprecatedRubyParser.UNDEF, 0); }
		public List definedMethodNameOrSymbol() {
			return getRuleContexts(DefinedMethodNameOrSymbolContext.class);
		}
		public DefinedMethodNameOrSymbolContext definedMethodNameOrSymbol(int i) {
			return getRuleContext(DefinedMethodNameOrSymbolContext.class,i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public UndefStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUndefStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUndefStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUndefStatement(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExpressionOrCommandStatementContext extends StatementContext {
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public ExpressionOrCommandStatementContext(StatementContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionOrCommandStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionOrCommandStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionOrCommandStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StatementContext statement() throws RecognitionException {
		return statement(0);
	}

	private StatementContext statement(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		StatementContext _localctx = new StatementContext(_ctx, _parentState);
		StatementContext _prevctx = _localctx;
		int _startState = 6;
		enterRecursionRule(_localctx, 6, RULE_statement, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(275);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
			case 1:
				{
				_localctx = new AliasStatementContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(239);
				match(ALIAS);
				setState(241);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(240);
					match(NL);
					}
				}

				setState(243);
				definedMethodNameOrSymbol();
				setState(245);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(244);
					match(NL);
					}
				}

				setState(247);
				definedMethodNameOrSymbol();
				}
				break;
			case 2:
				{
				_localctx = new UndefStatementContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(249);
				match(UNDEF);
				setState(251);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(250);
					match(NL);
					}
				}

				setState(253);
				definedMethodNameOrSymbol();
				setState(261);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,9,_ctx);
				while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1 ) {
						{
						{
						setState(254);
						match(COMMA);
						setState(256);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(255);
							match(NL);
							}
						}

						setState(258);
						definedMethodNameOrSymbol();
						}
						} 
					}
					setState(263);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,9,_ctx);
				}
				}
				break;
			case 3:
				{
				_localctx = new BeginStatementContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(264);
				match(BEGIN_);
				setState(265);
				match(LCURLY);
				setState(266);
				compoundStatement();
				setState(267);
				match(RCURLY);
				}
				break;
			case 4:
				{
				_localctx = new EndStatementContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(269);
				match(END_);
				setState(270);
				match(LCURLY);
				setState(271);
				compoundStatement();
				setState(272);
				match(RCURLY);
				}
				break;
			case 5:
				{
				_localctx = new ExpressionOrCommandStatementContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(274);
				expressionOrCommand(0);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(285);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,12,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new ModifierStatementContext(new StatementContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_statement);
					setState(277);
					if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
					setState(278);
					((ModifierStatementContext)_localctx).mod = _input.LT(1);
					_la = _input.LA(1);
					if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IF) | (1L << RESCUE) | (1L << UNLESS) | (1L << UNTIL) | (1L << WHILE))) != 0)) ) {
						((ModifierStatementContext)_localctx).mod = (Token)_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(280);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(279);
						match(NL);
						}
					}

					setState(282);
					statement(3);
					}
					} 
				}
				setState(287);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,12,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class ExpressionOrCommandContext extends ParserRuleContext {
		public ExpressionOrCommandContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expressionOrCommand; }
	 
		public ExpressionOrCommandContext() { }
		public void copyFrom(ExpressionOrCommandContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ExpressionExpressionOrCommandContext extends ExpressionOrCommandContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public ExpressionExpressionOrCommandContext(ExpressionOrCommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionExpressionOrCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionExpressionOrCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionExpressionOrCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NotExpressionOrCommandContext extends ExpressionOrCommandContext {
		public TerminalNode NOT() { return getToken(DeprecatedRubyParser.NOT, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public NotExpressionOrCommandContext(ExpressionOrCommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNotExpressionOrCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNotExpressionOrCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNotExpressionOrCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InvocationExpressionOrCommandContext extends ExpressionOrCommandContext {
		public InvocationWithoutParenthesesContext invocationWithoutParentheses() {
			return getRuleContext(InvocationWithoutParenthesesContext.class,0);
		}
		public TerminalNode EMARK() { return getToken(DeprecatedRubyParser.EMARK, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public InvocationExpressionOrCommandContext(ExpressionOrCommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInvocationExpressionOrCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInvocationExpressionOrCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInvocationExpressionOrCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class OrAndExpressionOrCommandContext extends ExpressionOrCommandContext {
		public Token op;
		public List expressionOrCommand() {
			return getRuleContexts(ExpressionOrCommandContext.class);
		}
		public ExpressionOrCommandContext expressionOrCommand(int i) {
			return getRuleContext(ExpressionOrCommandContext.class,i);
		}
		public TerminalNode OR() { return getToken(DeprecatedRubyParser.OR, 0); }
		public TerminalNode AND() { return getToken(DeprecatedRubyParser.AND, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public OrAndExpressionOrCommandContext(ExpressionOrCommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterOrAndExpressionOrCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitOrAndExpressionOrCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitOrAndExpressionOrCommand(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionOrCommandContext expressionOrCommand() throws RecognitionException {
		return expressionOrCommand(0);
	}

	private ExpressionOrCommandContext expressionOrCommand(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ExpressionOrCommandContext _localctx = new ExpressionOrCommandContext(_ctx, _parentState);
		ExpressionOrCommandContext _prevctx = _localctx;
		int _startState = 8;
		enterRecursionRule(_localctx, 8, RULE_expressionOrCommand, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(302);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
			case 1:
				{
				_localctx = new ExpressionExpressionOrCommandContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(289);
				expression(0);
				}
				break;
			case 2:
				{
				_localctx = new InvocationExpressionOrCommandContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(294);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==EMARK) {
					{
					setState(290);
					match(EMARK);
					setState(292);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(291);
						match(NL);
						}
					}

					}
				}

				setState(296);
				invocationWithoutParentheses();
				}
				break;
			case 3:
				{
				_localctx = new NotExpressionOrCommandContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(297);
				match(NOT);
				setState(299);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(298);
					match(NL);
					}
				}

				setState(301);
				expressionOrCommand(2);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(312);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,18,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new OrAndExpressionOrCommandContext(new ExpressionOrCommandContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_expressionOrCommand);
					setState(304);
					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
					setState(305);
					((OrAndExpressionOrCommandContext)_localctx).op = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==AND || _la==OR) ) {
						((OrAndExpressionOrCommandContext)_localctx).op = (Token)_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(307);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(306);
						match(NL);
						}
					}

					setState(309);
					expressionOrCommand(1);
					}
					} 
				}
				setState(314);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,18,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class ExpressionContext extends ParserRuleContext {
		public ExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression; }
	 
		public ExpressionContext() { }
		public void copyFrom(ExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class PrimaryExpressionContext extends ExpressionContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public PrimaryExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPrimaryExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPrimaryExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPrimaryExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class OperatorAndExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode AMP2() { return getToken(DeprecatedRubyParser.AMP2, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public OperatorAndExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterOperatorAndExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitOperatorAndExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitOperatorAndExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AdditiveExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode PLUS() { return getToken(DeprecatedRubyParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(DeprecatedRubyParser.MINUS, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public AdditiveExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAdditiveExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAdditiveExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAdditiveExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RelationalExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode GT() { return getToken(DeprecatedRubyParser.GT, 0); }
		public TerminalNode GTEQ() { return getToken(DeprecatedRubyParser.GTEQ, 0); }
		public TerminalNode LT() { return getToken(DeprecatedRubyParser.LT, 0); }
		public TerminalNode LTEQ() { return getToken(DeprecatedRubyParser.LTEQ, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public RelationalExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRelationalExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRelationalExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRelationalExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SingleAssignmentExpressionContext extends ExpressionContext {
		public Token op;
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public MultipleRightHandSideContext multipleRightHandSide() {
			return getRuleContext(MultipleRightHandSideContext.class,0);
		}
		public TerminalNode EQ() { return getToken(DeprecatedRubyParser.EQ, 0); }
		public TerminalNode ASSIGNMENT_OPERATOR() { return getToken(DeprecatedRubyParser.ASSIGNMENT_OPERATOR, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public SingleAssignmentExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSingleAssignmentExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSingleAssignmentExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSingleAssignmentExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class OperatorOrExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode BAR2() { return getToken(DeprecatedRubyParser.BAR2, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public OperatorOrExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterOperatorOrExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitOperatorOrExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitOperatorOrExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MultiplicativeExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode STAR() { return getToken(DeprecatedRubyParser.STAR, 0); }
		public TerminalNode SLASH() { return getToken(DeprecatedRubyParser.SLASH, 0); }
		public TerminalNode PERCENT() { return getToken(DeprecatedRubyParser.PERCENT, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public MultiplicativeExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMultiplicativeExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMultiplicativeExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMultiplicativeExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BitwiseShiftExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode LT2() { return getToken(DeprecatedRubyParser.LT2, 0); }
		public TerminalNode GT2() { return getToken(DeprecatedRubyParser.GT2, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BitwiseShiftExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBitwiseShiftExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBitwiseShiftExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBitwiseShiftExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ConditionalOperatorExpressionContext extends ExpressionContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode QMARK() { return getToken(DeprecatedRubyParser.QMARK, 0); }
		public TerminalNode COLON() { return getToken(DeprecatedRubyParser.COLON, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ConditionalOperatorExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterConditionalOperatorExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitConditionalOperatorExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitConditionalOperatorExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UnaryMinusExpressionContext extends ExpressionContext {
		public TerminalNode MINUS() { return getToken(DeprecatedRubyParser.MINUS, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public UnaryMinusExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUnaryMinusExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUnaryMinusExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUnaryMinusExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PowerExpressionContext extends ExpressionContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode STAR2() { return getToken(DeprecatedRubyParser.STAR2, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public PowerExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPowerExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPowerExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPowerExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BitwiseOrExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode BAR() { return getToken(DeprecatedRubyParser.BAR, 0); }
		public TerminalNode CARET() { return getToken(DeprecatedRubyParser.CARET, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BitwiseOrExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBitwiseOrExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBitwiseOrExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBitwiseOrExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IsDefinedExpressionContext extends ExpressionContext {
		public TerminalNode IS_DEFINED() { return getToken(DeprecatedRubyParser.IS_DEFINED, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public IsDefinedExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterIsDefinedExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitIsDefinedExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitIsDefinedExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BitwiseAndExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode AMP() { return getToken(DeprecatedRubyParser.AMP, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BitwiseAndExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBitwiseAndExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBitwiseAndExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBitwiseAndExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class EqualityExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode LTEQGT() { return getToken(DeprecatedRubyParser.LTEQGT, 0); }
		public TerminalNode EQ2() { return getToken(DeprecatedRubyParser.EQ2, 0); }
		public TerminalNode EQ3() { return getToken(DeprecatedRubyParser.EQ3, 0); }
		public TerminalNode EMARKEQ() { return getToken(DeprecatedRubyParser.EMARKEQ, 0); }
		public TerminalNode EQTILDE() { return getToken(DeprecatedRubyParser.EQTILDE, 0); }
		public TerminalNode EMARKTILDE() { return getToken(DeprecatedRubyParser.EMARKTILDE, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public EqualityExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterEqualityExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitEqualityExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitEqualityExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RangeExpressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode DOT2() { return getToken(DeprecatedRubyParser.DOT2, 0); }
		public TerminalNode DOT3() { return getToken(DeprecatedRubyParser.DOT3, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public RangeExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRangeExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRangeExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRangeExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UnaryExpressionContext extends ExpressionContext {
		public Token op;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode TILDE() { return getToken(DeprecatedRubyParser.TILDE, 0); }
		public TerminalNode PLUS() { return getToken(DeprecatedRubyParser.PLUS, 0); }
		public TerminalNode EMARK() { return getToken(DeprecatedRubyParser.EMARK, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public UnaryExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUnaryExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUnaryExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUnaryExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MultipleAssignmentExpressionContext extends ExpressionContext {
		public MultipleLeftHandSideContext multipleLeftHandSide() {
			return getRuleContext(MultipleLeftHandSideContext.class,0);
		}
		public TerminalNode EQ() { return getToken(DeprecatedRubyParser.EQ, 0); }
		public MultipleRightHandSideContext multipleRightHandSide() {
			return getRuleContext(MultipleRightHandSideContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public MultipleAssignmentExpressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMultipleAssignmentExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMultipleAssignmentExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMultipleAssignmentExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionContext expression() throws RecognitionException {
		return expression(0);
	}

	private ExpressionContext expression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
		ExpressionContext _prevctx = _localctx;
		int _startState = 10;
		enterRecursionRule(_localctx, 10, RULE_expression, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(346);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) {
			case 1:
				{
				_localctx = new SingleAssignmentExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(316);
				singleLeftHandSide();
				setState(317);
				((SingleAssignmentExpressionContext)_localctx).op = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==EQ || _la==ASSIGNMENT_OPERATOR) ) {
					((SingleAssignmentExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(319);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(318);
					match(NL);
					}
				}

				setState(321);
				multipleRightHandSide();
				}
				break;
			case 2:
				{
				_localctx = new MultipleAssignmentExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(323);
				multipleLeftHandSide();
				setState(324);
				match(EQ);
				setState(326);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(325);
					match(NL);
					}
				}

				setState(328);
				multipleRightHandSide();
				}
				break;
			case 3:
				{
				_localctx = new PrimaryExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(330);
				primary(0);
				}
				break;
			case 4:
				{
				_localctx = new UnaryExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(331);
				((UnaryExpressionContext)_localctx).op = _input.LT(1);
				_la = _input.LA(1);
				if ( !(((((_la - 73)) & ~0x3f) == 0 && ((1L << (_la - 73)) & ((1L << (EMARK - 73)) | (1L << (PLUS - 73)) | (1L << (TILDE - 73)))) != 0)) ) {
					((UnaryExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(333);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(332);
					match(NL);
					}
				}

				setState(335);
				expression(15);
				}
				break;
			case 5:
				{
				_localctx = new UnaryMinusExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(336);
				match(MINUS);
				setState(338);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(337);
					match(NL);
					}
				}

				setState(340);
				expression(13);
				}
				break;
			case 6:
				{
				_localctx = new IsDefinedExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(341);
				match(IS_DEFINED);
				setState(343);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(342);
					match(NL);
					}
				}

				setState(345);
				expression(1);
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(435);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,42,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(433);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) {
					case 1:
						{
						_localctx = new PowerExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(348);
						if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
						setState(349);
						match(STAR2);
						setState(351);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(350);
							match(NL);
							}
						}

						setState(353);
						expression(14);
						}
						break;
					case 2:
						{
						_localctx = new MultiplicativeExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(354);
						if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
						setState(355);
						((MultiplicativeExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 95)) & ~0x3f) == 0 && ((1L << (_la - 95)) & ((1L << (STAR - 95)) | (1L << (SLASH - 95)) | (1L << (PERCENT - 95)))) != 0)) ) {
							((MultiplicativeExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(357);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(356);
							match(NL);
							}
						}

						setState(359);
						expression(13);
						}
						break;
					case 3:
						{
						_localctx = new AdditiveExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(360);
						if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
						setState(361);
						((AdditiveExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==PLUS || _la==MINUS) ) {
							((AdditiveExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(363);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(362);
							match(NL);
							}
						}

						setState(365);
						expression(12);
						}
						break;
					case 4:
						{
						_localctx = new BitwiseShiftExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(366);
						if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
						setState(367);
						((BitwiseShiftExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==LT2 || _la==GT2) ) {
							((BitwiseShiftExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(369);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(368);
							match(NL);
							}
						}

						setState(371);
						expression(11);
						}
						break;
					case 5:
						{
						_localctx = new BitwiseAndExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(372);
						if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
						setState(373);
						((BitwiseAndExpressionContext)_localctx).op = match(AMP);
						setState(375);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(374);
							match(NL);
							}
						}

						setState(377);
						expression(10);
						}
						break;
					case 6:
						{
						_localctx = new BitwiseOrExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(378);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(379);
						((BitwiseOrExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==BAR || _la==CARET) ) {
							((BitwiseOrExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(381);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(380);
							match(NL);
							}
						}

						setState(383);
						expression(9);
						}
						break;
					case 7:
						{
						_localctx = new RelationalExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(384);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(385);
						((RelationalExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 87)) & ~0x3f) == 0 && ((1L << (_la - 87)) & ((1L << (GT - 87)) | (1L << (GTEQ - 87)) | (1L << (LT - 87)) | (1L << (LTEQ - 87)))) != 0)) ) {
							((RelationalExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(387);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(386);
							match(NL);
							}
						}

						setState(389);
						expression(8);
						}
						break;
					case 8:
						{
						_localctx = new OperatorAndExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(390);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(391);
						((OperatorAndExpressionContext)_localctx).op = match(AMP2);
						setState(393);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(392);
							match(NL);
							}
						}

						setState(395);
						expression(6);
						}
						break;
					case 9:
						{
						_localctx = new OperatorOrExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(396);
						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
						setState(397);
						((OperatorOrExpressionContext)_localctx).op = match(BAR2);
						setState(399);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(398);
							match(NL);
							}
						}

						setState(401);
						expression(5);
						}
						break;
					case 10:
						{
						_localctx = new ConditionalOperatorExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(402);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(403);
						match(QMARK);
						setState(405);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(404);
							match(NL);
							}
						}

						setState(407);
						expression(0);
						setState(409);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(408);
							match(NL);
							}
						}

						setState(411);
						match(COLON);
						setState(413);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(412);
							match(NL);
							}
						}

						setState(415);
						expression(3);
						}
						break;
					case 11:
						{
						_localctx = new EqualityExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(417);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(418);
						((EqualityExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (EMARKEQ - 74)) | (1L << (EMARKTILDE - 74)) | (1L << (EQ2 - 74)) | (1L << (EQ3 - 74)) | (1L << (LTEQGT - 74)) | (1L << (EQTILDE - 74)))) != 0)) ) {
							((EqualityExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(420);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
						case 1:
							{
							setState(419);
							match(NL);
							}
							break;
						}
						setState(423);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) {
						case 1:
							{
							setState(422);
							expression(0);
							}
							break;
						}
						}
						break;
					case 12:
						{
						_localctx = new RangeExpressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(425);
						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
						setState(426);
						((RangeExpressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(_la==DOT2 || _la==DOT3) ) {
							((RangeExpressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(428);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) {
						case 1:
							{
							setState(427);
							match(NL);
							}
							break;
						}
						setState(431);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) {
						case 1:
							{
							setState(430);
							expression(0);
							}
							break;
						}
						}
						break;
					}
					} 
				}
				setState(437);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,42,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class PrimaryContext extends ParserRuleContext {
		public PrimaryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_primary; }
	 
		public PrimaryContext() { }
		public void copyFrom(PrimaryContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class CaseExpressionPrimaryContext extends PrimaryContext {
		public CaseExpressionContext caseExpression() {
			return getRuleContext(CaseExpressionContext.class,0);
		}
		public CaseExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterCaseExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitCaseExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitCaseExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BeginExpressionPrimaryContext extends PrimaryContext {
		public BeginExpressionContext beginExpression() {
			return getRuleContext(BeginExpressionContext.class,0);
		}
		public BeginExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBeginExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBeginExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBeginExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UnlessExpressionPrimaryContext extends PrimaryContext {
		public UnlessExpressionContext unlessExpression() {
			return getRuleContext(UnlessExpressionContext.class,0);
		}
		public UnlessExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUnlessExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUnlessExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUnlessExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IfExpressionPrimaryContext extends PrimaryContext {
		public IfExpressionContext ifExpression() {
			return getRuleContext(IfExpressionContext.class,0);
		}
		public IfExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterIfExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitIfExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitIfExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ChainedScopedConstantReferencePrimaryContext extends PrimaryContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public ChainedScopedConstantReferencePrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedScopedConstantReferencePrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedScopedConstantReferencePrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedScopedConstantReferencePrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LiteralPrimaryContext extends PrimaryContext {
		public LiteralContext literal() {
			return getRuleContext(LiteralContext.class,0);
		}
		public LiteralPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterLiteralPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitLiteralPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitLiteralPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IsDefinedPrimaryContext extends PrimaryContext {
		public TerminalNode IS_DEFINED() { return getToken(DeprecatedRubyParser.IS_DEFINED, 0); }
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public IsDefinedPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterIsDefinedPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitIsDefinedPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitIsDefinedPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class UntilExpressionPrimaryContext extends PrimaryContext {
		public UntilExpressionContext untilExpression() {
			return getRuleContext(UntilExpressionContext.class,0);
		}
		public UntilExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUntilExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUntilExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUntilExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class StringInterpolationPrimaryContext extends PrimaryContext {
		public StringInterpolationContext stringInterpolation() {
			return getRuleContext(StringInterpolationContext.class,0);
		}
		public StringInterpolationPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterStringInterpolationPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitStringInterpolationPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitStringInterpolationPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class StringExpressionPrimaryContext extends PrimaryContext {
		public StringExpressionContext stringExpression() {
			return getRuleContext(StringExpressionContext.class,0);
		}
		public StringExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterStringExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitStringExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitStringExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ClassDefinitionPrimaryContext extends PrimaryContext {
		public ClassDefinitionContext classDefinition() {
			return getRuleContext(ClassDefinitionContext.class,0);
		}
		public ClassDefinitionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterClassDefinitionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitClassDefinitionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitClassDefinitionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class IndexingExpressionPrimaryContext extends PrimaryContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public TerminalNode LBRACK() { return getToken(DeprecatedRubyParser.LBRACK, 0); }
		public TerminalNode RBRACK() { return getToken(DeprecatedRubyParser.RBRACK, 0); }
		public IndexingArgumentsContext indexingArguments() {
			return getRuleContext(IndexingArgumentsContext.class,0);
		}
		public IndexingExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterIndexingExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitIndexingExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitIndexingExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class GroupingExpressionPrimaryContext extends PrimaryContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public GroupingExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterGroupingExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitGroupingExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitGroupingExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InvocationWithBlockOnlyPrimaryContext extends PrimaryContext {
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public InvocationWithBlockOnlyPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInvocationWithBlockOnlyPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInvocationWithBlockOnlyPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInvocationWithBlockOnlyPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ProcDefinitionPrimaryContext extends PrimaryContext {
		public ProcDefinitionContext procDefinition() {
			return getRuleContext(ProcDefinitionContext.class,0);
		}
		public ProcDefinitionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterProcDefinitionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitProcDefinitionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitProcDefinitionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class YieldWithOptionalArgumentPrimaryContext extends PrimaryContext {
		public YieldWithOptionalArgumentContext yieldWithOptionalArgument() {
			return getRuleContext(YieldWithOptionalArgumentContext.class,0);
		}
		public YieldWithOptionalArgumentPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterYieldWithOptionalArgumentPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitYieldWithOptionalArgumentPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitYieldWithOptionalArgumentPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class WhileExpressionPrimaryContext extends PrimaryContext {
		public WhileExpressionContext whileExpression() {
			return getRuleContext(WhileExpressionContext.class,0);
		}
		public WhileExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterWhileExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitWhileExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitWhileExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SimpleScopedConstantReferencePrimaryContext extends PrimaryContext {
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public SimpleScopedConstantReferencePrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSimpleScopedConstantReferencePrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSimpleScopedConstantReferencePrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSimpleScopedConstantReferencePrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class InvocationWithParenthesesPrimaryContext extends PrimaryContext {
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public ArgumentsWithParenthesesContext argumentsWithParentheses() {
			return getRuleContext(ArgumentsWithParenthesesContext.class,0);
		}
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public InvocationWithParenthesesPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInvocationWithParenthesesPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInvocationWithParenthesesPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInvocationWithParenthesesPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class QuotedStringExpressionPrimaryContext extends PrimaryContext {
		public QuotedStringExpressionContext quotedStringExpression() {
			return getRuleContext(QuotedStringExpressionContext.class,0);
		}
		public QuotedStringExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterQuotedStringExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitQuotedStringExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitQuotedStringExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ChainedInvocationPrimaryContext extends PrimaryContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public MethodNameContext methodName() {
			return getRuleContext(MethodNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(DeprecatedRubyParser.DOT, 0); }
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode AMPDOT() { return getToken(DeprecatedRubyParser.AMPDOT, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ArgumentsWithParenthesesContext argumentsWithParentheses() {
			return getRuleContext(ArgumentsWithParenthesesContext.class,0);
		}
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public ChainedInvocationPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedInvocationPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedInvocationPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedInvocationPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class QuotedRegexInterpolationPrimaryContext extends PrimaryContext {
		public QuotedRegexInterpolationContext quotedRegexInterpolation() {
			return getRuleContext(QuotedRegexInterpolationContext.class,0);
		}
		public QuotedRegexInterpolationPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterQuotedRegexInterpolationPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitQuotedRegexInterpolationPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitQuotedRegexInterpolationPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MethodDefinitionPrimaryContext extends PrimaryContext {
		public MethodDefinitionContext methodDefinition() {
			return getRuleContext(MethodDefinitionContext.class,0);
		}
		public MethodDefinitionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodDefinitionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodDefinitionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodDefinitionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class HashConstructorPrimaryContext extends PrimaryContext {
		public HashConstructorContext hashConstructor() {
			return getRuleContext(HashConstructorContext.class,0);
		}
		public HashConstructorPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHashConstructorPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHashConstructorPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHashConstructorPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ChainedInvocationWithoutArgumentsPrimaryContext extends PrimaryContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public MethodNameContext methodName() {
			return getRuleContext(MethodNameContext.class,0);
		}
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public ChainedInvocationWithoutArgumentsPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedInvocationWithoutArgumentsPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedInvocationWithoutArgumentsPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedInvocationWithoutArgumentsPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ArrayConstructorPrimaryContext extends PrimaryContext {
		public ArrayConstructorContext arrayConstructor() {
			return getRuleContext(ArrayConstructorContext.class,0);
		}
		public ArrayConstructorPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArrayConstructorPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArrayConstructorPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArrayConstructorPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class JumpExpressionPrimaryContext extends PrimaryContext {
		public JumpExpressionContext jumpExpression() {
			return getRuleContext(JumpExpressionContext.class,0);
		}
		public JumpExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterJumpExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitJumpExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitJumpExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SuperExpressionPrimaryContext extends PrimaryContext {
		public TerminalNode SUPER() { return getToken(DeprecatedRubyParser.SUPER, 0); }
		public ArgumentsWithParenthesesContext argumentsWithParentheses() {
			return getRuleContext(ArgumentsWithParenthesesContext.class,0);
		}
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public SuperExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSuperExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSuperExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSuperExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class VariableReferencePrimaryContext extends PrimaryContext {
		public VariableReferenceContext variableReference() {
			return getRuleContext(VariableReferenceContext.class,0);
		}
		public VariableReferencePrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterVariableReferencePrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitVariableReferencePrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitVariableReferencePrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RegexInterpolationPrimaryContext extends PrimaryContext {
		public RegexInterpolationContext regexInterpolation() {
			return getRuleContext(RegexInterpolationContext.class,0);
		}
		public RegexInterpolationPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRegexInterpolationPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRegexInterpolationPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRegexInterpolationPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ForExpressionPrimaryContext extends PrimaryContext {
		public ForExpressionContext forExpression() {
			return getRuleContext(ForExpressionContext.class,0);
		}
		public ForExpressionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterForExpressionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitForExpressionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitForExpressionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MethodOnlyIdentifierPrimaryContext extends PrimaryContext {
		public MethodOnlyIdentifierContext methodOnlyIdentifier() {
			return getRuleContext(MethodOnlyIdentifierContext.class,0);
		}
		public MethodOnlyIdentifierPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodOnlyIdentifierPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodOnlyIdentifierPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodOnlyIdentifierPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ModuleDefinitionPrimaryContext extends PrimaryContext {
		public ModuleDefinitionContext moduleDefinition() {
			return getRuleContext(ModuleDefinitionContext.class,0);
		}
		public ModuleDefinitionPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterModuleDefinitionPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitModuleDefinitionPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitModuleDefinitionPrimary(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ReturnWithParenthesesPrimaryContext extends PrimaryContext {
		public TerminalNode RETURN() { return getToken(DeprecatedRubyParser.RETURN, 0); }
		public ArgumentsWithParenthesesContext argumentsWithParentheses() {
			return getRuleContext(ArgumentsWithParenthesesContext.class,0);
		}
		public ReturnWithParenthesesPrimaryContext(PrimaryContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterReturnWithParenthesesPrimary(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitReturnWithParenthesesPrimary(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitReturnWithParenthesesPrimary(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PrimaryContext primary() throws RecognitionException {
		return primary(0);
	}

	private PrimaryContext primary(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		PrimaryContext _localctx = new PrimaryContext(_ctx, _parentState);
		PrimaryContext _prevctx = _localctx;
		int _startState = 12;
		enterRecursionRule(_localctx, 12, RULE_primary, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(490);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,46,_ctx) ) {
			case 1:
				{
				_localctx = new ClassDefinitionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(439);
				classDefinition();
				}
				break;
			case 2:
				{
				_localctx = new ModuleDefinitionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(440);
				moduleDefinition();
				}
				break;
			case 3:
				{
				_localctx = new MethodDefinitionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(441);
				methodDefinition();
				}
				break;
			case 4:
				{
				_localctx = new ProcDefinitionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(442);
				procDefinition();
				}
				break;
			case 5:
				{
				_localctx = new YieldWithOptionalArgumentPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(443);
				yieldWithOptionalArgument();
				}
				break;
			case 6:
				{
				_localctx = new IfExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(444);
				ifExpression();
				}
				break;
			case 7:
				{
				_localctx = new UnlessExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(445);
				unlessExpression();
				}
				break;
			case 8:
				{
				_localctx = new CaseExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(446);
				caseExpression();
				}
				break;
			case 9:
				{
				_localctx = new WhileExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(447);
				whileExpression();
				}
				break;
			case 10:
				{
				_localctx = new UntilExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(448);
				untilExpression();
				}
				break;
			case 11:
				{
				_localctx = new ForExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(449);
				forExpression();
				}
				break;
			case 12:
				{
				_localctx = new ReturnWithParenthesesPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(450);
				match(RETURN);
				setState(451);
				argumentsWithParentheses();
				}
				break;
			case 13:
				{
				_localctx = new JumpExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(452);
				jumpExpression();
				}
				break;
			case 14:
				{
				_localctx = new BeginExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(453);
				beginExpression();
				}
				break;
			case 15:
				{
				_localctx = new GroupingExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(454);
				match(LPAREN);
				setState(455);
				compoundStatement();
				setState(456);
				match(RPAREN);
				}
				break;
			case 16:
				{
				_localctx = new VariableReferencePrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(458);
				variableReference();
				}
				break;
			case 17:
				{
				_localctx = new SimpleScopedConstantReferencePrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(459);
				match(COLON2);
				setState(460);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			case 18:
				{
				_localctx = new ArrayConstructorPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(461);
				arrayConstructor();
				}
				break;
			case 19:
				{
				_localctx = new HashConstructorPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(462);
				hashConstructor();
				}
				break;
			case 20:
				{
				_localctx = new LiteralPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(463);
				literal();
				}
				break;
			case 21:
				{
				_localctx = new StringExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(464);
				stringExpression(0);
				}
				break;
			case 22:
				{
				_localctx = new StringInterpolationPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(465);
				stringInterpolation();
				}
				break;
			case 23:
				{
				_localctx = new QuotedStringExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(466);
				quotedStringExpression();
				}
				break;
			case 24:
				{
				_localctx = new RegexInterpolationPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(467);
				regexInterpolation();
				}
				break;
			case 25:
				{
				_localctx = new QuotedRegexInterpolationPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(468);
				quotedRegexInterpolation();
				}
				break;
			case 26:
				{
				_localctx = new IsDefinedPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(469);
				match(IS_DEFINED);
				setState(470);
				match(LPAREN);
				setState(471);
				expressionOrCommand(0);
				setState(472);
				match(RPAREN);
				}
				break;
			case 27:
				{
				_localctx = new SuperExpressionPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(474);
				match(SUPER);
				setState(476);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) {
				case 1:
					{
					setState(475);
					argumentsWithParentheses();
					}
					break;
				}
				setState(479);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) {
				case 1:
					{
					setState(478);
					block();
					}
					break;
				}
				}
				break;
			case 28:
				{
				_localctx = new MethodOnlyIdentifierPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(481);
				methodOnlyIdentifier();
				}
				break;
			case 29:
				{
				_localctx = new InvocationWithBlockOnlyPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(482);
				methodIdentifier();
				setState(483);
				block();
				}
				break;
			case 30:
				{
				_localctx = new InvocationWithParenthesesPrimaryContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(485);
				methodIdentifier();
				setState(486);
				argumentsWithParentheses();
				setState(488);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) {
				case 1:
					{
					setState(487);
					block();
					}
					break;
				}
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(524);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,54,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(522);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,53,_ctx) ) {
					case 1:
						{
						_localctx = new ChainedScopedConstantReferencePrimaryContext(new PrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_primary);
						setState(492);
						if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
						setState(493);
						match(COLON2);
						setState(494);
						match(CONSTANT_IDENTIFIER);
						}
						break;
					case 2:
						{
						_localctx = new IndexingExpressionPrimaryContext(new PrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_primary);
						setState(495);
						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
						setState(496);
						match(LBRACK);
						setState(498);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (EMARK - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (STAR2 - 72)) | (1L << (TILDE - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
							{
							setState(497);
							indexingArguments();
							}
						}

						setState(500);
						match(RBRACK);
						}
						break;
					case 3:
						{
						_localctx = new ChainedInvocationPrimaryContext(new PrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_primary);
						setState(501);
						if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
						setState(503);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(502);
							match(NL);
							}
						}

						setState(505);
						_la = _input.LA(1);
						if ( !(((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (COLON2 - 64)) | (1L << (DOT - 64)) | (1L << (AMPDOT - 64)))) != 0)) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						setState(507);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(506);
							match(NL);
							}
						}

						setState(509);
						methodName();
						setState(511);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) {
						case 1:
							{
							setState(510);
							argumentsWithParentheses();
							}
							break;
						}
						setState(514);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) {
						case 1:
							{
							setState(513);
							block();
							}
							break;
						}
						}
						break;
					case 4:
						{
						_localctx = new ChainedInvocationWithoutArgumentsPrimaryContext(new PrimaryContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_primary);
						setState(516);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(517);
						match(COLON2);
						setState(518);
						methodName();
						setState(520);
						_errHandler.sync(this);
						switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) {
						case 1:
							{
							setState(519);
							block();
							}
							break;
						}
						}
						break;
					}
					} 
				}
				setState(526);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,54,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class SingleLeftHandSideContext extends ParserRuleContext {
		public SingleLeftHandSideContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singleLeftHandSide; }
	 
		public SingleLeftHandSideContext() { }
		public void copyFrom(SingleLeftHandSideContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class PrimaryInsideBracketsSingleLeftHandSideContext extends SingleLeftHandSideContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public TerminalNode LBRACK() { return getToken(DeprecatedRubyParser.LBRACK, 0); }
		public TerminalNode RBRACK() { return getToken(DeprecatedRubyParser.RBRACK, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public PrimaryInsideBracketsSingleLeftHandSideContext(SingleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPrimaryInsideBracketsSingleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPrimaryInsideBracketsSingleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPrimaryInsideBracketsSingleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class XdotySingleLeftHandSideContext extends SingleLeftHandSideContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public TerminalNode DOT() { return getToken(DeprecatedRubyParser.DOT, 0); }
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public XdotySingleLeftHandSideContext(SingleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterXdotySingleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitXdotySingleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitXdotySingleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class VariableIdentifierOnlySingleLeftHandSideContext extends SingleLeftHandSideContext {
		public VariableIdentifierContext variableIdentifier() {
			return getRuleContext(VariableIdentifierContext.class,0);
		}
		public VariableIdentifierOnlySingleLeftHandSideContext(SingleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterVariableIdentifierOnlySingleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitVariableIdentifierOnlySingleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitVariableIdentifierOnlySingleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ScopedConstantAccessSingleLeftHandSideContext extends SingleLeftHandSideContext {
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public ScopedConstantAccessSingleLeftHandSideContext(SingleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterScopedConstantAccessSingleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitScopedConstantAccessSingleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitScopedConstantAccessSingleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingleLeftHandSideContext singleLeftHandSide() throws RecognitionException {
		SingleLeftHandSideContext _localctx = new SingleLeftHandSideContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_singleLeftHandSide);
		int _la;
		try {
			setState(541);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) {
			case 1:
				_localctx = new VariableIdentifierOnlySingleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(527);
				variableIdentifier();
				}
				break;
			case 2:
				_localctx = new PrimaryInsideBracketsSingleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(528);
				primary(0);
				setState(529);
				match(LBRACK);
				setState(531);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (EMARK - 72)) | (1L << (AMP - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (STAR2 - 72)) | (1L << (TILDE - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC_IDENTIFIER - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
					{
					setState(530);
					arguments();
					}
				}

				setState(533);
				match(RBRACK);
				}
				break;
			case 3:
				_localctx = new XdotySingleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(535);
				primary(0);
				setState(536);
				_la = _input.LA(1);
				if ( !(_la==COLON2 || _la==DOT) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(537);
				_la = _input.LA(1);
				if ( !(_la==LOCAL_VARIABLE_IDENTIFIER || _la==CONSTANT_IDENTIFIER) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				break;
			case 4:
				_localctx = new ScopedConstantAccessSingleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(539);
				match(COLON2);
				setState(540);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipleLeftHandSideContext extends ParserRuleContext {
		public MultipleLeftHandSideContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipleLeftHandSide; }
	 
		public MultipleLeftHandSideContext() { }
		public void copyFrom(MultipleLeftHandSideContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class GroupedLeftHandSideOnlyMultipleLeftHandSideContext extends MultipleLeftHandSideContext {
		public GroupedLeftHandSideContext groupedLeftHandSide() {
			return getRuleContext(GroupedLeftHandSideContext.class,0);
		}
		public GroupedLeftHandSideOnlyMultipleLeftHandSideContext(MultipleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterGroupedLeftHandSideOnlyMultipleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitGroupedLeftHandSideOnlyMultipleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitGroupedLeftHandSideOnlyMultipleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSideContext extends MultipleLeftHandSideContext {
		public List multipleLeftHandSideItem() {
			return getRuleContexts(MultipleLeftHandSideItemContext.class);
		}
		public MultipleLeftHandSideItemContext multipleLeftHandSideItem(int i) {
			return getRuleContext(MultipleLeftHandSideItemContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public PackingLeftHandSideContext packingLeftHandSide() {
			return getRuleContext(PackingLeftHandSideContext.class,0);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public MultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSideContext(MultipleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class PackingLeftHandSideOnlyMultipleLeftHandSideContext extends MultipleLeftHandSideContext {
		public PackingLeftHandSideContext packingLeftHandSide() {
			return getRuleContext(PackingLeftHandSideContext.class,0);
		}
		public PackingLeftHandSideOnlyMultipleLeftHandSideContext(MultipleLeftHandSideContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPackingLeftHandSideOnlyMultipleLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPackingLeftHandSideOnlyMultipleLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPackingLeftHandSideOnlyMultipleLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipleLeftHandSideContext multipleLeftHandSide() throws RecognitionException {
		MultipleLeftHandSideContext _localctx = new MultipleLeftHandSideContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_multipleLeftHandSide);
		int _la;
		try {
			int _alt;
			setState(558);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
			case 1:
				_localctx = new MultipleLeftHandSideAndpackingLeftHandSideMultipleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(548); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(543);
						multipleLeftHandSideItem();
						setState(544);
						match(COMMA);
						setState(546);
						_errHandler.sync(this);
						_la = _input.LA(1);
						if (_la==NL) {
							{
							setState(545);
							match(NL);
							}
						}

						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(550); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,58,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(554);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) {
				case 1:
					{
					setState(552);
					multipleLeftHandSideItem();
					}
					break;
				case 2:
					{
					setState(553);
					packingLeftHandSide();
					}
					break;
				}
				}
				break;
			case 2:
				_localctx = new PackingLeftHandSideOnlyMultipleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(556);
				packingLeftHandSide();
				}
				break;
			case 3:
				_localctx = new GroupedLeftHandSideOnlyMultipleLeftHandSideContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(557);
				groupedLeftHandSide();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipleLeftHandSideItemContext extends ParserRuleContext {
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public GroupedLeftHandSideContext groupedLeftHandSide() {
			return getRuleContext(GroupedLeftHandSideContext.class,0);
		}
		public MultipleLeftHandSideItemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipleLeftHandSideItem; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMultipleLeftHandSideItem(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMultipleLeftHandSideItem(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMultipleLeftHandSideItem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipleLeftHandSideItemContext multipleLeftHandSideItem() throws RecognitionException {
		MultipleLeftHandSideItemContext _localctx = new MultipleLeftHandSideItemContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_multipleLeftHandSideItem);
		try {
			setState(562);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(560);
				singleLeftHandSide();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(561);
				groupedLeftHandSide();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PackingLeftHandSideContext extends ParserRuleContext {
		public TerminalNode STAR() { return getToken(DeprecatedRubyParser.STAR, 0); }
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public PackingLeftHandSideContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_packingLeftHandSide; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPackingLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPackingLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPackingLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PackingLeftHandSideContext packingLeftHandSide() throws RecognitionException {
		PackingLeftHandSideContext _localctx = new PackingLeftHandSideContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_packingLeftHandSide);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(564);
			match(STAR);
			setState(565);
			singleLeftHandSide();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class GroupedLeftHandSideContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public MultipleLeftHandSideContext multipleLeftHandSide() {
			return getRuleContext(MultipleLeftHandSideContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public GroupedLeftHandSideContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_groupedLeftHandSide; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterGroupedLeftHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitGroupedLeftHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitGroupedLeftHandSide(this);
			else return visitor.visitChildren(this);
		}
	}

	public final GroupedLeftHandSideContext groupedLeftHandSide() throws RecognitionException {
		GroupedLeftHandSideContext _localctx = new GroupedLeftHandSideContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_groupedLeftHandSide);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(567);
			match(LPAREN);
			setState(568);
			multipleLeftHandSide();
			setState(569);
			match(RPAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MultipleRightHandSideContext extends ParserRuleContext {
		public ExpressionOrCommandsContext expressionOrCommands() {
			return getRuleContext(ExpressionOrCommandsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public SplattingArgumentContext splattingArgument() {
			return getRuleContext(SplattingArgumentContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public MultipleRightHandSideContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_multipleRightHandSide; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMultipleRightHandSide(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMultipleRightHandSide(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMultipleRightHandSide(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MultipleRightHandSideContext multipleRightHandSide() throws RecognitionException {
		MultipleRightHandSideContext _localctx = new MultipleRightHandSideContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_multipleRightHandSide);
		int _la;
		try {
			setState(580);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(571);
				expressionOrCommands();
				setState(577);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
				case 1:
					{
					setState(572);
					match(COMMA);
					setState(574);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(573);
						match(NL);
						}
					}

					setState(576);
					splattingArgument();
					}
					break;
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(579);
				splattingArgument();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpressionOrCommandsContext extends ParserRuleContext {
		public List expressionOrCommand() {
			return getRuleContexts(ExpressionOrCommandContext.class);
		}
		public ExpressionOrCommandContext expressionOrCommand(int i) {
			return getRuleContext(ExpressionOrCommandContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ExpressionOrCommandsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expressionOrCommands; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionOrCommands(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionOrCommands(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionOrCommands(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionOrCommandsContext expressionOrCommands() throws RecognitionException {
		ExpressionOrCommandsContext _localctx = new ExpressionOrCommandsContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_expressionOrCommands);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(582);
			expressionOrCommand(0);
			setState(590);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,66,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(583);
					match(COMMA);
					setState(585);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(584);
						match(NL);
						}
					}

					setState(587);
					expressionOrCommand(0);
					}
					} 
				}
				setState(592);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,66,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InvocationWithoutParenthesesContext extends ParserRuleContext {
		public InvocationWithoutParenthesesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_invocationWithoutParentheses; }
	 
		public InvocationWithoutParenthesesContext() { }
		public void copyFrom(InvocationWithoutParenthesesContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ChainedCommandDoBlockInvocationWithoutParenthesesContext extends InvocationWithoutParenthesesContext {
		public ChainedCommandWithDoBlockContext chainedCommandWithDoBlock() {
			return getRuleContext(ChainedCommandWithDoBlockContext.class,0);
		}
		public ChainedCommandDoBlockInvocationWithoutParenthesesContext(InvocationWithoutParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedCommandDoBlockInvocationWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedCommandDoBlockInvocationWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedCommandDoBlockInvocationWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SingleCommandOnlyInvocationWithoutParenthesesContext extends InvocationWithoutParenthesesContext {
		public CommandContext command() {
			return getRuleContext(CommandContext.class,0);
		}
		public SingleCommandOnlyInvocationWithoutParenthesesContext(InvocationWithoutParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSingleCommandOnlyInvocationWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSingleCommandOnlyInvocationWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSingleCommandOnlyInvocationWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BreakArgsInvocationWithoutParenthesesContext extends InvocationWithoutParenthesesContext {
		public TerminalNode BREAK() { return getToken(DeprecatedRubyParser.BREAK, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public BreakArgsInvocationWithoutParenthesesContext(InvocationWithoutParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBreakArgsInvocationWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBreakArgsInvocationWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBreakArgsInvocationWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ReturnArgsInvocationWithoutParenthesesContext extends InvocationWithoutParenthesesContext {
		public TerminalNode RETURN() { return getToken(DeprecatedRubyParser.RETURN, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public ReturnArgsInvocationWithoutParenthesesContext(InvocationWithoutParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterReturnArgsInvocationWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitReturnArgsInvocationWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitReturnArgsInvocationWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NextArgsInvocationWithoutParenthesesContext extends InvocationWithoutParenthesesContext {
		public TerminalNode NEXT() { return getToken(DeprecatedRubyParser.NEXT, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public NextArgsInvocationWithoutParenthesesContext(InvocationWithoutParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNextArgsInvocationWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNextArgsInvocationWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNextArgsInvocationWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InvocationWithoutParenthesesContext invocationWithoutParentheses() throws RecognitionException {
		InvocationWithoutParenthesesContext _localctx = new InvocationWithoutParenthesesContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_invocationWithoutParentheses);
		try {
			setState(603);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,68,_ctx) ) {
			case 1:
				_localctx = new ChainedCommandDoBlockInvocationWithoutParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(593);
				chainedCommandWithDoBlock();
				}
				break;
			case 2:
				_localctx = new SingleCommandOnlyInvocationWithoutParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(594);
				command();
				}
				break;
			case 3:
				_localctx = new ReturnArgsInvocationWithoutParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(595);
				match(RETURN);
				setState(597);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) {
				case 1:
					{
					setState(596);
					arguments();
					}
					break;
				}
				}
				break;
			case 4:
				_localctx = new BreakArgsInvocationWithoutParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(599);
				match(BREAK);
				setState(600);
				arguments();
				}
				break;
			case 5:
				_localctx = new NextArgsInvocationWithoutParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(601);
				match(NEXT);
				setState(602);
				arguments();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CommandContext extends ParserRuleContext {
		public CommandContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_command; }
	 
		public CommandContext() { }
		public void copyFrom(CommandContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SimpleMethodCommandContext extends CommandContext {
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public SimpleMethodCommandContext(CommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSimpleMethodCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSimpleMethodCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSimpleMethodCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class MemberAccessCommandContext extends CommandContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public MethodNameContext methodName() {
			return getRuleContext(MethodNameContext.class,0);
		}
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public TerminalNode DOT() { return getToken(DeprecatedRubyParser.DOT, 0); }
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode AMPDOT() { return getToken(DeprecatedRubyParser.AMPDOT, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public MemberAccessCommandContext(CommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMemberAccessCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMemberAccessCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMemberAccessCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SuperCommandContext extends CommandContext {
		public TerminalNode SUPER() { return getToken(DeprecatedRubyParser.SUPER, 0); }
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public SuperCommandContext(CommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSuperCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSuperCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSuperCommand(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class YieldCommandContext extends CommandContext {
		public TerminalNode YIELD() { return getToken(DeprecatedRubyParser.YIELD, 0); }
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public YieldCommandContext(CommandContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterYieldCommand(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitYieldCommand(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitYieldCommand(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CommandContext command() throws RecognitionException {
		CommandContext _localctx = new CommandContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_command);
		int _la;
		try {
			setState(620);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
			case 1:
				_localctx = new SuperCommandContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(605);
				match(SUPER);
				setState(606);
				argumentsWithoutParentheses();
				}
				break;
			case 2:
				_localctx = new YieldCommandContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(607);
				match(YIELD);
				setState(608);
				argumentsWithoutParentheses();
				}
				break;
			case 3:
				_localctx = new SimpleMethodCommandContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(609);
				methodIdentifier();
				setState(610);
				argumentsWithoutParentheses();
				}
				break;
			case 4:
				_localctx = new MemberAccessCommandContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(612);
				primary(0);
				setState(613);
				_la = _input.LA(1);
				if ( !(((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (COLON2 - 64)) | (1L << (DOT - 64)) | (1L << (AMPDOT - 64)))) != 0)) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(615);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(614);
					match(NL);
					}
				}

				setState(617);
				methodName();
				setState(618);
				argumentsWithoutParentheses();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ChainedCommandWithDoBlockContext extends ParserRuleContext {
		public CommandWithDoBlockContext commandWithDoBlock() {
			return getRuleContext(CommandWithDoBlockContext.class,0);
		}
		public List methodName() {
			return getRuleContexts(MethodNameContext.class);
		}
		public MethodNameContext methodName(int i) {
			return getRuleContext(MethodNameContext.class,i);
		}
		public List DOT() { return getTokens(DeprecatedRubyParser.DOT); }
		public TerminalNode DOT(int i) {
			return getToken(DeprecatedRubyParser.DOT, i);
		}
		public List COLON2() { return getTokens(DeprecatedRubyParser.COLON2); }
		public TerminalNode COLON2(int i) {
			return getToken(DeprecatedRubyParser.COLON2, i);
		}
		public List argumentsWithParentheses() {
			return getRuleContexts(ArgumentsWithParenthesesContext.class);
		}
		public ArgumentsWithParenthesesContext argumentsWithParentheses(int i) {
			return getRuleContext(ArgumentsWithParenthesesContext.class,i);
		}
		public ChainedCommandWithDoBlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_chainedCommandWithDoBlock; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedCommandWithDoBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedCommandWithDoBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedCommandWithDoBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ChainedCommandWithDoBlockContext chainedCommandWithDoBlock() throws RecognitionException {
		ChainedCommandWithDoBlockContext _localctx = new ChainedCommandWithDoBlockContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_chainedCommandWithDoBlock);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(622);
			commandWithDoBlock();
			setState(630);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,72,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(623);
					_la = _input.LA(1);
					if ( !(_la==COLON2 || _la==DOT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					setState(624);
					methodName();
					setState(626);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) {
					case 1:
						{
						setState(625);
						argumentsWithParentheses();
						}
						break;
					}
					}
					} 
				}
				setState(632);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,72,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CommandWithDoBlockContext extends ParserRuleContext {
		public CommandWithDoBlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_commandWithDoBlock; }
	 
		public CommandWithDoBlockContext() { }
		public void copyFrom(CommandWithDoBlockContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class PrimaryMethodArgsDoBlockCommandWithDoBlockContext extends CommandWithDoBlockContext {
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public MethodNameContext methodName() {
			return getRuleContext(MethodNameContext.class,0);
		}
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public DoBlockContext doBlock() {
			return getRuleContext(DoBlockContext.class,0);
		}
		public TerminalNode DOT() { return getToken(DeprecatedRubyParser.DOT, 0); }
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public PrimaryMethodArgsDoBlockCommandWithDoBlockContext(CommandWithDoBlockContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPrimaryMethodArgsDoBlockCommandWithDoBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPrimaryMethodArgsDoBlockCommandWithDoBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPrimaryMethodArgsDoBlockCommandWithDoBlock(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ArgsAndDoBlockAndMethodIdCommandWithDoBlockContext extends CommandWithDoBlockContext {
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public DoBlockContext doBlock() {
			return getRuleContext(DoBlockContext.class,0);
		}
		public ArgsAndDoBlockAndMethodIdCommandWithDoBlockContext(CommandWithDoBlockContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArgsAndDoBlockAndMethodIdCommandWithDoBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArgsAndDoBlockAndMethodIdCommandWithDoBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArgsAndDoBlockAndMethodIdCommandWithDoBlock(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ArgsAndDoBlockCommandWithDoBlockContext extends CommandWithDoBlockContext {
		public TerminalNode SUPER() { return getToken(DeprecatedRubyParser.SUPER, 0); }
		public ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() {
			return getRuleContext(ArgumentsWithoutParenthesesContext.class,0);
		}
		public DoBlockContext doBlock() {
			return getRuleContext(DoBlockContext.class,0);
		}
		public ArgsAndDoBlockCommandWithDoBlockContext(CommandWithDoBlockContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArgsAndDoBlockCommandWithDoBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArgsAndDoBlockCommandWithDoBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArgsAndDoBlockCommandWithDoBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CommandWithDoBlockContext commandWithDoBlock() throws RecognitionException {
		CommandWithDoBlockContext _localctx = new CommandWithDoBlockContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_commandWithDoBlock);
		int _la;
		try {
			setState(647);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) {
			case 1:
				_localctx = new ArgsAndDoBlockCommandWithDoBlockContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(633);
				match(SUPER);
				setState(634);
				argumentsWithoutParentheses();
				setState(635);
				doBlock();
				}
				break;
			case 2:
				_localctx = new ArgsAndDoBlockAndMethodIdCommandWithDoBlockContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(637);
				methodIdentifier();
				setState(638);
				argumentsWithoutParentheses();
				setState(639);
				doBlock();
				}
				break;
			case 3:
				_localctx = new PrimaryMethodArgsDoBlockCommandWithDoBlockContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(641);
				primary(0);
				setState(642);
				_la = _input.LA(1);
				if ( !(_la==COLON2 || _la==DOT) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(643);
				methodName();
				setState(644);
				argumentsWithoutParentheses();
				setState(645);
				doBlock();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArgumentsWithoutParenthesesContext extends ParserRuleContext {
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public ArgumentsWithoutParenthesesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_argumentsWithoutParentheses; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArgumentsWithoutParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArgumentsWithoutParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArgumentsWithoutParentheses(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArgumentsWithoutParenthesesContext argumentsWithoutParentheses() throws RecognitionException {
		ArgumentsWithoutParenthesesContext _localctx = new ArgumentsWithoutParenthesesContext(_ctx, getState());
		enterRule(_localctx, 36, RULE_argumentsWithoutParentheses);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(649);
			arguments();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArgumentsContext extends ParserRuleContext {
		public List argument() {
			return getRuleContexts(ArgumentContext.class);
		}
		public ArgumentContext argument(int i) {
			return getRuleContext(ArgumentContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ArgumentsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arguments; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArguments(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArgumentsContext arguments() throws RecognitionException {
		ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_arguments);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(651);
			argument();
			setState(659);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,75,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(652);
					match(COMMA);
					setState(654);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(653);
						match(NL);
						}
					}

					setState(656);
					argument();
					}
					} 
				}
				setState(661);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,75,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArgumentContext extends ParserRuleContext {
		public ArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_argument; }
	 
		public ArgumentContext() { }
		public void copyFrom(ArgumentContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ExpressionArgumentContext extends ArgumentContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public ExpressionArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionArgument(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BlockArgumentArgumentContext extends ArgumentContext {
		public BlockArgumentContext blockArgument() {
			return getRuleContext(BlockArgumentContext.class,0);
		}
		public BlockArgumentArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBlockArgumentArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBlockArgumentArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBlockArgumentArgument(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CommandArgumentContext extends ArgumentContext {
		public CommandContext command() {
			return getRuleContext(CommandContext.class,0);
		}
		public CommandArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterCommandArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitCommandArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitCommandArgument(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SplattingArgumentArgumentContext extends ArgumentContext {
		public SplattingArgumentContext splattingArgument() {
			return getRuleContext(SplattingArgumentContext.class,0);
		}
		public SplattingArgumentArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSplattingArgumentArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSplattingArgumentArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSplattingArgumentArgument(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AssociationArgumentContext extends ArgumentContext {
		public AssociationContext association() {
			return getRuleContext(AssociationContext.class,0);
		}
		public AssociationArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAssociationArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAssociationArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAssociationArgument(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class HereDocArgumentContext extends ArgumentContext {
		public TerminalNode HERE_DOC_IDENTIFIER() { return getToken(DeprecatedRubyParser.HERE_DOC_IDENTIFIER, 0); }
		public HereDocArgumentContext(ArgumentContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHereDocArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHereDocArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHereDocArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArgumentContext argument() throws RecognitionException {
		ArgumentContext _localctx = new ArgumentContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_argument);
		try {
			setState(668);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) {
			case 1:
				_localctx = new HereDocArgumentContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(662);
				match(HERE_DOC_IDENTIFIER);
				}
				break;
			case 2:
				_localctx = new BlockArgumentArgumentContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(663);
				blockArgument();
				}
				break;
			case 3:
				_localctx = new SplattingArgumentArgumentContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(664);
				splattingArgument();
				}
				break;
			case 4:
				_localctx = new AssociationArgumentContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(665);
				association();
				}
				break;
			case 5:
				_localctx = new ExpressionArgumentContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(666);
				expression(0);
				}
				break;
			case 6:
				_localctx = new CommandArgumentContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(667);
				command();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlockArgumentContext extends ParserRuleContext {
		public TerminalNode AMP() { return getToken(DeprecatedRubyParser.AMP, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public BlockArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blockArgument; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBlockArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBlockArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBlockArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockArgumentContext blockArgument() throws RecognitionException {
		BlockArgumentContext _localctx = new BlockArgumentContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_blockArgument);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(670);
			match(AMP);
			setState(671);
			expression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SplattingArgumentContext extends ParserRuleContext {
		public TerminalNode STAR() { return getToken(DeprecatedRubyParser.STAR, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public TerminalNode STAR2() { return getToken(DeprecatedRubyParser.STAR2, 0); }
		public SplattingArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_splattingArgument; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSplattingArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSplattingArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSplattingArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SplattingArgumentContext splattingArgument() throws RecognitionException {
		SplattingArgumentContext _localctx = new SplattingArgumentContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_splattingArgument);
		try {
			setState(677);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case STAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(673);
				match(STAR);
				setState(674);
				expressionOrCommand(0);
				}
				break;
			case STAR2:
				enterOuterAlt(_localctx, 2);
				{
				setState(675);
				match(STAR2);
				setState(676);
				expressionOrCommand(0);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IndexingArgumentsContext extends ParserRuleContext {
		public IndexingArgumentsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_indexingArguments; }
	 
		public IndexingArgumentsContext() { }
		public void copyFrom(IndexingArgumentsContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ExpressionsAndSplattingIndexingArgumentsContext extends IndexingArgumentsContext {
		public ExpressionsContext expressions() {
			return getRuleContext(ExpressionsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public SplattingArgumentContext splattingArgument() {
			return getRuleContext(SplattingArgumentContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ExpressionsAndSplattingIndexingArgumentsContext(IndexingArgumentsContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionsAndSplattingIndexingArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionsAndSplattingIndexingArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionsAndSplattingIndexingArguments(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SplattingOnlyIndexingArgumentsContext extends IndexingArgumentsContext {
		public SplattingArgumentContext splattingArgument() {
			return getRuleContext(SplattingArgumentContext.class,0);
		}
		public SplattingOnlyIndexingArgumentsContext(IndexingArgumentsContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSplattingOnlyIndexingArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSplattingOnlyIndexingArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSplattingOnlyIndexingArguments(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class AssociationsOnlyIndexingArgumentsContext extends IndexingArgumentsContext {
		public AssociationsContext associations() {
			return getRuleContext(AssociationsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public AssociationsOnlyIndexingArgumentsContext(IndexingArgumentsContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAssociationsOnlyIndexingArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAssociationsOnlyIndexingArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAssociationsOnlyIndexingArguments(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class CommandOnlyIndexingArgumentsContext extends IndexingArgumentsContext {
		public CommandContext command() {
			return getRuleContext(CommandContext.class,0);
		}
		public CommandOnlyIndexingArgumentsContext(IndexingArgumentsContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterCommandOnlyIndexingArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitCommandOnlyIndexingArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitCommandOnlyIndexingArguments(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExpressionsOnlyIndexingArgumentsContext extends IndexingArgumentsContext {
		public ExpressionsContext expressions() {
			return getRuleContext(ExpressionsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ExpressionsOnlyIndexingArgumentsContext(IndexingArgumentsContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionsOnlyIndexingArguments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionsOnlyIndexingArguments(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionsOnlyIndexingArguments(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IndexingArgumentsContext indexingArguments() throws RecognitionException {
		IndexingArgumentsContext _localctx = new IndexingArgumentsContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_indexingArguments);
		int _la;
		try {
			setState(702);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) {
			case 1:
				_localctx = new ExpressionsOnlyIndexingArgumentsContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(679);
				expressions();
				setState(684);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(680);
					match(COMMA);
					setState(682);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) {
					case 1:
						{
						setState(681);
						match(NL);
						}
						break;
					}
					}
				}

				}
				break;
			case 2:
				_localctx = new ExpressionsAndSplattingIndexingArgumentsContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(686);
				expressions();
				setState(687);
				match(COMMA);
				setState(689);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(688);
					match(NL);
					}
				}

				setState(691);
				splattingArgument();
				}
				break;
			case 3:
				_localctx = new AssociationsOnlyIndexingArgumentsContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(693);
				associations();
				setState(698);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(694);
					match(COMMA);
					setState(696);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) {
					case 1:
						{
						setState(695);
						match(NL);
						}
						break;
					}
					}
				}

				}
				break;
			case 4:
				_localctx = new SplattingOnlyIndexingArgumentsContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(700);
				splattingArgument();
				}
				break;
			case 5:
				_localctx = new CommandOnlyIndexingArgumentsContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(701);
				command();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArgumentsWithParenthesesContext extends ParserRuleContext {
		public ArgumentsWithParenthesesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_argumentsWithParentheses; }
	 
		public ArgumentsWithParenthesesContext() { }
		public void copyFrom(ArgumentsWithParenthesesContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ArgsOnlyArgumentsWithParenthesesContext extends ArgumentsWithParenthesesContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public ArgsOnlyArgumentsWithParenthesesContext(ArgumentsWithParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArgsOnlyArgumentsWithParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArgsOnlyArgumentsWithParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArgsOnlyArgumentsWithParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BlankArgsArgumentsWithParenthesesContext extends ArgumentsWithParenthesesContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BlankArgsArgumentsWithParenthesesContext(ArgumentsWithParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBlankArgsArgumentsWithParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBlankArgsArgumentsWithParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBlankArgsArgumentsWithParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ChainedCommandWithDoBlockOnlyArgumentsWithParenthesesContext extends ArgumentsWithParenthesesContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public ChainedCommandWithDoBlockContext chainedCommandWithDoBlock() {
			return getRuleContext(ChainedCommandWithDoBlockContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ChainedCommandWithDoBlockOnlyArgumentsWithParenthesesContext(ArgumentsWithParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterChainedCommandWithDoBlockOnlyArgumentsWithParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitChainedCommandWithDoBlockOnlyArgumentsWithParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitChainedCommandWithDoBlockOnlyArgumentsWithParentheses(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExpressionsAndChainedCommandWithDoBlockArgumentsWithParenthesesContext extends ArgumentsWithParenthesesContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public ExpressionsContext expressions() {
			return getRuleContext(ExpressionsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public ChainedCommandWithDoBlockContext chainedCommandWithDoBlock() {
			return getRuleContext(ChainedCommandWithDoBlockContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ExpressionsAndChainedCommandWithDoBlockArgumentsWithParenthesesContext(ArgumentsWithParenthesesContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressionsAndChainedCommandWithDoBlockArgumentsWithParentheses(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressionsAndChainedCommandWithDoBlockArgumentsWithParentheses(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressionsAndChainedCommandWithDoBlockArgumentsWithParentheses(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArgumentsWithParenthesesContext argumentsWithParentheses() throws RecognitionException {
		ArgumentsWithParenthesesContext _localctx = new ArgumentsWithParenthesesContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_argumentsWithParentheses);
		int _la;
		try {
			setState(747);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) {
			case 1:
				_localctx = new BlankArgsArgumentsWithParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(704);
				match(LPAREN);
				setState(706);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(705);
					match(NL);
					}
				}

				setState(708);
				match(RPAREN);
				}
				break;
			case 2:
				_localctx = new ArgsOnlyArgumentsWithParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(709);
				match(LPAREN);
				setState(711);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(710);
					match(NL);
					}
				}

				setState(713);
				arguments();
				setState(715);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(714);
					match(COMMA);
					}
				}

				setState(718);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(717);
					match(NL);
					}
				}

				setState(720);
				match(RPAREN);
				}
				break;
			case 3:
				_localctx = new ExpressionsAndChainedCommandWithDoBlockArgumentsWithParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(722);
				match(LPAREN);
				setState(724);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(723);
					match(NL);
					}
				}

				setState(726);
				expressions();
				setState(727);
				match(COMMA);
				setState(729);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(728);
					match(NL);
					}
				}

				setState(731);
				chainedCommandWithDoBlock();
				setState(733);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(732);
					match(NL);
					}
				}

				setState(735);
				match(RPAREN);
				}
				break;
			case 4:
				_localctx = new ChainedCommandWithDoBlockOnlyArgumentsWithParenthesesContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(737);
				match(LPAREN);
				setState(739);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(738);
					match(NL);
					}
				}

				setState(741);
				chainedCommandWithDoBlock();
				setState(743);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(742);
					match(NL);
					}
				}

				setState(745);
				match(RPAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpressionsContext extends ParserRuleContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ExpressionsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expressions; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpressions(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpressions(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpressions(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionsContext expressions() throws RecognitionException {
		ExpressionsContext _localctx = new ExpressionsContext(_ctx, getState());
		enterRule(_localctx, 50, RULE_expressions);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(749);
			expression(0);
			setState(757);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,95,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(750);
					match(COMMA);
					setState(752);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(751);
						match(NL);
						}
					}

					setState(754);
					expression(0);
					}
					} 
				}
				setState(759);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,95,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlockContext extends ParserRuleContext {
		public BlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_block; }
	 
		public BlockContext() { }
		public void copyFrom(BlockContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class BraceBlockBlockContext extends BlockContext {
		public BraceBlockContext braceBlock() {
			return getRuleContext(BraceBlockContext.class,0);
		}
		public BraceBlockBlockContext(BlockContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBraceBlockBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBraceBlockBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBraceBlockBlock(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DoBlockBlockContext extends BlockContext {
		public DoBlockContext doBlock() {
			return getRuleContext(DoBlockContext.class,0);
		}
		public DoBlockBlockContext(BlockContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDoBlockBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDoBlockBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDoBlockBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockContext block() throws RecognitionException {
		BlockContext _localctx = new BlockContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_block);
		try {
			setState(762);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LCURLY:
				_localctx = new BraceBlockBlockContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(760);
				braceBlock();
				}
				break;
			case DO:
				_localctx = new DoBlockBlockContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(761);
				doBlock();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BraceBlockContext extends ParserRuleContext {
		public TerminalNode LCURLY() { return getToken(DeprecatedRubyParser.LCURLY, 0); }
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode RCURLY() { return getToken(DeprecatedRubyParser.RCURLY, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BlockParameterContext blockParameter() {
			return getRuleContext(BlockParameterContext.class,0);
		}
		public BraceBlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_braceBlock; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBraceBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBraceBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBraceBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BraceBlockContext braceBlock() throws RecognitionException {
		BraceBlockContext _localctx = new BraceBlockContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_braceBlock);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(764);
			match(LCURLY);
			setState(766);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) {
			case 1:
				{
				setState(765);
				match(NL);
				}
				break;
			}
			setState(769);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==BAR) {
				{
				setState(768);
				blockParameter();
				}
			}

			setState(771);
			bodyStatement();
			setState(772);
			match(RCURLY);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DoBlockContext extends ParserRuleContext {
		public TerminalNode DO() { return getToken(DeprecatedRubyParser.DO, 0); }
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public BlockParameterContext blockParameter() {
			return getRuleContext(BlockParameterContext.class,0);
		}
		public DoBlockContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_doBlock; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDoBlock(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDoBlock(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDoBlock(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DoBlockContext doBlock() throws RecognitionException {
		DoBlockContext _localctx = new DoBlockContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_doBlock);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(774);
			match(DO);
			setState(776);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) {
			case 1:
				{
				setState(775);
				match(NL);
				}
				break;
			}
			setState(779);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==BAR) {
				{
				setState(778);
				blockParameter();
				}
			}

			setState(781);
			bodyStatement();
			setState(782);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlockParameterContext extends ParserRuleContext {
		public List BAR() { return getTokens(DeprecatedRubyParser.BAR); }
		public TerminalNode BAR(int i) {
			return getToken(DeprecatedRubyParser.BAR, i);
		}
		public BlockParametersContext blockParameters() {
			return getRuleContext(BlockParametersContext.class,0);
		}
		public BlockParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blockParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBlockParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBlockParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBlockParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockParameterContext blockParameter() throws RecognitionException {
		BlockParameterContext _localctx = new BlockParameterContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_blockParameter);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(784);
			match(BAR);
			setState(786);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
				{
				setState(785);
				blockParameters();
				}
			}

			setState(788);
			match(BAR);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlockParametersContext extends ParserRuleContext {
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public MultipleLeftHandSideContext multipleLeftHandSide() {
			return getRuleContext(MultipleLeftHandSideContext.class,0);
		}
		public BlockParametersContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blockParameters; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBlockParameters(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBlockParameters(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBlockParameters(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BlockParametersContext blockParameters() throws RecognitionException {
		BlockParametersContext _localctx = new BlockParametersContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_blockParameters);
		try {
			setState(792);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(790);
				singleLeftHandSide();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(791);
				multipleLeftHandSide();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArrayConstructorContext extends ParserRuleContext {
		public ArrayConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayConstructor; }
	 
		public ArrayConstructorContext() { }
		public void copyFrom(ArrayConstructorContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ExpandedWordArrayConstructorContext extends ArrayConstructorContext {
		public TerminalNode QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START, 0); }
		public TerminalNode QUOTED_EXPANDED_STRING_ARRAY_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_STRING_ARRAY_LITERAL_END, 0); }
		public ExpandedArrayElementsContext expandedArrayElements() {
			return getRuleContext(ExpandedArrayElementsContext.class,0);
		}
		public ExpandedWordArrayConstructorContext(ArrayConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedWordArrayConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedWordArrayConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedWordArrayConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NonExpandedSymbolArrayConstructorContext extends ArrayConstructorContext {
		public TerminalNode QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START, 0); }
		public TerminalNode QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_END, 0); }
		public NonExpandedArrayElementsContext nonExpandedArrayElements() {
			return getRuleContext(NonExpandedArrayElementsContext.class,0);
		}
		public NonExpandedSymbolArrayConstructorContext(ArrayConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNonExpandedSymbolArrayConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNonExpandedSymbolArrayConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNonExpandedSymbolArrayConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class BracketedArrayConstructorContext extends ArrayConstructorContext {
		public TerminalNode LBRACK() { return getToken(DeprecatedRubyParser.LBRACK, 0); }
		public TerminalNode RBRACK() { return getToken(DeprecatedRubyParser.RBRACK, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public IndexingArgumentsContext indexingArguments() {
			return getRuleContext(IndexingArgumentsContext.class,0);
		}
		public BracketedArrayConstructorContext(ArrayConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBracketedArrayConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBracketedArrayConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBracketedArrayConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExpandedSymbolArrayConstructorContext extends ArrayConstructorContext {
		public TerminalNode QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START, 0); }
		public TerminalNode QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_END, 0); }
		public ExpandedArrayElementsContext expandedArrayElements() {
			return getRuleContext(ExpandedArrayElementsContext.class,0);
		}
		public ExpandedSymbolArrayConstructorContext(ArrayConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedSymbolArrayConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedSymbolArrayConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedSymbolArrayConstructor(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NonExpandedWordArrayConstructorContext extends ArrayConstructorContext {
		public TerminalNode QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START, 0); }
		public TerminalNode QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_END, 0); }
		public NonExpandedArrayElementsContext nonExpandedArrayElements() {
			return getRuleContext(NonExpandedArrayElementsContext.class,0);
		}
		public NonExpandedWordArrayConstructorContext(ArrayConstructorContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNonExpandedWordArrayConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNonExpandedWordArrayConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNonExpandedWordArrayConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArrayConstructorContext arrayConstructor() throws RecognitionException {
		ArrayConstructorContext _localctx = new ArrayConstructorContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_arrayConstructor);
		int _la;
		try {
			setState(825);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LBRACK:
				_localctx = new BracketedArrayConstructorContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(794);
				match(LBRACK);
				setState(796);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) {
				case 1:
					{
					setState(795);
					match(NL);
					}
					break;
				}
				setState(799);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (EMARK - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (STAR2 - 72)) | (1L << (TILDE - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
					{
					setState(798);
					indexingArguments();
					}
				}

				setState(802);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(801);
					match(NL);
					}
				}

				setState(804);
				match(RBRACK);
				}
				break;
			case QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START:
				_localctx = new NonExpandedWordArrayConstructorContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(805);
				match(QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START);
				setState(807);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NON_EXPANDED_ARRAY_ITEM_SEPARATOR || _la==NON_EXPANDED_ARRAY_ITEM_CHARACTER) {
					{
					setState(806);
					nonExpandedArrayElements();
					}
				}

				setState(809);
				match(QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_END);
				}
				break;
			case QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START:
				_localctx = new NonExpandedSymbolArrayConstructorContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(810);
				match(QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START);
				setState(812);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NON_EXPANDED_ARRAY_ITEM_SEPARATOR || _la==NON_EXPANDED_ARRAY_ITEM_CHARACTER) {
					{
					setState(811);
					nonExpandedArrayElements();
					}
				}

				setState(814);
				match(QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_END);
				}
				break;
			case QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START:
				_localctx = new ExpandedSymbolArrayConstructorContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(815);
				match(QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START);
				setState(817);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 142)) & ~0x3f) == 0 && ((1L << (_la - 142)) & ((1L << (DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN - 142)) | (1L << (EXPANDED_ARRAY_ITEM_SEPARATOR - 142)) | (1L << (EXPANDED_ARRAY_ITEM_CHARACTER - 142)))) != 0)) {
					{
					setState(816);
					expandedArrayElements();
					}
				}

				setState(819);
				match(QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_END);
				}
				break;
			case QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START:
				_localctx = new ExpandedWordArrayConstructorContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(820);
				match(QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START);
				setState(822);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 142)) & ~0x3f) == 0 && ((1L << (_la - 142)) & ((1L << (DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN - 142)) | (1L << (EXPANDED_ARRAY_ITEM_SEPARATOR - 142)) | (1L << (EXPANDED_ARRAY_ITEM_CHARACTER - 142)))) != 0)) {
					{
					setState(821);
					expandedArrayElements();
					}
				}

				setState(824);
				match(QUOTED_EXPANDED_STRING_ARRAY_LITERAL_END);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpandedArrayElementsContext extends ParserRuleContext {
		public List expandedArrayElement() {
			return getRuleContexts(ExpandedArrayElementContext.class);
		}
		public ExpandedArrayElementContext expandedArrayElement(int i) {
			return getRuleContext(ExpandedArrayElementContext.class,i);
		}
		public List EXPANDED_ARRAY_ITEM_SEPARATOR() { return getTokens(DeprecatedRubyParser.EXPANDED_ARRAY_ITEM_SEPARATOR); }
		public TerminalNode EXPANDED_ARRAY_ITEM_SEPARATOR(int i) {
			return getToken(DeprecatedRubyParser.EXPANDED_ARRAY_ITEM_SEPARATOR, i);
		}
		public ExpandedArrayElementsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expandedArrayElements; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedArrayElements(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedArrayElements(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedArrayElements(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpandedArrayElementsContext expandedArrayElements() throws RecognitionException {
		ExpandedArrayElementsContext _localctx = new ExpandedArrayElementsContext(_ctx, getState());
		enterRule(_localctx, 64, RULE_expandedArrayElements);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(830);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==EXPANDED_ARRAY_ITEM_SEPARATOR) {
				{
				{
				setState(827);
				match(EXPANDED_ARRAY_ITEM_SEPARATOR);
				}
				}
				setState(832);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(833);
			expandedArrayElement();
			setState(842);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,113,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(835); 
					_errHandler.sync(this);
					_la = _input.LA(1);
					do {
						{
						{
						setState(834);
						match(EXPANDED_ARRAY_ITEM_SEPARATOR);
						}
						}
						setState(837); 
						_errHandler.sync(this);
						_la = _input.LA(1);
					} while ( _la==EXPANDED_ARRAY_ITEM_SEPARATOR );
					setState(839);
					expandedArrayElement();
					}
					} 
				}
				setState(844);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,113,_ctx);
			}
			setState(848);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==EXPANDED_ARRAY_ITEM_SEPARATOR) {
				{
				{
				setState(845);
				match(EXPANDED_ARRAY_ITEM_SEPARATOR);
				}
				}
				setState(850);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExpandedArrayElementContext extends ParserRuleContext {
		public List EXPANDED_ARRAY_ITEM_CHARACTER() { return getTokens(DeprecatedRubyParser.EXPANDED_ARRAY_ITEM_CHARACTER); }
		public TerminalNode EXPANDED_ARRAY_ITEM_CHARACTER(int i) {
			return getToken(DeprecatedRubyParser.EXPANDED_ARRAY_ITEM_CHARACTER, i);
		}
		public List delimitedArrayItemInterpolation() {
			return getRuleContexts(DelimitedArrayItemInterpolationContext.class);
		}
		public DelimitedArrayItemInterpolationContext delimitedArrayItemInterpolation(int i) {
			return getRuleContext(DelimitedArrayItemInterpolationContext.class,i);
		}
		public ExpandedArrayElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expandedArrayElement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedArrayElement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedArrayElement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedArrayElement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpandedArrayElementContext expandedArrayElement() throws RecognitionException {
		ExpandedArrayElementContext _localctx = new ExpandedArrayElementContext(_ctx, getState());
		enterRule(_localctx, 66, RULE_expandedArrayElement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(853); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				setState(853);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case EXPANDED_ARRAY_ITEM_CHARACTER:
					{
					setState(851);
					match(EXPANDED_ARRAY_ITEM_CHARACTER);
					}
					break;
				case DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN:
					{
					setState(852);
					delimitedArrayItemInterpolation();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(855); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN || _la==EXPANDED_ARRAY_ITEM_CHARACTER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DelimitedArrayItemInterpolationContext extends ParserRuleContext {
		public TerminalNode DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN() { return getToken(DeprecatedRubyParser.DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode DELIMITED_ARRAY_ITEM_INTERPOLATION_END() { return getToken(DeprecatedRubyParser.DELIMITED_ARRAY_ITEM_INTERPOLATION_END, 0); }
		public DelimitedArrayItemInterpolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_delimitedArrayItemInterpolation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDelimitedArrayItemInterpolation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDelimitedArrayItemInterpolation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDelimitedArrayItemInterpolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DelimitedArrayItemInterpolationContext delimitedArrayItemInterpolation() throws RecognitionException {
		DelimitedArrayItemInterpolationContext _localctx = new DelimitedArrayItemInterpolationContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_delimitedArrayItemInterpolation);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(857);
			match(DELIMITED_ARRAY_ITEM_INTERPOLATION_BEGIN);
			setState(858);
			compoundStatement();
			setState(859);
			match(DELIMITED_ARRAY_ITEM_INTERPOLATION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonExpandedArrayElementsContext extends ParserRuleContext {
		public List nonExpandedArrayElement() {
			return getRuleContexts(NonExpandedArrayElementContext.class);
		}
		public NonExpandedArrayElementContext nonExpandedArrayElement(int i) {
			return getRuleContext(NonExpandedArrayElementContext.class,i);
		}
		public List NON_EXPANDED_ARRAY_ITEM_SEPARATOR() { return getTokens(DeprecatedRubyParser.NON_EXPANDED_ARRAY_ITEM_SEPARATOR); }
		public TerminalNode NON_EXPANDED_ARRAY_ITEM_SEPARATOR(int i) {
			return getToken(DeprecatedRubyParser.NON_EXPANDED_ARRAY_ITEM_SEPARATOR, i);
		}
		public NonExpandedArrayElementsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonExpandedArrayElements; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNonExpandedArrayElements(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNonExpandedArrayElements(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNonExpandedArrayElements(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NonExpandedArrayElementsContext nonExpandedArrayElements() throws RecognitionException {
		NonExpandedArrayElementsContext _localctx = new NonExpandedArrayElementsContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_nonExpandedArrayElements);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(864);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==NON_EXPANDED_ARRAY_ITEM_SEPARATOR) {
				{
				{
				setState(861);
				match(NON_EXPANDED_ARRAY_ITEM_SEPARATOR);
				}
				}
				setState(866);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(867);
			nonExpandedArrayElement();
			setState(876);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,119,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(869); 
					_errHandler.sync(this);
					_la = _input.LA(1);
					do {
						{
						{
						setState(868);
						match(NON_EXPANDED_ARRAY_ITEM_SEPARATOR);
						}
						}
						setState(871); 
						_errHandler.sync(this);
						_la = _input.LA(1);
					} while ( _la==NON_EXPANDED_ARRAY_ITEM_SEPARATOR );
					setState(873);
					nonExpandedArrayElement();
					}
					} 
				}
				setState(878);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,119,_ctx);
			}
			setState(882);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==NON_EXPANDED_ARRAY_ITEM_SEPARATOR) {
				{
				{
				setState(879);
				match(NON_EXPANDED_ARRAY_ITEM_SEPARATOR);
				}
				}
				setState(884);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonExpandedArrayElementContext extends ParserRuleContext {
		public List NON_EXPANDED_ARRAY_ITEM_CHARACTER() { return getTokens(DeprecatedRubyParser.NON_EXPANDED_ARRAY_ITEM_CHARACTER); }
		public TerminalNode NON_EXPANDED_ARRAY_ITEM_CHARACTER(int i) {
			return getToken(DeprecatedRubyParser.NON_EXPANDED_ARRAY_ITEM_CHARACTER, i);
		}
		public NonExpandedArrayElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonExpandedArrayElement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNonExpandedArrayElement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNonExpandedArrayElement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNonExpandedArrayElement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NonExpandedArrayElementContext nonExpandedArrayElement() throws RecognitionException {
		NonExpandedArrayElementContext _localctx = new NonExpandedArrayElementContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_nonExpandedArrayElement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(886); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(885);
				match(NON_EXPANDED_ARRAY_ITEM_CHARACTER);
				}
				}
				setState(888); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==NON_EXPANDED_ARRAY_ITEM_CHARACTER );
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HashConstructorContext extends ParserRuleContext {
		public TerminalNode LCURLY() { return getToken(DeprecatedRubyParser.LCURLY, 0); }
		public TerminalNode RCURLY() { return getToken(DeprecatedRubyParser.RCURLY, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public HashConstructorElementsContext hashConstructorElements() {
			return getRuleContext(HashConstructorElementsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public HashConstructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hashConstructor; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHashConstructor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHashConstructor(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHashConstructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HashConstructorContext hashConstructor() throws RecognitionException {
		HashConstructorContext _localctx = new HashConstructorContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_hashConstructor);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(890);
			match(LCURLY);
			setState(892);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) {
			case 1:
				{
				setState(891);
				match(NL);
				}
				break;
			}
			setState(898);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (EMARK - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (STAR2 - 72)) | (1L << (TILDE - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
				{
				setState(894);
				hashConstructorElements();
				setState(896);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(895);
					match(COMMA);
					}
				}

				}
			}

			setState(901);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(900);
				match(NL);
				}
			}

			setState(903);
			match(RCURLY);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HashConstructorElementsContext extends ParserRuleContext {
		public List hashConstructorElement() {
			return getRuleContexts(HashConstructorElementContext.class);
		}
		public HashConstructorElementContext hashConstructorElement(int i) {
			return getRuleContext(HashConstructorElementContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public HashConstructorElementsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hashConstructorElements; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHashConstructorElements(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHashConstructorElements(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHashConstructorElements(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HashConstructorElementsContext hashConstructorElements() throws RecognitionException {
		HashConstructorElementsContext _localctx = new HashConstructorElementsContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_hashConstructorElements);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(905);
			hashConstructorElement();
			setState(913);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,127,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(906);
					match(COMMA);
					setState(908);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(907);
						match(NL);
						}
					}

					setState(910);
					hashConstructorElement();
					}
					} 
				}
				setState(915);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,127,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HashConstructorElementContext extends ParserRuleContext {
		public AssociationContext association() {
			return getRuleContext(AssociationContext.class,0);
		}
		public TerminalNode STAR2() { return getToken(DeprecatedRubyParser.STAR2, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public HashConstructorElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hashConstructorElement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHashConstructorElement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHashConstructorElement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHashConstructorElement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HashConstructorElementContext hashConstructorElement() throws RecognitionException {
		HashConstructorElementContext _localctx = new HashConstructorElementContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_hashConstructorElement);
		try {
			setState(919);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case REGULAR_EXPRESSION_START:
			case LINE__:
			case ENCODING__:
			case FILE__:
			case BEGIN_:
			case END_:
			case ALIAS:
			case AND:
			case BEGIN:
			case BREAK:
			case CASE:
			case CLASS:
			case DEF:
			case IS_DEFINED:
			case DO:
			case ELSE:
			case ELSIF:
			case END:
			case ENSURE:
			case FOR:
			case FALSE:
			case IF:
			case IN:
			case MODULE:
			case NEXT:
			case NIL:
			case NOT:
			case OR:
			case REDO:
			case RESCUE:
			case RETRY:
			case RETURN:
			case SELF:
			case SUPER:
			case THEN:
			case TRUE:
			case UNDEF:
			case UNLESS:
			case UNTIL:
			case WHEN:
			case WHILE:
			case YIELD:
			case LBRACK:
			case LPAREN:
			case LCURLY:
			case COLON:
			case COLON2:
			case MINUSGT:
			case EMARK:
			case PLUS:
			case MINUS:
			case STAR:
			case TILDE:
			case SINGLE_QUOTED_STRING_LITERAL:
			case DOUBLE_QUOTED_STRING_START:
			case QUOTED_NON_EXPANDED_STRING_LITERAL_START:
			case QUOTED_EXPANDED_STRING_LITERAL_START:
			case QUOTED_EXPANDED_REGULAR_EXPRESSION_START:
			case QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START:
			case QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START:
			case QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START:
			case HERE_DOC:
			case QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START:
			case QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START:
			case DECIMAL_INTEGER_LITERAL:
			case BINARY_INTEGER_LITERAL:
			case OCTAL_INTEGER_LITERAL:
			case HEXADECIMAL_INTEGER_LITERAL:
			case FLOAT_LITERAL_WITHOUT_EXPONENT:
			case FLOAT_LITERAL_WITH_EXPONENT:
			case SYMBOL_LITERAL:
			case LOCAL_VARIABLE_IDENTIFIER:
			case GLOBAL_VARIABLE_IDENTIFIER:
			case INSTANCE_VARIABLE_IDENTIFIER:
			case CLASS_VARIABLE_IDENTIFIER:
			case CONSTANT_IDENTIFIER:
				enterOuterAlt(_localctx, 1);
				{
				setState(916);
				association();
				}
				break;
			case STAR2:
				enterOuterAlt(_localctx, 2);
				{
				setState(917);
				match(STAR2);
				setState(918);
				expression(0);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssociationsContext extends ParserRuleContext {
		public List association() {
			return getRuleContexts(AssociationContext.class);
		}
		public AssociationContext association(int i) {
			return getRuleContext(AssociationContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public AssociationsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_associations; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAssociations(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAssociations(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAssociations(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssociationsContext associations() throws RecognitionException {
		AssociationsContext _localctx = new AssociationsContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_associations);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(921);
			association();
			setState(929);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,130,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(922);
					match(COMMA);
					setState(924);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(923);
						match(NL);
						}
					}

					setState(926);
					association();
					}
					} 
				}
				setState(931);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,130,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssociationContext extends ParserRuleContext {
		public TerminalNode EQGT() { return getToken(DeprecatedRubyParser.EQGT, 0); }
		public TerminalNode COLON() { return getToken(DeprecatedRubyParser.COLON, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public KeywordContext keyword() {
			return getRuleContext(KeywordContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public AssociationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_association; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAssociation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAssociation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAssociation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssociationContext association() throws RecognitionException {
		AssociationContext _localctx = new AssociationContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_association);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(934);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) {
			case 1:
				{
				setState(932);
				expression(0);
				}
				break;
			case 2:
				{
				setState(933);
				keyword();
				}
				break;
			}
			setState(936);
			_la = _input.LA(1);
			if ( !(_la==COLON || _la==EQGT) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			setState(941);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) {
			case 1:
				{
				setState(938);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(937);
					match(NL);
					}
				}

				setState(940);
				expression(0);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodDefinitionContext extends ParserRuleContext {
		public TerminalNode DEF() { return getToken(DeprecatedRubyParser.DEF, 0); }
		public MethodNamePartContext methodNamePart() {
			return getRuleContext(MethodNamePartContext.class,0);
		}
		public MethodParameterPartContext methodParameterPart() {
			return getRuleContext(MethodParameterPartContext.class,0);
		}
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public TerminalNode EQ() { return getToken(DeprecatedRubyParser.EQ, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public MethodDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodDefinition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodDefinition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodDefinition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodDefinitionContext methodDefinition() throws RecognitionException {
		MethodDefinitionContext _localctx = new MethodDefinitionContext(_ctx, getState());
		enterRule(_localctx, 84, RULE_methodDefinition);
		int _la;
		try {
			setState(964);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(943);
				match(DEF);
				setState(945);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(944);
					match(NL);
					}
				}

				setState(947);
				methodNamePart();
				setState(948);
				methodParameterPart();
				setState(949);
				bodyStatement();
				setState(950);
				match(END);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(952);
				match(DEF);
				setState(954);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(953);
					match(NL);
					}
				}

				setState(956);
				methodIdentifier();
				setState(957);
				methodParameterPart();
				setState(958);
				match(EQ);
				setState(960);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(959);
					match(NL);
					}
				}

				setState(962);
				expression(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ProcDefinitionContext extends ParserRuleContext {
		public TerminalNode MINUSGT() { return getToken(DeprecatedRubyParser.MINUSGT, 0); }
		public BlockContext block() {
			return getRuleContext(BlockContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public ParametersContext parameters() {
			return getRuleContext(ParametersContext.class,0);
		}
		public ProcDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_procDefinition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterProcDefinition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitProcDefinition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitProcDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ProcDefinitionContext procDefinition() throws RecognitionException {
		ProcDefinitionContext _localctx = new ProcDefinitionContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_procDefinition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(966);
			match(MINUSGT);
			setState(972);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==LPAREN) {
				{
				setState(967);
				match(LPAREN);
				setState(969);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (AMP - 76)) | (1L << (STAR - 76)) | (1L << (STAR2 - 76)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 76)))) != 0)) {
					{
					setState(968);
					parameters();
					}
				}

				setState(971);
				match(RPAREN);
				}
			}

			setState(974);
			block();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodNamePartContext extends ParserRuleContext {
		public MethodNamePartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodNamePart; }
	 
		public MethodNamePartContext() { }
		public void copyFrom(MethodNamePartContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SimpleMethodNamePartContext extends MethodNamePartContext {
		public DefinedMethodNameContext definedMethodName() {
			return getRuleContext(DefinedMethodNameContext.class,0);
		}
		public SimpleMethodNamePartContext(MethodNamePartContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSimpleMethodNamePart(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSimpleMethodNamePart(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSimpleMethodNamePart(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SingletonMethodNamePartContext extends MethodNamePartContext {
		public SingletonObjectContext singletonObject() {
			return getRuleContext(SingletonObjectContext.class,0);
		}
		public DefinedMethodNameContext definedMethodName() {
			return getRuleContext(DefinedMethodNameContext.class,0);
		}
		public TerminalNode DOT() { return getToken(DeprecatedRubyParser.DOT, 0); }
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public SingletonMethodNamePartContext(MethodNamePartContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSingletonMethodNamePart(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSingletonMethodNamePart(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSingletonMethodNamePart(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodNamePartContext methodNamePart() throws RecognitionException {
		MethodNamePartContext _localctx = new MethodNamePartContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_methodNamePart);
		int _la;
		try {
			setState(987);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,142,_ctx) ) {
			case 1:
				_localctx = new SimpleMethodNamePartContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(976);
				definedMethodName();
				}
				break;
			case 2:
				_localctx = new SingletonMethodNamePartContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(977);
				singletonObject();
				setState(979);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(978);
					match(NL);
					}
				}

				setState(981);
				_la = _input.LA(1);
				if ( !(_la==COLON2 || _la==DOT) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(983);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(982);
					match(NL);
					}
				}

				setState(985);
				definedMethodName();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SingletonObjectContext extends ParserRuleContext {
		public VariableIdentifierContext variableIdentifier() {
			return getRuleContext(VariableIdentifierContext.class,0);
		}
		public PseudoVariableIdentifierContext pseudoVariableIdentifier() {
			return getRuleContext(PseudoVariableIdentifierContext.class,0);
		}
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public SingletonObjectContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_singletonObject; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSingletonObject(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSingletonObject(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSingletonObject(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SingletonObjectContext singletonObject() throws RecognitionException {
		SingletonObjectContext _localctx = new SingletonObjectContext(_ctx, getState());
		enterRule(_localctx, 90, RULE_singletonObject);
		try {
			setState(995);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LOCAL_VARIABLE_IDENTIFIER:
			case GLOBAL_VARIABLE_IDENTIFIER:
			case INSTANCE_VARIABLE_IDENTIFIER:
			case CLASS_VARIABLE_IDENTIFIER:
			case CONSTANT_IDENTIFIER:
				enterOuterAlt(_localctx, 1);
				{
				setState(989);
				variableIdentifier();
				}
				break;
			case LINE__:
			case ENCODING__:
			case FILE__:
			case FALSE:
			case NIL:
			case SELF:
			case TRUE:
				enterOuterAlt(_localctx, 2);
				{
				setState(990);
				pseudoVariableIdentifier();
				}
				break;
			case LPAREN:
				enterOuterAlt(_localctx, 3);
				{
				setState(991);
				match(LPAREN);
				setState(992);
				expressionOrCommand(0);
				setState(993);
				match(RPAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DefinedMethodNameContext extends ParserRuleContext {
		public MethodNameContext methodName() {
			return getRuleContext(MethodNameContext.class,0);
		}
		public AssignmentLikeMethodIdentifierContext assignmentLikeMethodIdentifier() {
			return getRuleContext(AssignmentLikeMethodIdentifierContext.class,0);
		}
		public DefinedMethodNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_definedMethodName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDefinedMethodName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDefinedMethodName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDefinedMethodName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DefinedMethodNameContext definedMethodName() throws RecognitionException {
		DefinedMethodNameContext _localctx = new DefinedMethodNameContext(_ctx, getState());
		enterRule(_localctx, 92, RULE_definedMethodName);
		try {
			setState(999);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LINE__:
			case ENCODING__:
			case FILE__:
			case BEGIN_:
			case END_:
			case ALIAS:
			case AND:
			case BEGIN:
			case BREAK:
			case CASE:
			case CLASS:
			case DEF:
			case IS_DEFINED:
			case DO:
			case ELSE:
			case ELSIF:
			case END:
			case ENSURE:
			case FOR:
			case FALSE:
			case IF:
			case IN:
			case MODULE:
			case NEXT:
			case NIL:
			case NOT:
			case OR:
			case REDO:
			case RESCUE:
			case RETRY:
			case RETURN:
			case SELF:
			case SUPER:
			case THEN:
			case TRUE:
			case UNDEF:
			case UNLESS:
			case UNTIL:
			case WHEN:
			case WHILE:
			case YIELD:
			case LBRACK:
			case AMP:
			case BAR:
			case EQ2:
			case EQ3:
			case CARET:
			case LTEQGT:
			case EQTILDE:
			case GT:
			case GTEQ:
			case LT:
			case LTEQ:
			case LT2:
			case GT2:
			case PLUS:
			case MINUS:
			case STAR:
			case STAR2:
			case SLASH:
			case PERCENT:
			case TILDE:
			case PLUSAT:
			case MINUSAT:
			case LOCAL_VARIABLE_IDENTIFIER:
			case CONSTANT_IDENTIFIER:
				enterOuterAlt(_localctx, 1);
				{
				setState(997);
				methodName();
				}
				break;
			case ASSIGNMENT_LIKE_METHOD_IDENTIFIER:
				enterOuterAlt(_localctx, 2);
				{
				setState(998);
				assignmentLikeMethodIdentifier();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssignmentLikeMethodIdentifierContext extends ParserRuleContext {
		public TerminalNode ASSIGNMENT_LIKE_METHOD_IDENTIFIER() { return getToken(DeprecatedRubyParser.ASSIGNMENT_LIKE_METHOD_IDENTIFIER, 0); }
		public AssignmentLikeMethodIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignmentLikeMethodIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterAssignmentLikeMethodIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitAssignmentLikeMethodIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitAssignmentLikeMethodIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final AssignmentLikeMethodIdentifierContext assignmentLikeMethodIdentifier() throws RecognitionException {
		AssignmentLikeMethodIdentifierContext _localctx = new AssignmentLikeMethodIdentifierContext(_ctx, getState());
		enterRule(_localctx, 94, RULE_assignmentLikeMethodIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1001);
			match(ASSIGNMENT_LIKE_METHOD_IDENTIFIER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodNameContext extends ParserRuleContext {
		public MethodIdentifierContext methodIdentifier() {
			return getRuleContext(MethodIdentifierContext.class,0);
		}
		public OperatorMethodNameContext operatorMethodName() {
			return getRuleContext(OperatorMethodNameContext.class,0);
		}
		public KeywordContext keyword() {
			return getRuleContext(KeywordContext.class,0);
		}
		public MethodNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodNameContext methodName() throws RecognitionException {
		MethodNameContext _localctx = new MethodNameContext(_ctx, getState());
		enterRule(_localctx, 96, RULE_methodName);
		try {
			setState(1006);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,145,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1003);
				methodIdentifier();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1004);
				operatorMethodName();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1005);
				keyword();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodIdentifierContext extends ParserRuleContext {
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public MethodOnlyIdentifierContext methodOnlyIdentifier() {
			return getRuleContext(MethodOnlyIdentifierContext.class,0);
		}
		public MethodIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodIdentifierContext methodIdentifier() throws RecognitionException {
		MethodIdentifierContext _localctx = new MethodIdentifierContext(_ctx, getState());
		enterRule(_localctx, 98, RULE_methodIdentifier);
		try {
			setState(1011);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,146,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1008);
				match(LOCAL_VARIABLE_IDENTIFIER);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1009);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1010);
				methodOnlyIdentifier();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodOnlyIdentifierContext extends ParserRuleContext {
		public TerminalNode EMARK() { return getToken(DeprecatedRubyParser.EMARK, 0); }
		public TerminalNode QMARK() { return getToken(DeprecatedRubyParser.QMARK, 0); }
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public KeywordContext keyword() {
			return getRuleContext(KeywordContext.class,0);
		}
		public MethodOnlyIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodOnlyIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodOnlyIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodOnlyIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodOnlyIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodOnlyIdentifierContext methodOnlyIdentifier() throws RecognitionException {
		MethodOnlyIdentifierContext _localctx = new MethodOnlyIdentifierContext(_ctx, getState());
		enterRule(_localctx, 100, RULE_methodOnlyIdentifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1016);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LOCAL_VARIABLE_IDENTIFIER:
				{
				setState(1013);
				match(LOCAL_VARIABLE_IDENTIFIER);
				}
				break;
			case CONSTANT_IDENTIFIER:
				{
				setState(1014);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			case LINE__:
			case ENCODING__:
			case FILE__:
			case BEGIN_:
			case END_:
			case ALIAS:
			case AND:
			case BEGIN:
			case BREAK:
			case CASE:
			case CLASS:
			case DEF:
			case IS_DEFINED:
			case DO:
			case ELSE:
			case ELSIF:
			case END:
			case ENSURE:
			case FOR:
			case FALSE:
			case IF:
			case IN:
			case MODULE:
			case NEXT:
			case NIL:
			case NOT:
			case OR:
			case REDO:
			case RESCUE:
			case RETRY:
			case RETURN:
			case SELF:
			case SUPER:
			case THEN:
			case TRUE:
			case UNDEF:
			case UNLESS:
			case UNTIL:
			case WHEN:
			case WHILE:
			case YIELD:
				{
				setState(1015);
				keyword();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(1018);
			_la = _input.LA(1);
			if ( !(_la==QMARK || _la==EMARK) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MethodParameterPartContext extends ParserRuleContext {
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ParametersContext parameters() {
			return getRuleContext(ParametersContext.class,0);
		}
		public MethodParameterPartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_methodParameterPart; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMethodParameterPart(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMethodParameterPart(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMethodParameterPart(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MethodParameterPartContext methodParameterPart() throws RecognitionException {
		MethodParameterPartContext _localctx = new MethodParameterPartContext(_ctx, getState());
		enterRule(_localctx, 102, RULE_methodParameterPart);
		int _la;
		try {
			setState(1034);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1020);
				match(LPAREN);
				setState(1022);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
				case 1:
					{
					setState(1021);
					match(NL);
					}
					break;
				}
				setState(1025);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 76)) & ~0x3f) == 0 && ((1L << (_la - 76)) & ((1L << (AMP - 76)) | (1L << (STAR - 76)) | (1L << (STAR2 - 76)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 76)))) != 0)) {
					{
					setState(1024);
					parameters();
					}
				}

				setState(1028);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1027);
					match(NL);
					}
				}

				setState(1030);
				match(RPAREN);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1032);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) {
				case 1:
					{
					setState(1031);
					parameters();
					}
					break;
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ParametersContext extends ParserRuleContext {
		public List parameter() {
			return getRuleContexts(ParameterContext.class);
		}
		public ParameterContext parameter(int i) {
			return getRuleContext(ParameterContext.class,i);
		}
		public List COMMA() { return getTokens(DeprecatedRubyParser.COMMA); }
		public TerminalNode COMMA(int i) {
			return getToken(DeprecatedRubyParser.COMMA, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ParametersContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameters; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterParameters(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitParameters(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitParameters(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParametersContext parameters() throws RecognitionException {
		ParametersContext _localctx = new ParametersContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_parameters);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1036);
			parameter();
			setState(1044);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1037);
				match(COMMA);
				setState(1039);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1038);
					match(NL);
					}
				}

				setState(1041);
				parameter();
				}
				}
				setState(1046);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ParameterContext extends ParserRuleContext {
		public OptionalParameterContext optionalParameter() {
			return getRuleContext(OptionalParameterContext.class,0);
		}
		public MandatoryParameterContext mandatoryParameter() {
			return getRuleContext(MandatoryParameterContext.class,0);
		}
		public ArrayParameterContext arrayParameter() {
			return getRuleContext(ArrayParameterContext.class,0);
		}
		public HashParameterContext hashParameter() {
			return getRuleContext(HashParameterContext.class,0);
		}
		public KeywordParameterContext keywordParameter() {
			return getRuleContext(KeywordParameterContext.class,0);
		}
		public ProcParameterContext procParameter() {
			return getRuleContext(ProcParameterContext.class,0);
		}
		public ParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ParameterContext parameter() throws RecognitionException {
		ParameterContext _localctx = new ParameterContext(_ctx, getState());
		enterRule(_localctx, 106, RULE_parameter);
		try {
			setState(1053);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1047);
				optionalParameter();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1048);
				mandatoryParameter();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1049);
				arrayParameter();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1050);
				hashParameter();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1051);
				keywordParameter();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1052);
				procParameter();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MandatoryParameterContext extends ParserRuleContext {
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public MandatoryParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_mandatoryParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterMandatoryParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitMandatoryParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitMandatoryParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final MandatoryParameterContext mandatoryParameter() throws RecognitionException {
		MandatoryParameterContext _localctx = new MandatoryParameterContext(_ctx, getState());
		enterRule(_localctx, 108, RULE_mandatoryParameter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1055);
			match(LOCAL_VARIABLE_IDENTIFIER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class OptionalParameterContext extends ParserRuleContext {
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode EQ() { return getToken(DeprecatedRubyParser.EQ, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public OptionalParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_optionalParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterOptionalParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitOptionalParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitOptionalParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OptionalParameterContext optionalParameter() throws RecognitionException {
		OptionalParameterContext _localctx = new OptionalParameterContext(_ctx, getState());
		enterRule(_localctx, 110, RULE_optionalParameter);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1057);
			match(LOCAL_VARIABLE_IDENTIFIER);
			setState(1058);
			match(EQ);
			setState(1060);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1059);
				match(NL);
				}
			}

			setState(1062);
			expression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArrayParameterContext extends ParserRuleContext {
		public TerminalNode STAR() { return getToken(DeprecatedRubyParser.STAR, 0); }
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public ArrayParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterArrayParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitArrayParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitArrayParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ArrayParameterContext arrayParameter() throws RecognitionException {
		ArrayParameterContext _localctx = new ArrayParameterContext(_ctx, getState());
		enterRule(_localctx, 112, RULE_arrayParameter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1064);
			match(STAR);
			setState(1066);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,157,_ctx) ) {
			case 1:
				{
				setState(1065);
				match(LOCAL_VARIABLE_IDENTIFIER);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class HashParameterContext extends ParserRuleContext {
		public TerminalNode STAR2() { return getToken(DeprecatedRubyParser.STAR2, 0); }
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public HashParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_hashParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHashParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHashParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHashParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final HashParameterContext hashParameter() throws RecognitionException {
		HashParameterContext _localctx = new HashParameterContext(_ctx, getState());
		enterRule(_localctx, 114, RULE_hashParameter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1068);
			match(STAR2);
			setState(1070);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) {
			case 1:
				{
				setState(1069);
				match(LOCAL_VARIABLE_IDENTIFIER);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class KeywordParameterContext extends ParserRuleContext {
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode COLON() { return getToken(DeprecatedRubyParser.COLON, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public KeywordParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_keywordParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterKeywordParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitKeywordParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitKeywordParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final KeywordParameterContext keywordParameter() throws RecognitionException {
		KeywordParameterContext _localctx = new KeywordParameterContext(_ctx, getState());
		enterRule(_localctx, 116, RULE_keywordParameter);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1072);
			match(LOCAL_VARIABLE_IDENTIFIER);
			setState(1073);
			match(COLON);
			setState(1078);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,160,_ctx) ) {
			case 1:
				{
				setState(1075);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1074);
					match(NL);
					}
				}

				setState(1077);
				expression(0);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ProcParameterContext extends ParserRuleContext {
		public TerminalNode AMP() { return getToken(DeprecatedRubyParser.AMP, 0); }
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public ProcParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_procParameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterProcParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitProcParameter(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitProcParameter(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ProcParameterContext procParameter() throws RecognitionException {
		ProcParameterContext _localctx = new ProcParameterContext(_ctx, getState());
		enterRule(_localctx, 118, RULE_procParameter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1080);
			match(AMP);
			setState(1082);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) {
			case 1:
				{
				setState(1081);
				match(LOCAL_VARIABLE_IDENTIFIER);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IfExpressionContext extends ParserRuleContext {
		public TerminalNode IF() { return getToken(DeprecatedRubyParser.IF, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public ThenClauseContext thenClause() {
			return getRuleContext(ThenClauseContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public List elsifClause() {
			return getRuleContexts(ElsifClauseContext.class);
		}
		public ElsifClauseContext elsifClause(int i) {
			return getRuleContext(ElsifClauseContext.class,i);
		}
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public IfExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ifExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterIfExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitIfExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitIfExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IfExpressionContext ifExpression() throws RecognitionException {
		IfExpressionContext _localctx = new IfExpressionContext(_ctx, getState());
		enterRule(_localctx, 120, RULE_ifExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1084);
			match(IF);
			setState(1086);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1085);
				match(NL);
				}
			}

			setState(1088);
			expressionOrCommand(0);
			setState(1089);
			thenClause();
			setState(1093);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==ELSIF) {
				{
				{
				setState(1090);
				elsifClause();
				}
				}
				setState(1095);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1097);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ELSE) {
				{
				setState(1096);
				elseClause();
				}
			}

			setState(1099);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ThenClauseContext extends ParserRuleContext {
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public TerminalNode THEN() { return getToken(DeprecatedRubyParser.THEN, 0); }
		public ThenClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_thenClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterThenClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitThenClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitThenClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ThenClauseContext thenClause() throws RecognitionException {
		ThenClauseContext _localctx = new ThenClauseContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_thenClause);
		int _la;
		try {
			int _alt;
			setState(1112);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,167,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1102); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(1101);
						_la = _input.LA(1);
						if ( !(_la==SEMI || _la==NL) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(1104); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,165,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(1106);
				compoundStatement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1108);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==SEMI || _la==NL) {
					{
					setState(1107);
					_la = _input.LA(1);
					if ( !(_la==SEMI || _la==NL) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(1110);
				match(THEN);
				setState(1111);
				compoundStatement();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ElsifClauseContext extends ParserRuleContext {
		public TerminalNode ELSIF() { return getToken(DeprecatedRubyParser.ELSIF, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public ThenClauseContext thenClause() {
			return getRuleContext(ThenClauseContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ElsifClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_elsifClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterElsifClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitElsifClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitElsifClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ElsifClauseContext elsifClause() throws RecognitionException {
		ElsifClauseContext _localctx = new ElsifClauseContext(_ctx, getState());
		enterRule(_localctx, 124, RULE_elsifClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1114);
			match(ELSIF);
			setState(1116);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1115);
				match(NL);
				}
			}

			setState(1118);
			expressionOrCommand(0);
			setState(1119);
			thenClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ElseClauseContext extends ParserRuleContext {
		public TerminalNode ELSE() { return getToken(DeprecatedRubyParser.ELSE, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public ElseClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_elseClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterElseClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitElseClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitElseClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ElseClauseContext elseClause() throws RecognitionException {
		ElseClauseContext _localctx = new ElseClauseContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_elseClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1121);
			match(ELSE);
			setState(1122);
			compoundStatement();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UnlessExpressionContext extends ParserRuleContext {
		public TerminalNode UNLESS() { return getToken(DeprecatedRubyParser.UNLESS, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public ThenClauseContext thenClause() {
			return getRuleContext(ThenClauseContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public UnlessExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unlessExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUnlessExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUnlessExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUnlessExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnlessExpressionContext unlessExpression() throws RecognitionException {
		UnlessExpressionContext _localctx = new UnlessExpressionContext(_ctx, getState());
		enterRule(_localctx, 128, RULE_unlessExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1124);
			match(UNLESS);
			setState(1126);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1125);
				match(NL);
				}
			}

			setState(1128);
			expressionOrCommand(0);
			setState(1129);
			thenClause();
			setState(1131);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ELSE) {
				{
				setState(1130);
				elseClause();
				}
			}

			setState(1133);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CaseExpressionContext extends ParserRuleContext {
		public TerminalNode CASE() { return getToken(DeprecatedRubyParser.CASE, 0); }
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public List whenClause() {
			return getRuleContexts(WhenClauseContext.class);
		}
		public WhenClauseContext whenClause(int i) {
			return getRuleContext(WhenClauseContext.class,i);
		}
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public CaseExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_caseExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterCaseExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitCaseExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitCaseExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final CaseExpressionContext caseExpression() throws RecognitionException {
		CaseExpressionContext _localctx = new CaseExpressionContext(_ctx, getState());
		enterRule(_localctx, 130, RULE_caseExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1135);
			match(CASE);
			setState(1137);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,171,_ctx) ) {
			case 1:
				{
				setState(1136);
				match(NL);
				}
				break;
			}
			setState(1140);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,172,_ctx) ) {
			case 1:
				{
				setState(1139);
				expressionOrCommand(0);
				}
				break;
			}
			setState(1145);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==SEMI || _la==NL) {
				{
				{
				setState(1142);
				_la = _input.LA(1);
				if ( !(_la==SEMI || _la==NL) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
				}
				setState(1147);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1149); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				{
				setState(1148);
				whenClause();
				}
				}
				setState(1151); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==WHEN );
			setState(1154);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ELSE) {
				{
				setState(1153);
				elseClause();
				}
			}

			setState(1156);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WhenClauseContext extends ParserRuleContext {
		public TerminalNode WHEN() { return getToken(DeprecatedRubyParser.WHEN, 0); }
		public WhenArgumentContext whenArgument() {
			return getRuleContext(WhenArgumentContext.class,0);
		}
		public ThenClauseContext thenClause() {
			return getRuleContext(ThenClauseContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public WhenClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whenClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterWhenClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitWhenClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitWhenClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhenClauseContext whenClause() throws RecognitionException {
		WhenClauseContext _localctx = new WhenClauseContext(_ctx, getState());
		enterRule(_localctx, 132, RULE_whenClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1158);
			match(WHEN);
			setState(1160);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1159);
				match(NL);
				}
			}

			setState(1162);
			whenArgument();
			setState(1163);
			thenClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WhenArgumentContext extends ParserRuleContext {
		public ExpressionsContext expressions() {
			return getRuleContext(ExpressionsContext.class,0);
		}
		public TerminalNode COMMA() { return getToken(DeprecatedRubyParser.COMMA, 0); }
		public SplattingArgumentContext splattingArgument() {
			return getRuleContext(SplattingArgumentContext.class,0);
		}
		public WhenArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whenArgument; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterWhenArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitWhenArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitWhenArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhenArgumentContext whenArgument() throws RecognitionException {
		WhenArgumentContext _localctx = new WhenArgumentContext(_ctx, getState());
		enterRule(_localctx, 134, RULE_whenArgument);
		int _la;
		try {
			setState(1171);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,178,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1165);
				expressions();
				setState(1168);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1166);
					match(COMMA);
					setState(1167);
					splattingArgument();
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1170);
				splattingArgument();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class WhileExpressionContext extends ParserRuleContext {
		public TerminalNode WHILE() { return getToken(DeprecatedRubyParser.WHILE, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public DoClauseContext doClause() {
			return getRuleContext(DoClauseContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public WhileExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_whileExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterWhileExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitWhileExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitWhileExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final WhileExpressionContext whileExpression() throws RecognitionException {
		WhileExpressionContext _localctx = new WhileExpressionContext(_ctx, getState());
		enterRule(_localctx, 136, RULE_whileExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1173);
			match(WHILE);
			setState(1175);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1174);
				match(NL);
				}
			}

			setState(1177);
			expressionOrCommand(0);
			setState(1178);
			doClause();
			setState(1179);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DoClauseContext extends ParserRuleContext {
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public TerminalNode DO() { return getToken(DeprecatedRubyParser.DO, 0); }
		public DoClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_doClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDoClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDoClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDoClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DoClauseContext doClause() throws RecognitionException {
		DoClauseContext _localctx = new DoClauseContext(_ctx, getState());
		enterRule(_localctx, 138, RULE_doClause);
		int _la;
		try {
			int _alt;
			setState(1189);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case SEMI:
			case NL:
				enterOuterAlt(_localctx, 1);
				{
				setState(1182); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(1181);
						_la = _input.LA(1);
						if ( !(_la==SEMI || _la==NL) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(1184); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,180,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(1186);
				compoundStatement();
				}
				break;
			case DO:
				enterOuterAlt(_localctx, 2);
				{
				setState(1187);
				match(DO);
				setState(1188);
				compoundStatement();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UntilExpressionContext extends ParserRuleContext {
		public TerminalNode UNTIL() { return getToken(DeprecatedRubyParser.UNTIL, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public DoClauseContext doClause() {
			return getRuleContext(DoClauseContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public UntilExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_untilExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUntilExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUntilExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUntilExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UntilExpressionContext untilExpression() throws RecognitionException {
		UntilExpressionContext _localctx = new UntilExpressionContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_untilExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1191);
			match(UNTIL);
			setState(1193);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1192);
				match(NL);
				}
			}

			setState(1195);
			expressionOrCommand(0);
			setState(1196);
			doClause();
			setState(1197);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ForExpressionContext extends ParserRuleContext {
		public TerminalNode FOR() { return getToken(DeprecatedRubyParser.FOR, 0); }
		public ForVariableContext forVariable() {
			return getRuleContext(ForVariableContext.class,0);
		}
		public TerminalNode IN() { return getToken(DeprecatedRubyParser.IN, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public DoClauseContext doClause() {
			return getRuleContext(DoClauseContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public ForExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_forExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterForExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitForExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitForExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ForExpressionContext forExpression() throws RecognitionException {
		ForExpressionContext _localctx = new ForExpressionContext(_ctx, getState());
		enterRule(_localctx, 142, RULE_forExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1199);
			match(FOR);
			setState(1201);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1200);
				match(NL);
				}
			}

			setState(1203);
			forVariable();
			setState(1204);
			match(IN);
			setState(1206);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1205);
				match(NL);
				}
			}

			setState(1208);
			expressionOrCommand(0);
			setState(1209);
			doClause();
			setState(1210);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ForVariableContext extends ParserRuleContext {
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public MultipleLeftHandSideContext multipleLeftHandSide() {
			return getRuleContext(MultipleLeftHandSideContext.class,0);
		}
		public ForVariableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_forVariable; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterForVariable(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitForVariable(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitForVariable(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ForVariableContext forVariable() throws RecognitionException {
		ForVariableContext _localctx = new ForVariableContext(_ctx, getState());
		enterRule(_localctx, 144, RULE_forVariable);
		try {
			setState(1214);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,185,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1212);
				singleLeftHandSide();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1213);
				multipleLeftHandSide();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BeginExpressionContext extends ParserRuleContext {
		public TerminalNode BEGIN() { return getToken(DeprecatedRubyParser.BEGIN, 0); }
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public BeginExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_beginExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBeginExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBeginExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBeginExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BeginExpressionContext beginExpression() throws RecognitionException {
		BeginExpressionContext _localctx = new BeginExpressionContext(_ctx, getState());
		enterRule(_localctx, 146, RULE_beginExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1216);
			match(BEGIN);
			setState(1217);
			bodyStatement();
			setState(1218);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BodyStatementContext extends ParserRuleContext {
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public List rescueClause() {
			return getRuleContexts(RescueClauseContext.class);
		}
		public RescueClauseContext rescueClause(int i) {
			return getRuleContext(RescueClauseContext.class,i);
		}
		public ElseClauseContext elseClause() {
			return getRuleContext(ElseClauseContext.class,0);
		}
		public EnsureClauseContext ensureClause() {
			return getRuleContext(EnsureClauseContext.class,0);
		}
		public BodyStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_bodyStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterBodyStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitBodyStatement(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitBodyStatement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final BodyStatementContext bodyStatement() throws RecognitionException {
		BodyStatementContext _localctx = new BodyStatementContext(_ctx, getState());
		enterRule(_localctx, 148, RULE_bodyStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1220);
			compoundStatement();
			setState(1224);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==RESCUE) {
				{
				{
				setState(1221);
				rescueClause();
				}
				}
				setState(1226);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1228);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ELSE) {
				{
				setState(1227);
				elseClause();
				}
			}

			setState(1231);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==ENSURE) {
				{
				setState(1230);
				ensureClause();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class RescueClauseContext extends ParserRuleContext {
		public TerminalNode RESCUE() { return getToken(DeprecatedRubyParser.RESCUE, 0); }
		public ThenClauseContext thenClause() {
			return getRuleContext(ThenClauseContext.class,0);
		}
		public ExceptionClassContext exceptionClass() {
			return getRuleContext(ExceptionClassContext.class,0);
		}
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ExceptionVariableAssignmentContext exceptionVariableAssignment() {
			return getRuleContext(ExceptionVariableAssignmentContext.class,0);
		}
		public RescueClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rescueClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRescueClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRescueClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRescueClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RescueClauseContext rescueClause() throws RecognitionException {
		RescueClauseContext _localctx = new RescueClauseContext(_ctx, getState());
		enterRule(_localctx, 150, RULE_rescueClause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1233);
			match(RESCUE);
			setState(1235);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,189,_ctx) ) {
			case 1:
				{
				setState(1234);
				exceptionClass();
				}
				break;
			}
			setState(1238);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,190,_ctx) ) {
			case 1:
				{
				setState(1237);
				match(NL);
				}
				break;
			}
			setState(1241);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==EQGT) {
				{
				setState(1240);
				exceptionVariableAssignment();
				}
			}

			setState(1243);
			thenClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExceptionClassContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public MultipleRightHandSideContext multipleRightHandSide() {
			return getRuleContext(MultipleRightHandSideContext.class,0);
		}
		public ExceptionClassContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_exceptionClass; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExceptionClass(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExceptionClass(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExceptionClass(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExceptionClassContext exceptionClass() throws RecognitionException {
		ExceptionClassContext _localctx = new ExceptionClassContext(_ctx, getState());
		enterRule(_localctx, 152, RULE_exceptionClass);
		try {
			setState(1247);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1245);
				expression(0);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1246);
				multipleRightHandSide();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExceptionVariableAssignmentContext extends ParserRuleContext {
		public TerminalNode EQGT() { return getToken(DeprecatedRubyParser.EQGT, 0); }
		public SingleLeftHandSideContext singleLeftHandSide() {
			return getRuleContext(SingleLeftHandSideContext.class,0);
		}
		public ExceptionVariableAssignmentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_exceptionVariableAssignment; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExceptionVariableAssignment(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExceptionVariableAssignment(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExceptionVariableAssignment(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExceptionVariableAssignmentContext exceptionVariableAssignment() throws RecognitionException {
		ExceptionVariableAssignmentContext _localctx = new ExceptionVariableAssignmentContext(_ctx, getState());
		enterRule(_localctx, 154, RULE_exceptionVariableAssignment);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1249);
			match(EQGT);
			setState(1250);
			singleLeftHandSide();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class EnsureClauseContext extends ParserRuleContext {
		public TerminalNode ENSURE() { return getToken(DeprecatedRubyParser.ENSURE, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public EnsureClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ensureClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterEnsureClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitEnsureClause(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitEnsureClause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final EnsureClauseContext ensureClause() throws RecognitionException {
		EnsureClauseContext _localctx = new EnsureClauseContext(_ctx, getState());
		enterRule(_localctx, 156, RULE_ensureClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1252);
			match(ENSURE);
			setState(1253);
			compoundStatement();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ClassDefinitionContext extends ParserRuleContext {
		public TerminalNode CLASS() { return getToken(DeprecatedRubyParser.CLASS, 0); }
		public ClassOrModuleReferenceContext classOrModuleReference() {
			return getRuleContext(ClassOrModuleReferenceContext.class,0);
		}
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public List NL() { return getTokens(DeprecatedRubyParser.NL); }
		public TerminalNode NL(int i) {
			return getToken(DeprecatedRubyParser.NL, i);
		}
		public TerminalNode LT() { return getToken(DeprecatedRubyParser.LT, 0); }
		public ExpressionOrCommandContext expressionOrCommand() {
			return getRuleContext(ExpressionOrCommandContext.class,0);
		}
		public TerminalNode LT2() { return getToken(DeprecatedRubyParser.LT2, 0); }
		public List SEMI() { return getTokens(DeprecatedRubyParser.SEMI); }
		public TerminalNode SEMI(int i) {
			return getToken(DeprecatedRubyParser.SEMI, i);
		}
		public ClassDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_classDefinition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterClassDefinition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitClassDefinition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitClassDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ClassDefinitionContext classDefinition() throws RecognitionException {
		ClassDefinitionContext _localctx = new ClassDefinitionContext(_ctx, getState());
		enterRule(_localctx, 158, RULE_classDefinition);
		int _la;
		try {
			int _alt;
			setState(1287);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,199,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1255);
				match(CLASS);
				setState(1257);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1256);
					match(NL);
					}
				}

				setState(1259);
				classOrModuleReference();
				setState(1265);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LT) {
					{
					setState(1260);
					match(LT);
					setState(1262);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==NL) {
						{
						setState(1261);
						match(NL);
						}
					}

					setState(1264);
					expressionOrCommand(0);
					}
				}

				setState(1267);
				bodyStatement();
				setState(1268);
				match(END);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1270);
				match(CLASS);
				setState(1272);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1271);
					match(NL);
					}
				}

				setState(1274);
				match(LT2);
				setState(1276);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NL) {
					{
					setState(1275);
					match(NL);
					}
				}

				setState(1278);
				expressionOrCommand(0);
				setState(1280); 
				_errHandler.sync(this);
				_alt = 1;
				do {
					switch (_alt) {
					case 1:
						{
						{
						setState(1279);
						_la = _input.LA(1);
						if ( !(_la==SEMI || _la==NL) ) {
						_errHandler.recoverInline(this);
						}
						else {
							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
							_errHandler.reportMatch(this);
							consume();
						}
						}
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					setState(1282); 
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,198,_ctx);
				} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
				setState(1284);
				bodyStatement();
				setState(1285);
				match(END);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ClassOrModuleReferenceContext extends ParserRuleContext {
		public ScopedConstantReferenceContext scopedConstantReference() {
			return getRuleContext(ScopedConstantReferenceContext.class,0);
		}
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public ClassOrModuleReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_classOrModuleReference; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterClassOrModuleReference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitClassOrModuleReference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitClassOrModuleReference(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ClassOrModuleReferenceContext classOrModuleReference() throws RecognitionException {
		ClassOrModuleReferenceContext _localctx = new ClassOrModuleReferenceContext(_ctx, getState());
		enterRule(_localctx, 160, RULE_classOrModuleReference);
		try {
			setState(1291);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,200,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1289);
				scopedConstantReference();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1290);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ModuleDefinitionContext extends ParserRuleContext {
		public TerminalNode MODULE() { return getToken(DeprecatedRubyParser.MODULE, 0); }
		public ClassOrModuleReferenceContext classOrModuleReference() {
			return getRuleContext(ClassOrModuleReferenceContext.class,0);
		}
		public BodyStatementContext bodyStatement() {
			return getRuleContext(BodyStatementContext.class,0);
		}
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode NL() { return getToken(DeprecatedRubyParser.NL, 0); }
		public ModuleDefinitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_moduleDefinition; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterModuleDefinition(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitModuleDefinition(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitModuleDefinition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ModuleDefinitionContext moduleDefinition() throws RecognitionException {
		ModuleDefinitionContext _localctx = new ModuleDefinitionContext(_ctx, getState());
		enterRule(_localctx, 162, RULE_moduleDefinition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1293);
			match(MODULE);
			setState(1295);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==NL) {
				{
				setState(1294);
				match(NL);
				}
			}

			setState(1297);
			classOrModuleReference();
			setState(1298);
			bodyStatement();
			setState(1299);
			match(END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class YieldWithOptionalArgumentContext extends ParserRuleContext {
		public TerminalNode YIELD() { return getToken(DeprecatedRubyParser.YIELD, 0); }
		public TerminalNode LPAREN() { return getToken(DeprecatedRubyParser.LPAREN, 0); }
		public TerminalNode RPAREN() { return getToken(DeprecatedRubyParser.RPAREN, 0); }
		public ArgumentsContext arguments() {
			return getRuleContext(ArgumentsContext.class,0);
		}
		public YieldWithOptionalArgumentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_yieldWithOptionalArgument; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterYieldWithOptionalArgument(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitYieldWithOptionalArgument(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitYieldWithOptionalArgument(this);
			else return visitor.visitChildren(this);
		}
	}

	public final YieldWithOptionalArgumentContext yieldWithOptionalArgument() throws RecognitionException {
		YieldWithOptionalArgumentContext _localctx = new YieldWithOptionalArgumentContext(_ctx, getState());
		enterRule(_localctx, 164, RULE_yieldWithOptionalArgument);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1301);
			match(YIELD);
			setState(1307);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) {
			case 1:
				{
				setState(1302);
				match(LPAREN);
				setState(1304);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (REGULAR_EXPRESSION_START - 3)) | (1L << (LINE__ - 3)) | (1L << (ENCODING__ - 3)) | (1L << (FILE__ - 3)) | (1L << (BEGIN_ - 3)) | (1L << (END_ - 3)) | (1L << (ALIAS - 3)) | (1L << (AND - 3)) | (1L << (BEGIN - 3)) | (1L << (BREAK - 3)) | (1L << (CASE - 3)) | (1L << (CLASS - 3)) | (1L << (DEF - 3)) | (1L << (IS_DEFINED - 3)) | (1L << (DO - 3)) | (1L << (ELSE - 3)) | (1L << (ELSIF - 3)) | (1L << (END - 3)) | (1L << (ENSURE - 3)) | (1L << (FOR - 3)) | (1L << (FALSE - 3)) | (1L << (IF - 3)) | (1L << (IN - 3)) | (1L << (MODULE - 3)) | (1L << (NEXT - 3)) | (1L << (NIL - 3)) | (1L << (NOT - 3)) | (1L << (OR - 3)) | (1L << (REDO - 3)) | (1L << (RESCUE - 3)) | (1L << (RETRY - 3)) | (1L << (RETURN - 3)) | (1L << (SELF - 3)) | (1L << (SUPER - 3)) | (1L << (THEN - 3)) | (1L << (TRUE - 3)) | (1L << (UNDEF - 3)) | (1L << (UNLESS - 3)) | (1L << (UNTIL - 3)) | (1L << (WHEN - 3)) | (1L << (WHILE - 3)) | (1L << (YIELD - 3)) | (1L << (LBRACK - 3)) | (1L << (LPAREN - 3)) | (1L << (LCURLY - 3)) | (1L << (COLON - 3)) | (1L << (COLON2 - 3)))) != 0) || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (MINUSGT - 72)) | (1L << (EMARK - 72)) | (1L << (AMP - 72)) | (1L << (PLUS - 72)) | (1L << (MINUS - 72)) | (1L << (STAR - 72)) | (1L << (STAR2 - 72)) | (1L << (TILDE - 72)) | (1L << (SINGLE_QUOTED_STRING_LITERAL - 72)) | (1L << (DOUBLE_QUOTED_STRING_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_REGULAR_EXPRESSION_START - 72)) | (1L << (QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START - 72)) | (1L << (QUOTED_NON_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_STRING_ARRAY_LITERAL_START - 72)) | (1L << (HERE_DOC_IDENTIFIER - 72)) | (1L << (HERE_DOC - 72)) | (1L << (QUOTED_NON_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (QUOTED_EXPANDED_SYMBOL_ARRAY_LITERAL_START - 72)) | (1L << (DECIMAL_INTEGER_LITERAL - 72)) | (1L << (BINARY_INTEGER_LITERAL - 72)) | (1L << (OCTAL_INTEGER_LITERAL - 72)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 72)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 72)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 72)) | (1L << (SYMBOL_LITERAL - 72)) | (1L << (LOCAL_VARIABLE_IDENTIFIER - 72)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 72)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 72)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 72)) | (1L << (CONSTANT_IDENTIFIER - 72)))) != 0)) {
					{
					setState(1303);
					arguments();
					}
				}

				setState(1306);
				match(RPAREN);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class JumpExpressionContext extends ParserRuleContext {
		public TerminalNode BREAK() { return getToken(DeprecatedRubyParser.BREAK, 0); }
		public TerminalNode NEXT() { return getToken(DeprecatedRubyParser.NEXT, 0); }
		public TerminalNode REDO() { return getToken(DeprecatedRubyParser.REDO, 0); }
		public TerminalNode RETRY() { return getToken(DeprecatedRubyParser.RETRY, 0); }
		public JumpExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_jumpExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterJumpExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitJumpExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitJumpExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final JumpExpressionContext jumpExpression() throws RecognitionException {
		JumpExpressionContext _localctx = new JumpExpressionContext(_ctx, getState());
		enterRule(_localctx, 166, RULE_jumpExpression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1309);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BREAK) | (1L << NEXT) | (1L << REDO) | (1L << RETRY))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class VariableReferenceContext extends ParserRuleContext {
		public VariableReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_variableReference; }
	 
		public VariableReferenceContext() { }
		public void copyFrom(VariableReferenceContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class PseudoVariableIdentifierVariableReferenceContext extends VariableReferenceContext {
		public PseudoVariableIdentifierContext pseudoVariableIdentifier() {
			return getRuleContext(PseudoVariableIdentifierContext.class,0);
		}
		public PseudoVariableIdentifierVariableReferenceContext(VariableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterPseudoVariableIdentifierVariableReference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitPseudoVariableIdentifierVariableReference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitPseudoVariableIdentifierVariableReference(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class VariableIdentifierVariableReferenceContext extends VariableReferenceContext {
		public VariableIdentifierContext variableIdentifier() {
			return getRuleContext(VariableIdentifierContext.class,0);
		}
		public VariableIdentifierVariableReferenceContext(VariableReferenceContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterVariableIdentifierVariableReference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitVariableIdentifierVariableReference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitVariableIdentifierVariableReference(this);
			else return visitor.visitChildren(this);
		}
	}

	public final VariableReferenceContext variableReference() throws RecognitionException {
		VariableReferenceContext _localctx = new VariableReferenceContext(_ctx, getState());
		enterRule(_localctx, 168, RULE_variableReference);
		try {
			setState(1313);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LOCAL_VARIABLE_IDENTIFIER:
			case GLOBAL_VARIABLE_IDENTIFIER:
			case INSTANCE_VARIABLE_IDENTIFIER:
			case CLASS_VARIABLE_IDENTIFIER:
			case CONSTANT_IDENTIFIER:
				_localctx = new VariableIdentifierVariableReferenceContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1311);
				variableIdentifier();
				}
				break;
			case LINE__:
			case ENCODING__:
			case FILE__:
			case FALSE:
			case NIL:
			case SELF:
			case TRUE:
				_localctx = new PseudoVariableIdentifierVariableReferenceContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1312);
				pseudoVariableIdentifier();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class VariableIdentifierContext extends ParserRuleContext {
		public TerminalNode LOCAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.LOCAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode GLOBAL_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.GLOBAL_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode INSTANCE_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.INSTANCE_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode CLASS_VARIABLE_IDENTIFIER() { return getToken(DeprecatedRubyParser.CLASS_VARIABLE_IDENTIFIER, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public VariableIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_variableIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final VariableIdentifierContext variableIdentifier() throws RecognitionException {
		VariableIdentifierContext _localctx = new VariableIdentifierContext(_ctx, getState());
		enterRule(_localctx, 170, RULE_variableIdentifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1315);
			_la = _input.LA(1);
			if ( !(((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (LOCAL_VARIABLE_IDENTIFIER - 125)) | (1L << (GLOBAL_VARIABLE_IDENTIFIER - 125)) | (1L << (INSTANCE_VARIABLE_IDENTIFIER - 125)) | (1L << (CLASS_VARIABLE_IDENTIFIER - 125)) | (1L << (CONSTANT_IDENTIFIER - 125)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PseudoVariableIdentifierContext extends ParserRuleContext {
		public PseudoVariableIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_pseudoVariableIdentifier; }
	 
		public PseudoVariableIdentifierContext() { }
		public void copyFrom(PseudoVariableIdentifierContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class TruePseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode TRUE() { return getToken(DeprecatedRubyParser.TRUE, 0); }
		public TruePseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterTruePseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitTruePseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitTruePseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class EncodingPseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode ENCODING__() { return getToken(DeprecatedRubyParser.ENCODING__, 0); }
		public EncodingPseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterEncodingPseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitEncodingPseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitEncodingPseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class LinePseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode LINE__() { return getToken(DeprecatedRubyParser.LINE__, 0); }
		public LinePseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterLinePseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitLinePseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitLinePseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FilePseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode FILE__() { return getToken(DeprecatedRubyParser.FILE__, 0); }
		public FilePseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterFilePseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitFilePseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitFilePseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class FalsePseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode FALSE() { return getToken(DeprecatedRubyParser.FALSE, 0); }
		public FalsePseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterFalsePseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitFalsePseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitFalsePseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SelfPseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode SELF() { return getToken(DeprecatedRubyParser.SELF, 0); }
		public SelfPseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSelfPseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSelfPseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSelfPseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NilPseudoVariableIdentifierContext extends PseudoVariableIdentifierContext {
		public TerminalNode NIL() { return getToken(DeprecatedRubyParser.NIL, 0); }
		public NilPseudoVariableIdentifierContext(PseudoVariableIdentifierContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNilPseudoVariableIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNilPseudoVariableIdentifier(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNilPseudoVariableIdentifier(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PseudoVariableIdentifierContext pseudoVariableIdentifier() throws RecognitionException {
		PseudoVariableIdentifierContext _localctx = new PseudoVariableIdentifierContext(_ctx, getState());
		enterRule(_localctx, 172, RULE_pseudoVariableIdentifier);
		try {
			setState(1324);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case NIL:
				_localctx = new NilPseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1317);
				match(NIL);
				}
				break;
			case TRUE:
				_localctx = new TruePseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1318);
				match(TRUE);
				}
				break;
			case FALSE:
				_localctx = new FalsePseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1319);
				match(FALSE);
				}
				break;
			case SELF:
				_localctx = new SelfPseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1320);
				match(SELF);
				}
				break;
			case FILE__:
				_localctx = new FilePseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 5);
				{
				setState(1321);
				match(FILE__);
				}
				break;
			case LINE__:
				_localctx = new LinePseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 6);
				{
				setState(1322);
				match(LINE__);
				}
				break;
			case ENCODING__:
				_localctx = new EncodingPseudoVariableIdentifierContext(_localctx);
				enterOuterAlt(_localctx, 7);
				{
				setState(1323);
				match(ENCODING__);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ScopedConstantReferenceContext extends ParserRuleContext {
		public TerminalNode COLON2() { return getToken(DeprecatedRubyParser.COLON2, 0); }
		public TerminalNode CONSTANT_IDENTIFIER() { return getToken(DeprecatedRubyParser.CONSTANT_IDENTIFIER, 0); }
		public PrimaryContext primary() {
			return getRuleContext(PrimaryContext.class,0);
		}
		public ScopedConstantReferenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_scopedConstantReference; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterScopedConstantReference(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitScopedConstantReference(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitScopedConstantReference(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ScopedConstantReferenceContext scopedConstantReference() throws RecognitionException {
		ScopedConstantReferenceContext _localctx = new ScopedConstantReferenceContext(_ctx, getState());
		enterRule(_localctx, 174, RULE_scopedConstantReference);
		try {
			setState(1332);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,206,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1326);
				match(COLON2);
				setState(1327);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1328);
				primary(0);
				setState(1329);
				match(COLON2);
				setState(1330);
				match(CONSTANT_IDENTIFIER);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class LiteralContext extends ParserRuleContext {
		public LiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_literal; }
	 
		public LiteralContext() { }
		public void copyFrom(LiteralContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SymbolLiteralContext extends LiteralContext {
		public SymbolContext symbol() {
			return getRuleContext(SymbolContext.class,0);
		}
		public SymbolLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSymbolLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSymbolLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSymbolLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class RegularExpressionLiteralContext extends LiteralContext {
		public TerminalNode REGULAR_EXPRESSION_START() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_START, 0); }
		public TerminalNode REGULAR_EXPRESSION_END() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_END, 0); }
		public TerminalNode REGULAR_EXPRESSION_BODY() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_BODY, 0); }
		public RegularExpressionLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRegularExpressionLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRegularExpressionLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRegularExpressionLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class HereDocLiteralContext extends LiteralContext {
		public TerminalNode HERE_DOC() { return getToken(DeprecatedRubyParser.HERE_DOC, 0); }
		public HereDocLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterHereDocLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitHereDocLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitHereDocLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NumericLiteralLiteralContext extends LiteralContext {
		public NumericLiteralContext numericLiteral() {
			return getRuleContext(NumericLiteralContext.class,0);
		}
		public NumericLiteralLiteralContext(LiteralContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNumericLiteralLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNumericLiteralLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNumericLiteralLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final LiteralContext literal() throws RecognitionException {
		LiteralContext _localctx = new LiteralContext(_ctx, getState());
		enterRule(_localctx, 176, RULE_literal);
		int _la;
		try {
			setState(1342);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case HERE_DOC:
				_localctx = new HereDocLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1334);
				match(HERE_DOC);
				}
				break;
			case PLUS:
			case MINUS:
			case DECIMAL_INTEGER_LITERAL:
			case BINARY_INTEGER_LITERAL:
			case OCTAL_INTEGER_LITERAL:
			case HEXADECIMAL_INTEGER_LITERAL:
			case FLOAT_LITERAL_WITHOUT_EXPONENT:
			case FLOAT_LITERAL_WITH_EXPONENT:
				_localctx = new NumericLiteralLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1335);
				numericLiteral();
				}
				break;
			case COLON:
			case SYMBOL_LITERAL:
				_localctx = new SymbolLiteralContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1336);
				symbol();
				}
				break;
			case REGULAR_EXPRESSION_START:
				_localctx = new RegularExpressionLiteralContext(_localctx);
				enterOuterAlt(_localctx, 4);
				{
				setState(1337);
				match(REGULAR_EXPRESSION_START);
				setState(1339);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==REGULAR_EXPRESSION_BODY) {
					{
					setState(1338);
					match(REGULAR_EXPRESSION_BODY);
					}
				}

				setState(1341);
				match(REGULAR_EXPRESSION_END);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SymbolContext extends ParserRuleContext {
		public TerminalNode SYMBOL_LITERAL() { return getToken(DeprecatedRubyParser.SYMBOL_LITERAL, 0); }
		public TerminalNode COLON() { return getToken(DeprecatedRubyParser.COLON, 0); }
		public StringExpressionContext stringExpression() {
			return getRuleContext(StringExpressionContext.class,0);
		}
		public SymbolContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_symbol; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSymbol(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSymbol(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSymbol(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SymbolContext symbol() throws RecognitionException {
		SymbolContext _localctx = new SymbolContext(_ctx, getState());
		enterRule(_localctx, 178, RULE_symbol);
		try {
			setState(1347);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case SYMBOL_LITERAL:
				enterOuterAlt(_localctx, 1);
				{
				setState(1344);
				match(SYMBOL_LITERAL);
				}
				break;
			case COLON:
				enterOuterAlt(_localctx, 2);
				{
				setState(1345);
				match(COLON);
				setState(1346);
				stringExpression(0);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StringExpressionContext extends ParserRuleContext {
		public StringExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_stringExpression; }
	 
		public StringExpressionContext() { }
		public void copyFrom(StringExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class InterpolatedStringExpressionContext extends StringExpressionContext {
		public StringInterpolationContext stringInterpolation() {
			return getRuleContext(StringInterpolationContext.class,0);
		}
		public InterpolatedStringExpressionContext(StringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInterpolatedStringExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInterpolatedStringExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInterpolatedStringExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class SimpleStringExpressionContext extends StringExpressionContext {
		public SimpleStringContext simpleString() {
			return getRuleContext(SimpleStringContext.class,0);
		}
		public SimpleStringExpressionContext(StringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSimpleStringExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSimpleStringExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSimpleStringExpression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ConcatenatedStringExpressionContext extends StringExpressionContext {
		public List stringExpression() {
			return getRuleContexts(StringExpressionContext.class);
		}
		public StringExpressionContext stringExpression(int i) {
			return getRuleContext(StringExpressionContext.class,i);
		}
		public ConcatenatedStringExpressionContext(StringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterConcatenatedStringExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitConcatenatedStringExpression(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitConcatenatedStringExpression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StringExpressionContext stringExpression() throws RecognitionException {
		return stringExpression(0);
	}

	private StringExpressionContext stringExpression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		StringExpressionContext _localctx = new StringExpressionContext(_ctx, _parentState);
		StringExpressionContext _prevctx = _localctx;
		int _startState = 180;
		enterRecursionRule(_localctx, 180, RULE_stringExpression, _p);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1352);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,210,_ctx) ) {
			case 1:
				{
				_localctx = new SimpleStringExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(1350);
				simpleString();
				}
				break;
			case 2:
				{
				_localctx = new InterpolatedStringExpressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(1351);
				stringInterpolation();
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(1362);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,212,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new ConcatenatedStringExpressionContext(new StringExpressionContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_stringExpression);
					setState(1354);
					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
					setState(1356); 
					_errHandler.sync(this);
					_alt = 1;
					do {
						switch (_alt) {
						case 1:
							{
							{
							setState(1355);
							stringExpression(0);
							}
							}
							break;
						default:
							throw new NoViableAltException(this);
						}
						setState(1358); 
						_errHandler.sync(this);
						_alt = getInterpreter().adaptivePredict(_input,211,_ctx);
					} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
					}
					} 
				}
				setState(1364);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,212,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class QuotedStringExpressionContext extends ParserRuleContext {
		public QuotedStringExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_quotedStringExpression; }
	 
		public QuotedStringExpressionContext() { }
		public void copyFrom(QuotedStringExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class ExpandedExternalCommandLiteralContext extends QuotedStringExpressionContext {
		public TerminalNode QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START, 0); }
		public TerminalNode QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_END, 0); }
		public List EXPANDED_LITERAL_CHARACTER_SEQUENCE() { return getTokens(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE); }
		public TerminalNode EXPANDED_LITERAL_CHARACTER_SEQUENCE(int i) {
			return getToken(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE, i);
		}
		public List delimitedStringInterpolation() {
			return getRuleContexts(DelimitedStringInterpolationContext.class);
		}
		public DelimitedStringInterpolationContext delimitedStringInterpolation(int i) {
			return getRuleContext(DelimitedStringInterpolationContext.class,i);
		}
		public ExpandedExternalCommandLiteralContext(QuotedStringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedExternalCommandLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedExternalCommandLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedExternalCommandLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class NonExpandedQuotedStringLiteralContext extends QuotedStringExpressionContext {
		public TerminalNode QUOTED_NON_EXPANDED_STRING_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_STRING_LITERAL_START, 0); }
		public TerminalNode QUOTED_NON_EXPANDED_STRING_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_NON_EXPANDED_STRING_LITERAL_END, 0); }
		public TerminalNode NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE() { return getToken(DeprecatedRubyParser.NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE, 0); }
		public NonExpandedQuotedStringLiteralContext(QuotedStringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNonExpandedQuotedStringLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNonExpandedQuotedStringLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNonExpandedQuotedStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class ExpandedQuotedStringLiteralContext extends QuotedStringExpressionContext {
		public TerminalNode QUOTED_EXPANDED_STRING_LITERAL_START() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_STRING_LITERAL_START, 0); }
		public TerminalNode QUOTED_EXPANDED_STRING_LITERAL_END() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_STRING_LITERAL_END, 0); }
		public List EXPANDED_LITERAL_CHARACTER_SEQUENCE() { return getTokens(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE); }
		public TerminalNode EXPANDED_LITERAL_CHARACTER_SEQUENCE(int i) {
			return getToken(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE, i);
		}
		public List delimitedStringInterpolation() {
			return getRuleContexts(DelimitedStringInterpolationContext.class);
		}
		public DelimitedStringInterpolationContext delimitedStringInterpolation(int i) {
			return getRuleContext(DelimitedStringInterpolationContext.class,i);
		}
		public ExpandedQuotedStringLiteralContext(QuotedStringExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterExpandedQuotedStringLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitExpandedQuotedStringLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitExpandedQuotedStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuotedStringExpressionContext quotedStringExpression() throws RecognitionException {
		QuotedStringExpressionContext _localctx = new QuotedStringExpressionContext(_ctx, getState());
		enterRule(_localctx, 182, RULE_quotedStringExpression);
		int _la;
		try {
			setState(1388);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case QUOTED_NON_EXPANDED_STRING_LITERAL_START:
				_localctx = new NonExpandedQuotedStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1365);
				match(QUOTED_NON_EXPANDED_STRING_LITERAL_START);
				setState(1367);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE) {
					{
					setState(1366);
					match(NON_EXPANDED_LITERAL_CHARACTER_SEQUENCE);
					}
				}

				setState(1369);
				match(QUOTED_NON_EXPANDED_STRING_LITERAL_END);
				}
				break;
			case QUOTED_EXPANDED_STRING_LITERAL_START:
				_localctx = new ExpandedQuotedStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1370);
				match(QUOTED_EXPANDED_STRING_LITERAL_START);
				setState(1375);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==EXPANDED_LITERAL_CHARACTER_SEQUENCE || _la==DELIMITED_STRING_INTERPOLATION_BEGIN) {
					{
					setState(1373);
					_errHandler.sync(this);
					switch (_input.LA(1)) {
					case EXPANDED_LITERAL_CHARACTER_SEQUENCE:
						{
						setState(1371);
						match(EXPANDED_LITERAL_CHARACTER_SEQUENCE);
						}
						break;
					case DELIMITED_STRING_INTERPOLATION_BEGIN:
						{
						setState(1372);
						delimitedStringInterpolation();
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					}
					setState(1377);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1378);
				match(QUOTED_EXPANDED_STRING_LITERAL_END);
				}
				break;
			case QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START:
				_localctx = new ExpandedExternalCommandLiteralContext(_localctx);
				enterOuterAlt(_localctx, 3);
				{
				setState(1379);
				match(QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_START);
				setState(1384);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==EXPANDED_LITERAL_CHARACTER_SEQUENCE || _la==DELIMITED_STRING_INTERPOLATION_BEGIN) {
					{
					setState(1382);
					_errHandler.sync(this);
					switch (_input.LA(1)) {
					case EXPANDED_LITERAL_CHARACTER_SEQUENCE:
						{
						setState(1380);
						match(EXPANDED_LITERAL_CHARACTER_SEQUENCE);
						}
						break;
					case DELIMITED_STRING_INTERPOLATION_BEGIN:
						{
						setState(1381);
						delimitedStringInterpolation();
						}
						break;
					default:
						throw new NoViableAltException(this);
					}
					}
					setState(1386);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1387);
				match(QUOTED_EXPANDED_EXTERNAL_COMMAND_LITERAL_END);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SimpleStringContext extends ParserRuleContext {
		public SimpleStringContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simpleString; }
	 
		public SimpleStringContext() { }
		public void copyFrom(SimpleStringContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class SingleQuotedStringLiteralContext extends SimpleStringContext {
		public TerminalNode SINGLE_QUOTED_STRING_LITERAL() { return getToken(DeprecatedRubyParser.SINGLE_QUOTED_STRING_LITERAL, 0); }
		public SingleQuotedStringLiteralContext(SimpleStringContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterSingleQuotedStringLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitSingleQuotedStringLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitSingleQuotedStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class DoubleQuotedStringLiteralContext extends SimpleStringContext {
		public TerminalNode DOUBLE_QUOTED_STRING_START() { return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_START, 0); }
		public TerminalNode DOUBLE_QUOTED_STRING_END() { return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_END, 0); }
		public TerminalNode DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE() { return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE, 0); }
		public DoubleQuotedStringLiteralContext(SimpleStringContext ctx) { copyFrom(ctx); }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDoubleQuotedStringLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDoubleQuotedStringLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDoubleQuotedStringLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SimpleStringContext simpleString() throws RecognitionException {
		SimpleStringContext _localctx = new SimpleStringContext(_ctx, getState());
		enterRule(_localctx, 184, RULE_simpleString);
		int _la;
		try {
			setState(1396);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case SINGLE_QUOTED_STRING_LITERAL:
				_localctx = new SingleQuotedStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1390);
				match(SINGLE_QUOTED_STRING_LITERAL);
				}
				break;
			case DOUBLE_QUOTED_STRING_START:
				_localctx = new DoubleQuotedStringLiteralContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1391);
				match(DOUBLE_QUOTED_STRING_START);
				setState(1393);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE) {
					{
					setState(1392);
					match(DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE);
					}
				}

				setState(1395);
				match(DOUBLE_QUOTED_STRING_END);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DelimitedStringInterpolationContext extends ParserRuleContext {
		public TerminalNode DELIMITED_STRING_INTERPOLATION_BEGIN() { return getToken(DeprecatedRubyParser.DELIMITED_STRING_INTERPOLATION_BEGIN, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode DELIMITED_STRING_INTERPOLATION_END() { return getToken(DeprecatedRubyParser.DELIMITED_STRING_INTERPOLATION_END, 0); }
		public DelimitedStringInterpolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_delimitedStringInterpolation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDelimitedStringInterpolation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDelimitedStringInterpolation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDelimitedStringInterpolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DelimitedStringInterpolationContext delimitedStringInterpolation() throws RecognitionException {
		DelimitedStringInterpolationContext _localctx = new DelimitedStringInterpolationContext(_ctx, getState());
		enterRule(_localctx, 186, RULE_delimitedStringInterpolation);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1398);
			match(DELIMITED_STRING_INTERPOLATION_BEGIN);
			setState(1399);
			compoundStatement();
			setState(1400);
			match(DELIMITED_STRING_INTERPOLATION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class StringInterpolationContext extends ParserRuleContext {
		public TerminalNode DOUBLE_QUOTED_STRING_START() { return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_START, 0); }
		public TerminalNode DOUBLE_QUOTED_STRING_END() { return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_END, 0); }
		public List DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE() { return getTokens(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE); }
		public TerminalNode DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE(int i) {
			return getToken(DeprecatedRubyParser.DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE, i);
		}
		public List interpolatedStringSequence() {
			return getRuleContexts(InterpolatedStringSequenceContext.class);
		}
		public InterpolatedStringSequenceContext interpolatedStringSequence(int i) {
			return getRuleContext(InterpolatedStringSequenceContext.class,i);
		}
		public StringInterpolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_stringInterpolation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterStringInterpolation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitStringInterpolation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitStringInterpolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final StringInterpolationContext stringInterpolation() throws RecognitionException {
		StringInterpolationContext _localctx = new StringInterpolationContext(_ctx, getState());
		enterRule(_localctx, 188, RULE_stringInterpolation);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1402);
			match(DOUBLE_QUOTED_STRING_START);
			setState(1405); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				setState(1405);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE:
					{
					setState(1403);
					match(DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE);
					}
					break;
				case STRING_INTERPOLATION_BEGIN:
					{
					setState(1404);
					interpolatedStringSequence();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(1407); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==DOUBLE_QUOTED_STRING_CHARACTER_SEQUENCE || _la==STRING_INTERPOLATION_BEGIN );
			setState(1409);
			match(DOUBLE_QUOTED_STRING_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InterpolatedStringSequenceContext extends ParserRuleContext {
		public TerminalNode STRING_INTERPOLATION_BEGIN() { return getToken(DeprecatedRubyParser.STRING_INTERPOLATION_BEGIN, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode STRING_INTERPOLATION_END() { return getToken(DeprecatedRubyParser.STRING_INTERPOLATION_END, 0); }
		public InterpolatedStringSequenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_interpolatedStringSequence; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInterpolatedStringSequence(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInterpolatedStringSequence(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInterpolatedStringSequence(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InterpolatedStringSequenceContext interpolatedStringSequence() throws RecognitionException {
		InterpolatedStringSequenceContext _localctx = new InterpolatedStringSequenceContext(_ctx, getState());
		enterRule(_localctx, 190, RULE_interpolatedStringSequence);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1411);
			match(STRING_INTERPOLATION_BEGIN);
			setState(1412);
			compoundStatement();
			setState(1413);
			match(STRING_INTERPOLATION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class RegexInterpolationContext extends ParserRuleContext {
		public TerminalNode REGULAR_EXPRESSION_START() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_START, 0); }
		public TerminalNode REGULAR_EXPRESSION_END() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_END, 0); }
		public List REGULAR_EXPRESSION_BODY() { return getTokens(DeprecatedRubyParser.REGULAR_EXPRESSION_BODY); }
		public TerminalNode REGULAR_EXPRESSION_BODY(int i) {
			return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_BODY, i);
		}
		public List interpolatedRegexSequence() {
			return getRuleContexts(InterpolatedRegexSequenceContext.class);
		}
		public InterpolatedRegexSequenceContext interpolatedRegexSequence(int i) {
			return getRuleContext(InterpolatedRegexSequenceContext.class,i);
		}
		public RegexInterpolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_regexInterpolation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterRegexInterpolation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitRegexInterpolation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitRegexInterpolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final RegexInterpolationContext regexInterpolation() throws RecognitionException {
		RegexInterpolationContext _localctx = new RegexInterpolationContext(_ctx, getState());
		enterRule(_localctx, 192, RULE_regexInterpolation);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1415);
			match(REGULAR_EXPRESSION_START);
			setState(1418); 
			_errHandler.sync(this);
			_la = _input.LA(1);
			do {
				{
				setState(1418);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case REGULAR_EXPRESSION_BODY:
					{
					setState(1416);
					match(REGULAR_EXPRESSION_BODY);
					}
					break;
				case REGULAR_EXPRESSION_INTERPOLATION_BEGIN:
					{
					setState(1417);
					interpolatedRegexSequence();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(1420); 
				_errHandler.sync(this);
				_la = _input.LA(1);
			} while ( _la==REGULAR_EXPRESSION_BODY || _la==REGULAR_EXPRESSION_INTERPOLATION_BEGIN );
			setState(1422);
			match(REGULAR_EXPRESSION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InterpolatedRegexSequenceContext extends ParserRuleContext {
		public TerminalNode REGULAR_EXPRESSION_INTERPOLATION_BEGIN() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_INTERPOLATION_BEGIN, 0); }
		public CompoundStatementContext compoundStatement() {
			return getRuleContext(CompoundStatementContext.class,0);
		}
		public TerminalNode REGULAR_EXPRESSION_INTERPOLATION_END() { return getToken(DeprecatedRubyParser.REGULAR_EXPRESSION_INTERPOLATION_END, 0); }
		public InterpolatedRegexSequenceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_interpolatedRegexSequence; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterInterpolatedRegexSequence(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitInterpolatedRegexSequence(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitInterpolatedRegexSequence(this);
			else return visitor.visitChildren(this);
		}
	}

	public final InterpolatedRegexSequenceContext interpolatedRegexSequence() throws RecognitionException {
		InterpolatedRegexSequenceContext _localctx = new InterpolatedRegexSequenceContext(_ctx, getState());
		enterRule(_localctx, 194, RULE_interpolatedRegexSequence);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1424);
			match(REGULAR_EXPRESSION_INTERPOLATION_BEGIN);
			setState(1425);
			compoundStatement();
			setState(1426);
			match(REGULAR_EXPRESSION_INTERPOLATION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class QuotedRegexInterpolationContext extends ParserRuleContext {
		public TerminalNode QUOTED_EXPANDED_REGULAR_EXPRESSION_START() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_REGULAR_EXPRESSION_START, 0); }
		public TerminalNode QUOTED_EXPANDED_REGULAR_EXPRESSION_END() { return getToken(DeprecatedRubyParser.QUOTED_EXPANDED_REGULAR_EXPRESSION_END, 0); }
		public List EXPANDED_LITERAL_CHARACTER_SEQUENCE() { return getTokens(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE); }
		public TerminalNode EXPANDED_LITERAL_CHARACTER_SEQUENCE(int i) {
			return getToken(DeprecatedRubyParser.EXPANDED_LITERAL_CHARACTER_SEQUENCE, i);
		}
		public List delimitedStringInterpolation() {
			return getRuleContexts(DelimitedStringInterpolationContext.class);
		}
		public DelimitedStringInterpolationContext delimitedStringInterpolation(int i) {
			return getRuleContext(DelimitedStringInterpolationContext.class,i);
		}
		public QuotedRegexInterpolationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_quotedRegexInterpolation; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterQuotedRegexInterpolation(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitQuotedRegexInterpolation(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitQuotedRegexInterpolation(this);
			else return visitor.visitChildren(this);
		}
	}

	public final QuotedRegexInterpolationContext quotedRegexInterpolation() throws RecognitionException {
		QuotedRegexInterpolationContext _localctx = new QuotedRegexInterpolationContext(_ctx, getState());
		enterRule(_localctx, 196, RULE_quotedRegexInterpolation);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1428);
			match(QUOTED_EXPANDED_REGULAR_EXPRESSION_START);
			setState(1433);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==EXPANDED_LITERAL_CHARACTER_SEQUENCE || _la==DELIMITED_STRING_INTERPOLATION_BEGIN) {
				{
				setState(1431);
				_errHandler.sync(this);
				switch (_input.LA(1)) {
				case EXPANDED_LITERAL_CHARACTER_SEQUENCE:
					{
					setState(1429);
					match(EXPANDED_LITERAL_CHARACTER_SEQUENCE);
					}
					break;
				case DELIMITED_STRING_INTERPOLATION_BEGIN:
					{
					setState(1430);
					delimitedStringInterpolation();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				setState(1435);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1436);
			match(QUOTED_EXPANDED_REGULAR_EXPRESSION_END);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NumericLiteralContext extends ParserRuleContext {
		public UnsignedNumericLiteralContext unsignedNumericLiteral() {
			return getRuleContext(UnsignedNumericLiteralContext.class,0);
		}
		public TerminalNode PLUS() { return getToken(DeprecatedRubyParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(DeprecatedRubyParser.MINUS, 0); }
		public NumericLiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_numericLiteral; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterNumericLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitNumericLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitNumericLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NumericLiteralContext numericLiteral() throws RecognitionException {
		NumericLiteralContext _localctx = new NumericLiteralContext(_ctx, getState());
		enterRule(_localctx, 198, RULE_numericLiteral);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1439);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==PLUS || _la==MINUS) {
				{
				setState(1438);
				_la = _input.LA(1);
				if ( !(_la==PLUS || _la==MINUS) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				}
			}

			setState(1441);
			unsignedNumericLiteral();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UnsignedNumericLiteralContext extends ParserRuleContext {
		public TerminalNode DECIMAL_INTEGER_LITERAL() { return getToken(DeprecatedRubyParser.DECIMAL_INTEGER_LITERAL, 0); }
		public TerminalNode BINARY_INTEGER_LITERAL() { return getToken(DeprecatedRubyParser.BINARY_INTEGER_LITERAL, 0); }
		public TerminalNode OCTAL_INTEGER_LITERAL() { return getToken(DeprecatedRubyParser.OCTAL_INTEGER_LITERAL, 0); }
		public TerminalNode HEXADECIMAL_INTEGER_LITERAL() { return getToken(DeprecatedRubyParser.HEXADECIMAL_INTEGER_LITERAL, 0); }
		public TerminalNode FLOAT_LITERAL_WITHOUT_EXPONENT() { return getToken(DeprecatedRubyParser.FLOAT_LITERAL_WITHOUT_EXPONENT, 0); }
		public TerminalNode FLOAT_LITERAL_WITH_EXPONENT() { return getToken(DeprecatedRubyParser.FLOAT_LITERAL_WITH_EXPONENT, 0); }
		public UnsignedNumericLiteralContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unsignedNumericLiteral; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterUnsignedNumericLiteral(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitUnsignedNumericLiteral(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitUnsignedNumericLiteral(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnsignedNumericLiteralContext unsignedNumericLiteral() throws RecognitionException {
		UnsignedNumericLiteralContext _localctx = new UnsignedNumericLiteralContext(_ctx, getState());
		enterRule(_localctx, 200, RULE_unsignedNumericLiteral);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1443);
			_la = _input.LA(1);
			if ( !(((((_la - 116)) & ~0x3f) == 0 && ((1L << (_la - 116)) & ((1L << (DECIMAL_INTEGER_LITERAL - 116)) | (1L << (BINARY_INTEGER_LITERAL - 116)) | (1L << (OCTAL_INTEGER_LITERAL - 116)) | (1L << (HEXADECIMAL_INTEGER_LITERAL - 116)) | (1L << (FLOAT_LITERAL_WITHOUT_EXPONENT - 116)) | (1L << (FLOAT_LITERAL_WITH_EXPONENT - 116)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DefinedMethodNameOrSymbolContext extends ParserRuleContext {
		public DefinedMethodNameContext definedMethodName() {
			return getRuleContext(DefinedMethodNameContext.class,0);
		}
		public SymbolContext symbol() {
			return getRuleContext(SymbolContext.class,0);
		}
		public DefinedMethodNameOrSymbolContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_definedMethodNameOrSymbol; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterDefinedMethodNameOrSymbol(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitDefinedMethodNameOrSymbol(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitDefinedMethodNameOrSymbol(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DefinedMethodNameOrSymbolContext definedMethodNameOrSymbol() throws RecognitionException {
		DefinedMethodNameOrSymbolContext _localctx = new DefinedMethodNameOrSymbolContext(_ctx, getState());
		enterRule(_localctx, 202, RULE_definedMethodNameOrSymbol);
		try {
			setState(1447);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case LINE__:
			case ENCODING__:
			case FILE__:
			case BEGIN_:
			case END_:
			case ALIAS:
			case AND:
			case BEGIN:
			case BREAK:
			case CASE:
			case CLASS:
			case DEF:
			case IS_DEFINED:
			case DO:
			case ELSE:
			case ELSIF:
			case END:
			case ENSURE:
			case FOR:
			case FALSE:
			case IF:
			case IN:
			case MODULE:
			case NEXT:
			case NIL:
			case NOT:
			case OR:
			case REDO:
			case RESCUE:
			case RETRY:
			case RETURN:
			case SELF:
			case SUPER:
			case THEN:
			case TRUE:
			case UNDEF:
			case UNLESS:
			case UNTIL:
			case WHEN:
			case WHILE:
			case YIELD:
			case LBRACK:
			case AMP:
			case BAR:
			case EQ2:
			case EQ3:
			case CARET:
			case LTEQGT:
			case EQTILDE:
			case GT:
			case GTEQ:
			case LT:
			case LTEQ:
			case LT2:
			case GT2:
			case PLUS:
			case MINUS:
			case STAR:
			case STAR2:
			case SLASH:
			case PERCENT:
			case TILDE:
			case PLUSAT:
			case MINUSAT:
			case LOCAL_VARIABLE_IDENTIFIER:
			case CONSTANT_IDENTIFIER:
			case ASSIGNMENT_LIKE_METHOD_IDENTIFIER:
				enterOuterAlt(_localctx, 1);
				{
				setState(1445);
				definedMethodName();
				}
				break;
			case COLON:
			case SYMBOL_LITERAL:
				enterOuterAlt(_localctx, 2);
				{
				setState(1446);
				symbol();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class KeywordContext extends ParserRuleContext {
		public TerminalNode LINE__() { return getToken(DeprecatedRubyParser.LINE__, 0); }
		public TerminalNode ENCODING__() { return getToken(DeprecatedRubyParser.ENCODING__, 0); }
		public TerminalNode FILE__() { return getToken(DeprecatedRubyParser.FILE__, 0); }
		public TerminalNode BEGIN_() { return getToken(DeprecatedRubyParser.BEGIN_, 0); }
		public TerminalNode END_() { return getToken(DeprecatedRubyParser.END_, 0); }
		public TerminalNode ALIAS() { return getToken(DeprecatedRubyParser.ALIAS, 0); }
		public TerminalNode AND() { return getToken(DeprecatedRubyParser.AND, 0); }
		public TerminalNode BEGIN() { return getToken(DeprecatedRubyParser.BEGIN, 0); }
		public TerminalNode BREAK() { return getToken(DeprecatedRubyParser.BREAK, 0); }
		public TerminalNode CASE() { return getToken(DeprecatedRubyParser.CASE, 0); }
		public TerminalNode CLASS() { return getToken(DeprecatedRubyParser.CLASS, 0); }
		public TerminalNode DEF() { return getToken(DeprecatedRubyParser.DEF, 0); }
		public TerminalNode IS_DEFINED() { return getToken(DeprecatedRubyParser.IS_DEFINED, 0); }
		public TerminalNode DO() { return getToken(DeprecatedRubyParser.DO, 0); }
		public TerminalNode ELSE() { return getToken(DeprecatedRubyParser.ELSE, 0); }
		public TerminalNode ELSIF() { return getToken(DeprecatedRubyParser.ELSIF, 0); }
		public TerminalNode END() { return getToken(DeprecatedRubyParser.END, 0); }
		public TerminalNode ENSURE() { return getToken(DeprecatedRubyParser.ENSURE, 0); }
		public TerminalNode FOR() { return getToken(DeprecatedRubyParser.FOR, 0); }
		public TerminalNode FALSE() { return getToken(DeprecatedRubyParser.FALSE, 0); }
		public TerminalNode IF() { return getToken(DeprecatedRubyParser.IF, 0); }
		public TerminalNode IN() { return getToken(DeprecatedRubyParser.IN, 0); }
		public TerminalNode MODULE() { return getToken(DeprecatedRubyParser.MODULE, 0); }
		public TerminalNode NEXT() { return getToken(DeprecatedRubyParser.NEXT, 0); }
		public TerminalNode NIL() { return getToken(DeprecatedRubyParser.NIL, 0); }
		public TerminalNode NOT() { return getToken(DeprecatedRubyParser.NOT, 0); }
		public TerminalNode OR() { return getToken(DeprecatedRubyParser.OR, 0); }
		public TerminalNode REDO() { return getToken(DeprecatedRubyParser.REDO, 0); }
		public TerminalNode RESCUE() { return getToken(DeprecatedRubyParser.RESCUE, 0); }
		public TerminalNode RETRY() { return getToken(DeprecatedRubyParser.RETRY, 0); }
		public TerminalNode RETURN() { return getToken(DeprecatedRubyParser.RETURN, 0); }
		public TerminalNode SELF() { return getToken(DeprecatedRubyParser.SELF, 0); }
		public TerminalNode SUPER() { return getToken(DeprecatedRubyParser.SUPER, 0); }
		public TerminalNode THEN() { return getToken(DeprecatedRubyParser.THEN, 0); }
		public TerminalNode TRUE() { return getToken(DeprecatedRubyParser.TRUE, 0); }
		public TerminalNode UNDEF() { return getToken(DeprecatedRubyParser.UNDEF, 0); }
		public TerminalNode UNLESS() { return getToken(DeprecatedRubyParser.UNLESS, 0); }
		public TerminalNode UNTIL() { return getToken(DeprecatedRubyParser.UNTIL, 0); }
		public TerminalNode WHEN() { return getToken(DeprecatedRubyParser.WHEN, 0); }
		public TerminalNode WHILE() { return getToken(DeprecatedRubyParser.WHILE, 0); }
		public TerminalNode YIELD() { return getToken(DeprecatedRubyParser.YIELD, 0); }
		public KeywordContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_keyword; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterKeyword(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitKeyword(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitKeyword(this);
			else return visitor.visitChildren(this);
		}
	}

	public final KeywordContext keyword() throws RecognitionException {
		KeywordContext _localctx = new KeywordContext(_ctx, getState());
		enterRule(_localctx, 204, RULE_keyword);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1449);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LINE__) | (1L << ENCODING__) | (1L << FILE__) | (1L << BEGIN_) | (1L << END_) | (1L << ALIAS) | (1L << AND) | (1L << BEGIN) | (1L << BREAK) | (1L << CASE) | (1L << CLASS) | (1L << DEF) | (1L << IS_DEFINED) | (1L << DO) | (1L << ELSE) | (1L << ELSIF) | (1L << END) | (1L << ENSURE) | (1L << FOR) | (1L << FALSE) | (1L << IF) | (1L << IN) | (1L << MODULE) | (1L << NEXT) | (1L << NIL) | (1L << NOT) | (1L << OR) | (1L << REDO) | (1L << RESCUE) | (1L << RETRY) | (1L << RETURN) | (1L << SELF) | (1L << SUPER) | (1L << THEN) | (1L << TRUE) | (1L << UNDEF) | (1L << UNLESS) | (1L << UNTIL) | (1L << WHEN) | (1L << WHILE) | (1L << YIELD))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class OperatorMethodNameContext extends ParserRuleContext {
		public TerminalNode CARET() { return getToken(DeprecatedRubyParser.CARET, 0); }
		public TerminalNode AMP() { return getToken(DeprecatedRubyParser.AMP, 0); }
		public TerminalNode BAR() { return getToken(DeprecatedRubyParser.BAR, 0); }
		public TerminalNode LTEQGT() { return getToken(DeprecatedRubyParser.LTEQGT, 0); }
		public TerminalNode EQ2() { return getToken(DeprecatedRubyParser.EQ2, 0); }
		public TerminalNode EQ3() { return getToken(DeprecatedRubyParser.EQ3, 0); }
		public TerminalNode EQTILDE() { return getToken(DeprecatedRubyParser.EQTILDE, 0); }
		public TerminalNode GT() { return getToken(DeprecatedRubyParser.GT, 0); }
		public TerminalNode GTEQ() { return getToken(DeprecatedRubyParser.GTEQ, 0); }
		public TerminalNode LT() { return getToken(DeprecatedRubyParser.LT, 0); }
		public TerminalNode LTEQ() { return getToken(DeprecatedRubyParser.LTEQ, 0); }
		public TerminalNode LT2() { return getToken(DeprecatedRubyParser.LT2, 0); }
		public TerminalNode GT2() { return getToken(DeprecatedRubyParser.GT2, 0); }
		public TerminalNode PLUS() { return getToken(DeprecatedRubyParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(DeprecatedRubyParser.MINUS, 0); }
		public TerminalNode STAR() { return getToken(DeprecatedRubyParser.STAR, 0); }
		public TerminalNode SLASH() { return getToken(DeprecatedRubyParser.SLASH, 0); }
		public TerminalNode PERCENT() { return getToken(DeprecatedRubyParser.PERCENT, 0); }
		public TerminalNode STAR2() { return getToken(DeprecatedRubyParser.STAR2, 0); }
		public TerminalNode TILDE() { return getToken(DeprecatedRubyParser.TILDE, 0); }
		public TerminalNode PLUSAT() { return getToken(DeprecatedRubyParser.PLUSAT, 0); }
		public TerminalNode MINUSAT() { return getToken(DeprecatedRubyParser.MINUSAT, 0); }
		public TerminalNode LBRACK() { return getToken(DeprecatedRubyParser.LBRACK, 0); }
		public TerminalNode RBRACK() { return getToken(DeprecatedRubyParser.RBRACK, 0); }
		public TerminalNode EQ() { return getToken(DeprecatedRubyParser.EQ, 0); }
		public OperatorMethodNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_operatorMethodName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).enterOperatorMethodName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof DeprecatedRubyParserListener ) ((DeprecatedRubyParserListener)listener).exitOperatorMethodName(this);
		}
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof DeprecatedRubyParserVisitor ) return ((DeprecatedRubyParserVisitor)visitor).visitOperatorMethodName(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OperatorMethodNameContext operatorMethodName() throws RecognitionException {
		OperatorMethodNameContext _localctx = new OperatorMethodNameContext(_ctx, getState());
		enterRule(_localctx, 206, RULE_operatorMethodName);
		try {
			setState(1478);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,229,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1451);
				match(CARET);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1452);
				match(AMP);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1453);
				match(BAR);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1454);
				match(LTEQGT);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1455);
				match(EQ2);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1456);
				match(EQ3);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1457);
				match(EQTILDE);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(1458);
				match(GT);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(1459);
				match(GTEQ);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(1460);
				match(LT);
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(1461);
				match(LTEQ);
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(1462);
				match(LT2);
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(1463);
				match(GT2);
				}
				break;
			case 14:
				enterOuterAlt(_localctx, 14);
				{
				setState(1464);
				match(PLUS);
				}
				break;
			case 15:
				enterOuterAlt(_localctx, 15);
				{
				setState(1465);
				match(MINUS);
				}
				break;
			case 16:
				enterOuterAlt(_localctx, 16);
				{
				setState(1466);
				match(STAR);
				}
				break;
			case 17:
				enterOuterAlt(_localctx, 17);
				{
				setState(1467);
				match(SLASH);
				}
				break;
			case 18:
				enterOuterAlt(_localctx, 18);
				{
				setState(1468);
				match(PERCENT);
				}
				break;
			case 19:
				enterOuterAlt(_localctx, 19);
				{
				setState(1469);
				match(STAR2);
				}
				break;
			case 20:
				enterOuterAlt(_localctx, 20);
				{
				setState(1470);
				match(TILDE);
				}
				break;
			case 21:
				enterOuterAlt(_localctx, 21);
				{
				setState(1471);
				match(PLUSAT);
				}
				break;
			case 22:
				enterOuterAlt(_localctx, 22);
				{
				setState(1472);
				match(MINUSAT);
				}
				break;
			case 23:
				enterOuterAlt(_localctx, 23);
				{
				setState(1473);
				match(LBRACK);
				setState(1474);
				match(RBRACK);
				}
				break;
			case 24:
				enterOuterAlt(_localctx, 24);
				{
				setState(1475);
				match(LBRACK);
				setState(1476);
				match(RBRACK);
				setState(1477);
				match(EQ);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
		switch (ruleIndex) {
		case 3:
			return statement_sempred((StatementContext)_localctx, predIndex);
		case 4:
			return expressionOrCommand_sempred((ExpressionOrCommandContext)_localctx, predIndex);
		case 5:
			return expression_sempred((ExpressionContext)_localctx, predIndex);
		case 6:
			return primary_sempred((PrimaryContext)_localctx, predIndex);
		case 90:
			return stringExpression_sempred((StringExpressionContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean statement_sempred(StatementContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 2);
		}
		return true;
	}
	private boolean expressionOrCommand_sempred(ExpressionOrCommandContext _localctx, int predIndex) {
		switch (predIndex) {
		case 1:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 2:
			return precpred(_ctx, 14);
		case 3:
			return precpred(_ctx, 12);
		case 4:
			return precpred(_ctx, 11);
		case 5:
			return precpred(_ctx, 10);
		case 6:
			return precpred(_ctx, 9);
		case 7:
			return precpred(_ctx, 8);
		case 8:
			return precpred(_ctx, 7);
		case 9:
			return precpred(_ctx, 5);
		case 10:
			return precpred(_ctx, 4);
		case 11:
			return precpred(_ctx, 2);
		case 12:
			return precpred(_ctx, 6);
		case 13:
			return precpred(_ctx, 3);
		}
		return true;
	}
	private boolean primary_sempred(PrimaryContext _localctx, int predIndex) {
		switch (predIndex) {
		case 14:
			return precpred(_ctx, 17);
		case 15:
			return precpred(_ctx, 6);
		case 16:
			return precpred(_ctx, 2);
		case 17:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean stringExpression_sempred(StringExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 18:
			return precpred(_ctx, 1);
		}
		return true;
	}

	public static final String _serializedATN =
		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0098\u05cb\4\2\t"+
		"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
		"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
		",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
		"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
		"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
		"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
		"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
		"`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\3\2\3\2\3\2"+
		"\3\3\7\3\u00d7\n\3\f\3\16\3\u00da\13\3\3\3\5\3\u00dd\n\3\3\3\7\3\u00e0"+
		"\n\3\f\3\16\3\u00e3\13\3\3\4\3\4\6\4\u00e7\n\4\r\4\16\4\u00e8\3\4\7\4"+
		"\u00ec\n\4\f\4\16\4\u00ef\13\4\3\5\3\5\3\5\5\5\u00f4\n\5\3\5\3\5\5\5\u00f8"+
		"\n\5\3\5\3\5\3\5\3\5\5\5\u00fe\n\5\3\5\3\5\3\5\5\5\u0103\n\5\3\5\7\5\u0106"+
		"\n\5\f\5\16\5\u0109\13\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5"+
		"\5\u0116\n\5\3\5\3\5\3\5\5\5\u011b\n\5\3\5\7\5\u011e\n\5\f\5\16\5\u0121"+
		"\13\5\3\6\3\6\3\6\3\6\5\6\u0127\n\6\5\6\u0129\n\6\3\6\3\6\3\6\5\6\u012e"+
		"\n\6\3\6\5\6\u0131\n\6\3\6\3\6\3\6\5\6\u0136\n\6\3\6\7\6\u0139\n\6\f\6"+
		"\16\6\u013c\13\6\3\7\3\7\3\7\3\7\5\7\u0142\n\7\3\7\3\7\3\7\3\7\3\7\5\7"+
		"\u0149\n\7\3\7\3\7\3\7\3\7\3\7\5\7\u0150\n\7\3\7\3\7\3\7\5\7\u0155\n\7"+
		"\3\7\3\7\3\7\5\7\u015a\n\7\3\7\5\7\u015d\n\7\3\7\3\7\3\7\5\7\u0162\n\7"+
		"\3\7\3\7\3\7\3\7\5\7\u0168\n\7\3\7\3\7\3\7\3\7\5\7\u016e\n\7\3\7\3\7\3"+
		"\7\3\7\5\7\u0174\n\7\3\7\3\7\3\7\3\7\5\7\u017a\n\7\3\7\3\7\3\7\3\7\5\7"+
		"\u0180\n\7\3\7\3\7\3\7\3\7\5\7\u0186\n\7\3\7\3\7\3\7\3\7\5\7\u018c\n\7"+
		"\3\7\3\7\3\7\3\7\5\7\u0192\n\7\3\7\3\7\3\7\3\7\5\7\u0198\n\7\3\7\3\7\5"+
		"\7\u019c\n\7\3\7\3\7\5\7\u01a0\n\7\3\7\3\7\3\7\3\7\3\7\5\7\u01a7\n\7\3"+
		"\7\5\7\u01aa\n\7\3\7\3\7\3\7\5\7\u01af\n\7\3\7\5\7\u01b2\n\7\7\7\u01b4"+
		"\n\7\f\7\16\7\u01b7\13\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u01df\n\b\3\b\5\b\u01e2\n\b\3"+
		"\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u01eb\n\b\5\b\u01ed\n\b\3\b\3\b\3\b\3\b"+
		"\3\b\3\b\5\b\u01f5\n\b\3\b\3\b\3\b\5\b\u01fa\n\b\3\b\3\b\5\b\u01fe\n\b"+
		"\3\b\3\b\5\b\u0202\n\b\3\b\5\b\u0205\n\b\3\b\3\b\3\b\3\b\5\b\u020b\n\b"+
		"\7\b\u020d\n\b\f\b\16\b\u0210\13\b\3\t\3\t\3\t\3\t\5\t\u0216\n\t\3\t\3"+
		"\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u0220\n\t\3\n\3\n\3\n\5\n\u0225\n\n\6\n"+
		"\u0227\n\n\r\n\16\n\u0228\3\n\3\n\5\n\u022d\n\n\3\n\3\n\5\n\u0231\n\n"+
		"\3\13\3\13\5\13\u0235\n\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16"+
		"\5\16\u0241\n\16\3\16\5\16\u0244\n\16\3\16\5\16\u0247\n\16\3\17\3\17\3"+
		"\17\5\17\u024c\n\17\3\17\7\17\u024f\n\17\f\17\16\17\u0252\13\17\3\20\3"+
		"\20\3\20\3\20\5\20\u0258\n\20\3\20\3\20\3\20\3\20\5\20\u025e\n\20\3\21"+
		"\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u026a\n\21\3\21\3\21"+
		"\3\21\5\21\u026f\n\21\3\22\3\22\3\22\3\22\5\22\u0275\n\22\7\22\u0277\n"+
		"\22\f\22\16\22\u027a\13\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
		"\3\23\3\23\3\23\3\23\3\23\5\23\u028a\n\23\3\24\3\24\3\25\3\25\3\25\5\25"+
		"\u0291\n\25\3\25\7\25\u0294\n\25\f\25\16\25\u0297\13\25\3\26\3\26\3\26"+
		"\3\26\3\26\3\26\5\26\u029f\n\26\3\27\3\27\3\27\3\30\3\30\3\30\3\30\5\30"+
		"\u02a8\n\30\3\31\3\31\3\31\5\31\u02ad\n\31\5\31\u02af\n\31\3\31\3\31\3"+
		"\31\5\31\u02b4\n\31\3\31\3\31\3\31\3\31\3\31\5\31\u02bb\n\31\5\31\u02bd"+
		"\n\31\3\31\3\31\5\31\u02c1\n\31\3\32\3\32\5\32\u02c5\n\32\3\32\3\32\3"+
		"\32\5\32\u02ca\n\32\3\32\3\32\5\32\u02ce\n\32\3\32\5\32\u02d1\n\32\3\32"+
		"\3\32\3\32\3\32\5\32\u02d7\n\32\3\32\3\32\3\32\5\32\u02dc\n\32\3\32\3"+
		"\32\5\32\u02e0\n\32\3\32\3\32\3\32\3\32\5\32\u02e6\n\32\3\32\3\32\5\32"+
		"\u02ea\n\32\3\32\3\32\5\32\u02ee\n\32\3\33\3\33\3\33\5\33\u02f3\n\33\3"+
		"\33\7\33\u02f6\n\33\f\33\16\33\u02f9\13\33\3\34\3\34\5\34\u02fd\n\34\3"+
		"\35\3\35\5\35\u0301\n\35\3\35\5\35\u0304\n\35\3\35\3\35\3\35\3\36\3\36"+
		"\5\36\u030b\n\36\3\36\5\36\u030e\n\36\3\36\3\36\3\36\3\37\3\37\5\37\u0315"+
		"\n\37\3\37\3\37\3 \3 \5 \u031b\n \3!\3!\5!\u031f\n!\3!\5!\u0322\n!\3!"+
		"\5!\u0325\n!\3!\3!\3!\5!\u032a\n!\3!\3!\3!\5!\u032f\n!\3!\3!\3!\5!\u0334"+
		"\n!\3!\3!\3!\5!\u0339\n!\3!\5!\u033c\n!\3\"\7\"\u033f\n\"\f\"\16\"\u0342"+
		"\13\"\3\"\3\"\6\"\u0346\n\"\r\"\16\"\u0347\3\"\7\"\u034b\n\"\f\"\16\""+
		"\u034e\13\"\3\"\7\"\u0351\n\"\f\"\16\"\u0354\13\"\3#\3#\6#\u0358\n#\r"+
		"#\16#\u0359\3$\3$\3$\3$\3%\7%\u0361\n%\f%\16%\u0364\13%\3%\3%\6%\u0368"+
		"\n%\r%\16%\u0369\3%\7%\u036d\n%\f%\16%\u0370\13%\3%\7%\u0373\n%\f%\16"+
		"%\u0376\13%\3&\6&\u0379\n&\r&\16&\u037a\3\'\3\'\5\'\u037f\n\'\3\'\3\'"+
		"\5\'\u0383\n\'\5\'\u0385\n\'\3\'\5\'\u0388\n\'\3\'\3\'\3(\3(\3(\5(\u038f"+
		"\n(\3(\7(\u0392\n(\f(\16(\u0395\13(\3)\3)\3)\5)\u039a\n)\3*\3*\3*\5*\u039f"+
		"\n*\3*\7*\u03a2\n*\f*\16*\u03a5\13*\3+\3+\5+\u03a9\n+\3+\3+\5+\u03ad\n"+
		"+\3+\5+\u03b0\n+\3,\3,\5,\u03b4\n,\3,\3,\3,\3,\3,\3,\3,\5,\u03bd\n,\3"+
		",\3,\3,\3,\5,\u03c3\n,\3,\3,\5,\u03c7\n,\3-\3-\3-\5-\u03cc\n-\3-\5-\u03cf"+
		"\n-\3-\3-\3.\3.\3.\5.\u03d6\n.\3.\3.\5.\u03da\n.\3.\3.\5.\u03de\n.\3/"+
		"\3/\3/\3/\3/\3/\5/\u03e6\n/\3\60\3\60\5\60\u03ea\n\60\3\61\3\61\3\62\3"+
		"\62\3\62\5\62\u03f1\n\62\3\63\3\63\3\63\5\63\u03f6\n\63\3\64\3\64\3\64"+
		"\5\64\u03fb\n\64\3\64\3\64\3\65\3\65\5\65\u0401\n\65\3\65\5\65\u0404\n"+
		"\65\3\65\5\65\u0407\n\65\3\65\3\65\5\65\u040b\n\65\5\65\u040d\n\65\3\66"+
		"\3\66\3\66\5\66\u0412\n\66\3\66\7\66\u0415\n\66\f\66\16\66\u0418\13\66"+
		"\3\67\3\67\3\67\3\67\3\67\3\67\5\67\u0420\n\67\38\38\39\39\39\59\u0427"+
		"\n9\39\39\3:\3:\5:\u042d\n:\3;\3;\5;\u0431\n;\3<\3<\3<\5<\u0436\n<\3<"+
		"\5<\u0439\n<\3=\3=\5=\u043d\n=\3>\3>\5>\u0441\n>\3>\3>\3>\7>\u0446\n>"+
		"\f>\16>\u0449\13>\3>\5>\u044c\n>\3>\3>\3?\6?\u0451\n?\r?\16?\u0452\3?"+
		"\3?\5?\u0457\n?\3?\3?\5?\u045b\n?\3@\3@\5@\u045f\n@\3@\3@\3@\3A\3A\3A"+
		"\3B\3B\5B\u0469\nB\3B\3B\3B\5B\u046e\nB\3B\3B\3C\3C\5C\u0474\nC\3C\5C"+
		"\u0477\nC\3C\7C\u047a\nC\fC\16C\u047d\13C\3C\6C\u0480\nC\rC\16C\u0481"+
		"\3C\5C\u0485\nC\3C\3C\3D\3D\5D\u048b\nD\3D\3D\3D\3E\3E\3E\5E\u0493\nE"+
		"\3E\5E\u0496\nE\3F\3F\5F\u049a\nF\3F\3F\3F\3F\3G\6G\u04a1\nG\rG\16G\u04a2"+
		"\3G\3G\3G\5G\u04a8\nG\3H\3H\5H\u04ac\nH\3H\3H\3H\3H\3I\3I\5I\u04b4\nI"+
		"\3I\3I\3I\5I\u04b9\nI\3I\3I\3I\3I\3J\3J\5J\u04c1\nJ\3K\3K\3K\3K\3L\3L"+
		"\7L\u04c9\nL\fL\16L\u04cc\13L\3L\5L\u04cf\nL\3L\5L\u04d2\nL\3M\3M\5M\u04d6"+
		"\nM\3M\5M\u04d9\nM\3M\5M\u04dc\nM\3M\3M\3N\3N\5N\u04e2\nN\3O\3O\3O\3P"+
		"\3P\3P\3Q\3Q\5Q\u04ec\nQ\3Q\3Q\3Q\5Q\u04f1\nQ\3Q\5Q\u04f4\nQ\3Q\3Q\3Q"+
		"\3Q\3Q\5Q\u04fb\nQ\3Q\3Q\5Q\u04ff\nQ\3Q\3Q\6Q\u0503\nQ\rQ\16Q\u0504\3"+
		"Q\3Q\3Q\5Q\u050a\nQ\3R\3R\5R\u050e\nR\3S\3S\5S\u0512\nS\3S\3S\3S\3S\3"+
		"T\3T\3T\5T\u051b\nT\3T\5T\u051e\nT\3U\3U\3V\3V\5V\u0524\nV\3W\3W\3X\3"+
		"X\3X\3X\3X\3X\3X\5X\u052f\nX\3Y\3Y\3Y\3Y\3Y\3Y\5Y\u0537\nY\3Z\3Z\3Z\3"+
		"Z\3Z\5Z\u053e\nZ\3Z\5Z\u0541\nZ\3[\3[\3[\5[\u0546\n[\3\\\3\\\3\\\5\\\u054b"+
		"\n\\\3\\\3\\\6\\\u054f\n\\\r\\\16\\\u0550\7\\\u0553\n\\\f\\\16\\\u0556"+
		"\13\\\3]\3]\5]\u055a\n]\3]\3]\3]\3]\7]\u0560\n]\f]\16]\u0563\13]\3]\3"+
		"]\3]\3]\7]\u0569\n]\f]\16]\u056c\13]\3]\5]\u056f\n]\3^\3^\3^\5^\u0574"+
		"\n^\3^\5^\u0577\n^\3_\3_\3_\3_\3`\3`\3`\6`\u0580\n`\r`\16`\u0581\3`\3"+
		"`\3a\3a\3a\3a\3b\3b\3b\6b\u058d\nb\rb\16b\u058e\3b\3b\3c\3c\3c\3c\3d\3"+
		"d\3d\7d\u059a\nd\fd\16d\u059d\13d\3d\3d\3e\5e\u05a2\ne\3e\3e\3f\3f\3g"+
		"\3g\5g\u05aa\ng\3h\3h\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i"+
		"\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\3i\5i\u05c9\ni\3i\2\7\b\n\f\16\u00b6j\2"+
		"\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJL"+
		"NPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e"+
		"\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6"+
		"\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be"+
		"\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\2\27\4\2DD||\6"+
		"\2&&..\66\6799\4\2\30\30,,\4\2SShh\5\2KK__ee\4\2aacd\3\2_`\3\2]^\4\2Q"+
		"QVV\3\2Y\\\5\2LMTUWX\3\2FG\5\2BBEEPP\4\2BBEE\4\2\177\177\u0083\u0083\4"+
		"\2AAII\4\2HHKK\6\2\32\32))--//\3\2\177\u0083\3\2v{\3\2\22:\2\u06b4\2\u00d2"+
		"\3\2\2\2\4\u00d8\3\2\2\2\6\u00e4\3\2\2\2\b\u0115\3\2\2\2\n\u0130\3\2\2"+
		"\2\f\u015c\3\2\2\2\16\u01ec\3\2\2\2\20\u021f\3\2\2\2\22\u0230\3\2\2\2"+
		"\24\u0234\3\2\2\2\26\u0236\3\2\2\2\30\u0239\3\2\2\2\32\u0246\3\2\2\2\34"+
		"\u0248\3\2\2\2\36\u025d\3\2\2\2 \u026e\3\2\2\2\"\u0270\3\2\2\2$\u0289"+
		"\3\2\2\2&\u028b\3\2\2\2(\u028d\3\2\2\2*\u029e\3\2\2\2,\u02a0\3\2\2\2."+
		"\u02a7\3\2\2\2\60\u02c0\3\2\2\2\62\u02ed\3\2\2\2\64\u02ef\3\2\2\2\66\u02fc"+
		"\3\2\2\28\u02fe\3\2\2\2:\u0308\3\2\2\2<\u0312\3\2\2\2>\u031a\3\2\2\2@"+
		"\u033b\3\2\2\2B\u0340\3\2\2\2D\u0357\3\2\2\2F\u035b\3\2\2\2H\u0362\3\2"+
		"\2\2J\u0378\3\2\2\2L\u037c\3\2\2\2N\u038b\3\2\2\2P\u0399\3\2\2\2R\u039b"+
		"\3\2\2\2T\u03a8\3\2\2\2V\u03c6\3\2\2\2X\u03c8\3\2\2\2Z\u03dd\3\2\2\2\\"+
		"\u03e5\3\2\2\2^\u03e9\3\2\2\2`\u03eb\3\2\2\2b\u03f0\3\2\2\2d\u03f5\3\2"+
		"\2\2f\u03fa\3\2\2\2h\u040c\3\2\2\2j\u040e\3\2\2\2l\u041f\3\2\2\2n\u0421"+
		"\3\2\2\2p\u0423\3\2\2\2r\u042a\3\2\2\2t\u042e\3\2\2\2v\u0432\3\2\2\2x"+
		"\u043a\3\2\2\2z\u043e\3\2\2\2|\u045a\3\2\2\2~\u045c\3\2\2\2\u0080\u0463"+
		"\3\2\2\2\u0082\u0466\3\2\2\2\u0084\u0471\3\2\2\2\u0086\u0488\3\2\2\2\u0088"+
		"\u0495\3\2\2\2\u008a\u0497\3\2\2\2\u008c\u04a7\3\2\2\2\u008e\u04a9\3\2"+
		"\2\2\u0090\u04b1\3\2\2\2\u0092\u04c0\3\2\2\2\u0094\u04c2\3\2\2\2\u0096"+
		"\u04c6\3\2\2\2\u0098\u04d3\3\2\2\2\u009a\u04e1\3\2\2\2\u009c\u04e3\3\2"+
		"\2\2\u009e\u04e6\3\2\2\2\u00a0\u0509\3\2\2\2\u00a2\u050d\3\2\2\2\u00a4"+
		"\u050f\3\2\2\2\u00a6\u0517\3\2\2\2\u00a8\u051f\3\2\2\2\u00aa\u0523\3\2"+
		"\2\2\u00ac\u0525\3\2\2\2\u00ae\u052e\3\2\2\2\u00b0\u0536\3\2\2\2\u00b2"+
		"\u0540\3\2\2\2\u00b4\u0545\3\2\2\2\u00b6\u054a\3\2\2\2\u00b8\u056e\3\2"+
		"\2\2\u00ba\u0576\3\2\2\2\u00bc\u0578\3\2\2\2\u00be\u057c\3\2\2\2\u00c0"+
		"\u0585\3\2\2\2\u00c2\u0589\3\2\2\2\u00c4\u0592\3\2\2\2\u00c6\u0596\3\2"+
		"\2\2\u00c8\u05a1\3\2\2\2\u00ca\u05a5\3\2\2\2\u00cc\u05a9\3\2\2\2\u00ce"+
		"\u05ab\3\2\2\2\u00d0\u05c8\3\2\2\2\u00d2\u00d3\5\4\3\2\u00d3\u00d4\7\2"+
		"\2\3\u00d4\3\3\2\2\2\u00d5\u00d7\t\2\2\2\u00d6\u00d5\3\2\2\2\u00d7\u00da"+
		"\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00dc\3\2\2\2\u00da"+
		"\u00d8\3\2\2\2\u00db\u00dd\5\6\4\2\u00dc\u00db\3\2\2\2\u00dc\u00dd\3\2"+
		"\2\2\u00dd\u00e1\3\2\2\2\u00de\u00e0\t\2\2\2\u00df\u00de\3\2\2\2\u00e0"+
		"\u00e3\3\2\2\2\u00e1\u00df\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\5\3\2\2\2"+
		"\u00e3\u00e1\3\2\2\2\u00e4\u00ed\5\b\5\2\u00e5\u00e7\t\2\2\2\u00e6\u00e5"+
		"\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9"+
		"\u00ea\3\2\2\2\u00ea\u00ec\5\b\5\2\u00eb\u00e6\3\2\2\2\u00ec\u00ef\3\2"+
		"\2\2\u00ed\u00eb\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\7\3\2\2\2\u00ef\u00ed"+
		"\3\2\2\2\u00f0\u00f1\b\5\1\2\u00f1\u00f3\7\27\2\2\u00f2\u00f4\7|\2\2\u00f3"+
		"\u00f2\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f7\5\u00cc"+
		"g\2\u00f6\u00f8\7|\2\2\u00f7\u00f6\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00f9"+
		"\3\2\2\2\u00f9\u00fa\5\u00ccg\2\u00fa\u0116\3\2\2\2\u00fb\u00fd\7\65\2"+
		"\2\u00fc\u00fe\7|\2\2\u00fd\u00fc\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\u00ff"+
		"\3\2\2\2\u00ff\u0107\5\u00ccg\2\u0100\u0102\7C\2\2\u0101\u0103\7|\2\2"+
		"\u0102\u0101\3\2\2\2\u0102\u0103\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0106"+
		"\5\u00ccg\2\u0105\u0100\3\2\2\2\u0106\u0109\3\2\2\2\u0107\u0105\3\2\2"+
		"\2\u0107\u0108\3\2\2\2\u0108\u0116\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010b"+
		"\7\25\2\2\u010b\u010c\7?\2\2\u010c\u010d\5\4\3\2\u010d\u010e\7@\2\2\u010e"+
		"\u0116\3\2\2\2\u010f\u0110\7\26\2\2\u0110\u0111\7?\2\2\u0111\u0112\5\4"+
		"\3\2\u0112\u0113\7@\2\2\u0113\u0116\3\2\2\2\u0114\u0116\5\n\6\2\u0115"+
		"\u00f0\3\2\2\2\u0115\u00fb\3\2\2\2\u0115\u010a\3\2\2\2\u0115\u010f\3\2"+
		"\2\2\u0115\u0114\3\2\2\2\u0116\u011f\3\2\2\2\u0117\u0118\f\4\2\2\u0118"+
		"\u011a\t\3\2\2\u0119\u011b\7|\2\2\u011a\u0119\3\2\2\2\u011a\u011b\3\2"+
		"\2\2\u011b\u011c\3\2\2\2\u011c\u011e\5\b\5\5\u011d\u0117\3\2\2\2\u011e"+
		"\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\t\3\2\2\2"+
		"\u0121\u011f\3\2\2\2\u0122\u0123\b\6\1\2\u0123\u0131\5\f\7\2\u0124\u0126"+
		"\7K\2\2\u0125\u0127\7|\2\2\u0126\u0125\3\2\2\2\u0126\u0127\3\2\2\2\u0127"+
		"\u0129\3\2\2\2\u0128\u0124\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012a\3\2"+
		"\2\2\u012a\u0131\5\36\20\2\u012b\u012d\7+\2\2\u012c\u012e\7|\2\2\u012d"+
		"\u012c\3\2\2\2\u012d\u012e\3\2\2\2\u012e\u012f\3\2\2\2\u012f\u0131\5\n"+
		"\6\4\u0130\u0122\3\2\2\2\u0130\u0128\3\2\2\2\u0130\u012b\3\2\2\2\u0131"+
		"\u013a\3\2\2\2\u0132\u0133\f\3\2\2\u0133\u0135\t\4\2\2\u0134\u0136\7|"+
		"\2\2\u0135\u0134\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0137\3\2\2\2\u0137"+
		"\u0139\5\n\6\3\u0138\u0132\3\2\2\2\u0139\u013c\3\2\2\2\u013a\u0138\3\2"+
		"\2\2\u013a\u013b\3\2\2\2\u013b\13\3\2\2\2\u013c\u013a\3\2\2\2\u013d\u013e"+
		"\b\7\1\2\u013e\u013f\5\20\t\2\u013f\u0141\t\5\2\2\u0140\u0142\7|\2\2\u0141"+
		"\u0140\3\2\2\2\u0141\u0142\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0144\5\32"+
		"\16\2\u0144\u015d\3\2\2\2\u0145\u0146\5\22\n\2\u0146\u0148\7S\2\2\u0147"+
		"\u0149\7|\2\2\u0148\u0147\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014a\3\2"+
		"\2\2\u014a\u014b\5\32\16\2\u014b\u015d\3\2\2\2\u014c\u015d\5\16\b\2\u014d"+
		"\u014f\t\6\2\2\u014e\u0150\7|\2\2\u014f\u014e\3\2\2\2\u014f\u0150\3\2"+
		"\2\2\u0150\u0151\3\2\2\2\u0151\u015d\5\f\7\21\u0152\u0154\7`\2\2\u0153"+
		"\u0155\7|\2\2\u0154\u0153\3\2\2\2\u0154\u0155\3\2\2\2\u0155\u0156\3\2"+
		"\2\2\u0156\u015d\5\f\7\17\u0157\u0159\7\36\2\2\u0158\u015a\7|\2\2\u0159"+
		"\u0158\3\2\2\2\u0159\u015a\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u015d\5\f"+
		"\7\3\u015c\u013d\3\2\2\2\u015c\u0145\3\2\2\2\u015c\u014c\3\2\2\2\u015c"+
		"\u014d\3\2\2\2\u015c\u0152\3\2\2\2\u015c\u0157\3\2\2\2\u015d\u01b5\3\2"+
		"\2\2\u015e\u015f\f\20\2\2\u015f\u0161\7b\2\2\u0160\u0162\7|\2\2\u0161"+
		"\u0160\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0163\3\2\2\2\u0163\u01b4\5\f"+
		"\7\20\u0164\u0165\f\16\2\2\u0165\u0167\t\7\2\2\u0166\u0168\7|\2\2\u0167"+
		"\u0166\3\2\2\2\u0167\u0168\3\2\2\2\u0168\u0169\3\2\2\2\u0169\u01b4\5\f"+
		"\7\17\u016a\u016b\f\r\2\2\u016b\u016d\t\b\2\2\u016c\u016e\7|\2\2\u016d"+
		"\u016c\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u01b4\5\f"+
		"\7\16\u0170\u0171\f\f\2\2\u0171\u0173\t\t\2\2\u0172\u0174\7|\2\2\u0173"+
		"\u0172\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u01b4\5\f"+
		"\7\r\u0176\u0177\f\13\2\2\u0177\u0179\7N\2\2\u0178\u017a\7|\2\2\u0179"+
		"\u0178\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u01b4\5\f"+
		"\7\f\u017c\u017d\f\n\2\2\u017d\u017f\t\n\2\2\u017e\u0180\7|\2\2\u017f"+
		"\u017e\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0181\3\2\2\2\u0181\u01b4\5\f"+
		"\7\13\u0182\u0183\f\t\2\2\u0183\u0185\t\13\2\2\u0184\u0186\7|\2\2\u0185"+
		"\u0184\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u01b4\5\f"+
		"\7\n\u0188\u0189\f\7\2\2\u0189\u018b\7O\2\2\u018a\u018c\7|\2\2\u018b\u018a"+
		"\3\2\2\2\u018b\u018c\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u01b4\5\f\7\b\u018e"+
		"\u018f\f\6\2\2\u018f\u0191\7R\2\2\u0190\u0192\7|\2\2\u0191\u0190\3\2\2"+
		"\2\u0191\u0192\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u01b4\5\f\7\7\u0194\u0195"+
		"\f\4\2\2\u0195\u0197\7H\2\2\u0196\u0198\7|\2\2\u0197\u0196\3\2\2\2\u0197"+
		"\u0198\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b\5\f\7\2\u019a\u019c\7|"+
		"\2\2\u019b\u019a\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019d\3\2\2\2\u019d"+
		"\u019f\7A\2\2\u019e\u01a0\7|\2\2\u019f\u019e\3\2\2\2\u019f\u01a0\3\2\2"+
		"\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\5\f\7\5\u01a2\u01b4\3\2\2\2\u01a3\u01a4"+
		"\f\b\2\2\u01a4\u01a6\t\f\2\2\u01a5\u01a7\7|\2\2\u01a6\u01a5\3\2\2\2\u01a6"+
		"\u01a7\3\2\2\2\u01a7\u01a9\3\2\2\2\u01a8\u01aa\5\f\7\2\u01a9\u01a8\3\2"+
		"\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01b4\3\2\2\2\u01ab\u01ac\f\5\2\2\u01ac"+
		"\u01ae\t\r\2\2\u01ad\u01af\7|\2\2\u01ae\u01ad\3\2\2\2\u01ae\u01af\3\2"+
		"\2\2\u01af\u01b1\3\2\2\2\u01b0\u01b2\5\f\7\2\u01b1\u01b0\3\2\2\2\u01b1"+
		"\u01b2\3\2\2\2\u01b2\u01b4\3\2\2\2\u01b3\u015e\3\2\2\2\u01b3\u0164\3\2"+
		"\2\2\u01b3\u016a\3\2\2\2\u01b3\u0170\3\2\2\2\u01b3\u0176\3\2\2\2\u01b3"+
		"\u017c\3\2\2\2\u01b3\u0182\3\2\2\2\u01b3\u0188\3\2\2\2\u01b3\u018e\3\2"+
		"\2\2\u01b3\u0194\3\2\2\2\u01b3\u01a3\3\2\2\2\u01b3\u01ab\3\2\2\2\u01b4"+
		"\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\r\3\2\2\2"+
		"\u01b7\u01b5\3\2\2\2\u01b8\u01b9\b\b\1\2\u01b9\u01ed\5\u00a0Q\2\u01ba"+
		"\u01ed\5\u00a4S\2\u01bb\u01ed\5V,\2\u01bc\u01ed\5X-\2\u01bd\u01ed\5\u00a6"+
		"T\2\u01be\u01ed\5z>\2\u01bf\u01ed\5\u0082B\2\u01c0\u01ed\5\u0084C\2\u01c1"+
		"\u01ed\5\u008aF\2\u01c2\u01ed\5\u008eH\2\u01c3\u01ed\5\u0090I\2\u01c4"+
		"\u01c5\7\60\2\2\u01c5\u01ed\5\62\32\2\u01c6\u01ed\5\u00a8U\2\u01c7\u01ed"+
		"\5\u0094K\2\u01c8\u01c9\7=\2\2\u01c9\u01ca\5\4\3\2\u01ca\u01cb\7>\2\2"+
		"\u01cb\u01ed\3\2\2\2\u01cc\u01ed\5\u00aaV\2\u01cd\u01ce\7B\2\2\u01ce\u01ed"+
		"\7\u0083\2\2\u01cf\u01ed\5@!\2\u01d0\u01ed\5L\'\2\u01d1\u01ed\5\u00b2"+
		"Z\2\u01d2\u01ed\5\u00b6\\\2\u01d3\u01ed\5\u00be`\2\u01d4\u01ed\5\u00b8"+
		"]\2\u01d5\u01ed\5\u00c2b\2\u01d6\u01ed\5\u00c6d\2\u01d7\u01d8\7\36\2\2"+
		"\u01d8\u01d9\7=\2\2\u01d9\u01da\5\n\6\2\u01da\u01db\7>\2\2\u01db\u01ed"+
		"\3\2\2\2\u01dc\u01de\7\62\2\2\u01dd\u01df\5\62\32\2\u01de\u01dd\3\2\2"+
		"\2\u01de\u01df\3\2\2\2\u01df\u01e1\3\2\2\2\u01e0\u01e2\5\66\34\2\u01e1"+
		"\u01e0\3\2\2\2\u01e1\u01e2\3\2\2\2\u01e2\u01ed\3\2\2\2\u01e3\u01ed\5f"+
		"\64\2\u01e4\u01e5\5d\63\2\u01e5\u01e6\5\66\34\2\u01e6\u01ed\3\2\2\2\u01e7"+
		"\u01e8\5d\63\2\u01e8\u01ea\5\62\32\2\u01e9\u01eb\5\66\34\2\u01ea\u01e9"+
		"\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ed\3\2\2\2\u01ec\u01b8\3\2\2\2\u01ec"+
		"\u01ba\3\2\2\2\u01ec\u01bb\3\2\2\2\u01ec\u01bc\3\2\2\2\u01ec\u01bd\3\2"+
		"\2\2\u01ec\u01be\3\2\2\2\u01ec\u01bf\3\2\2\2\u01ec\u01c0\3\2\2\2\u01ec"+
		"\u01c1\3\2\2\2\u01ec\u01c2\3\2\2\2\u01ec\u01c3\3\2\2\2\u01ec\u01c4\3\2"+
		"\2\2\u01ec\u01c6\3\2\2\2\u01ec\u01c7\3\2\2\2\u01ec\u01c8\3\2\2\2\u01ec"+
		"\u01cc\3\2\2\2\u01ec\u01cd\3\2\2\2\u01ec\u01cf\3\2\2\2\u01ec\u01d0\3\2"+
		"\2\2\u01ec\u01d1\3\2\2\2\u01ec\u01d2\3\2\2\2\u01ec\u01d3\3\2\2\2\u01ec"+
		"\u01d4\3\2\2\2\u01ec\u01d5\3\2\2\2\u01ec\u01d6\3\2\2\2\u01ec\u01d7\3\2"+
		"\2\2\u01ec\u01dc\3\2\2\2\u01ec\u01e3\3\2\2\2\u01ec\u01e4\3\2\2\2\u01ec"+
		"\u01e7\3\2\2\2\u01ed\u020e\3\2\2\2\u01ee\u01ef\f\23\2\2\u01ef\u01f0\7"+
		"B\2\2\u01f0\u020d\7\u0083\2\2\u01f1\u01f2\f\b\2\2\u01f2\u01f4\7;\2\2\u01f3"+
		"\u01f5\5\60\31\2\u01f4\u01f3\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f5\u01f6\3"+
		"\2\2\2\u01f6\u020d\7<\2\2\u01f7\u01f9\f\4\2\2\u01f8\u01fa\7|\2\2\u01f9"+
		"\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fd\t\16"+
		"\2\2\u01fc\u01fe\7|\2\2\u01fd\u01fc\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe"+
		"\u01ff\3\2\2\2\u01ff\u0201\5b\62\2\u0200\u0202\5\62\32\2\u0201\u0200\3"+
		"\2\2\2\u0201\u0202\3\2\2\2\u0202\u0204\3\2\2\2\u0203\u0205\5\66\34\2\u0204"+
		"\u0203\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u020d\3\2\2\2\u0206\u0207\f\3"+
		"\2\2\u0207\u0208\7B\2\2\u0208\u020a\5b\62\2\u0209\u020b\5\66\34\2\u020a"+
		"\u0209\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020d\3\2\2\2\u020c\u01ee\3\2"+
		"\2\2\u020c\u01f1\3\2\2\2\u020c\u01f7\3\2\2\2\u020c\u0206\3\2\2\2\u020d"+
		"\u0210\3\2\2\2\u020e\u020c\3\2\2\2\u020e\u020f\3\2\2\2\u020f\17\3\2\2"+
		"\2\u0210\u020e\3\2\2\2\u0211\u0220\5\u00acW\2\u0212\u0213\5\16\b\2\u0213"+
		"\u0215\7;\2\2\u0214\u0216\5(\25\2\u0215\u0214\3\2\2\2\u0215\u0216\3\2"+
		"\2\2\u0216\u0217\3\2\2\2\u0217\u0218\7<\2\2\u0218\u0220\3\2\2\2\u0219"+
		"\u021a\5\16\b\2\u021a\u021b\t\17\2\2\u021b\u021c\t\20\2\2\u021c\u0220"+
		"\3\2\2\2\u021d\u021e\7B\2\2\u021e\u0220\7\u0083\2\2\u021f\u0211\3\2\2"+
		"\2\u021f\u0212\3\2\2\2\u021f\u0219\3\2\2\2\u021f\u021d\3\2\2\2\u0220\21"+
		"\3\2\2\2\u0221\u0222\5\24\13\2\u0222\u0224\7C\2\2\u0223\u0225\7|\2\2\u0224"+
		"\u0223\3\2\2\2\u0224\u0225\3\2\2\2\u0225\u0227\3\2\2\2\u0226\u0221\3\2"+
		"\2\2\u0227\u0228\3\2\2\2\u0228\u0226\3\2\2\2\u0228\u0229\3\2\2\2\u0229"+
		"\u022c\3\2\2\2\u022a\u022d\5\24\13\2\u022b\u022d\5\26\f\2\u022c\u022a"+
		"\3\2\2\2\u022c\u022b\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u0231\3\2\2\2\u022e"+
		"\u0231\5\26\f\2\u022f\u0231\5\30\r\2\u0230\u0226\3\2\2\2\u0230\u022e\3"+
		"\2\2\2\u0230\u022f\3\2\2\2\u0231\23\3\2\2\2\u0232\u0235\5\20\t\2\u0233"+
		"\u0235\5\30\r\2\u0234\u0232\3\2\2\2\u0234\u0233\3\2\2\2\u0235\25\3\2\2"+
		"\2\u0236\u0237\7a\2\2\u0237\u0238\5\20\t\2\u0238\27\3\2\2\2\u0239\u023a"+
		"\7=\2\2\u023a\u023b\5\22\n\2\u023b\u023c\7>\2\2\u023c\31\3\2\2\2\u023d"+
		"\u0243\5\34\17\2\u023e\u0240\7C\2\2\u023f\u0241\7|\2\2\u0240\u023f\3\2"+
		"\2\2\u0240\u0241\3\2\2\2\u0241\u0242\3\2\2\2\u0242\u0244\5.\30\2\u0243"+
		"\u023e\3\2\2\2\u0243\u0244\3\2\2\2\u0244\u0247\3\2\2\2\u0245\u0247\5."+
		"\30\2\u0246\u023d\3\2\2\2\u0246\u0245\3\2\2\2\u0247\33\3\2\2\2\u0248\u0250"+
		"\5\n\6\2\u0249\u024b\7C\2\2\u024a\u024c\7|\2\2\u024b\u024a\3\2\2\2\u024b"+
		"\u024c\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u024f\5\n\6\2\u024e\u0249\3\2"+
		"\2\2\u024f\u0252\3\2\2\2\u0250\u024e\3\2\2\2\u0250\u0251\3\2\2\2\u0251"+
		"\35\3\2\2\2\u0252\u0250\3\2\2\2\u0253\u025e\5\"\22\2\u0254\u025e\5 \21"+
		"\2\u0255\u0257\7\60\2\2\u0256\u0258\5(\25\2\u0257\u0256\3\2\2\2\u0257"+
		"\u0258\3\2\2\2\u0258\u025e\3\2\2\2\u0259\u025a\7\32\2\2\u025a\u025e\5"+
		"(\25\2\u025b\u025c\7)\2\2\u025c\u025e\5(\25\2\u025d\u0253\3\2\2\2\u025d"+
		"\u0254\3\2\2\2\u025d\u0255\3\2\2\2\u025d\u0259\3\2\2\2\u025d\u025b\3\2"+
		"\2\2\u025e\37\3\2\2\2\u025f\u0260\7\62\2\2\u0260\u026f\5&\24\2\u0261\u0262"+
		"\7:\2\2\u0262\u026f\5&\24\2\u0263\u0264\5d\63\2\u0264\u0265\5&\24\2\u0265"+
		"\u026f\3\2\2\2\u0266\u0267\5\16\b\2\u0267\u0269\t\16\2\2\u0268\u026a\7"+
		"|\2\2\u0269\u0268\3\2\2\2\u0269\u026a\3\2\2\2\u026a\u026b\3\2\2\2\u026b"+
		"\u026c\5b\62\2\u026c\u026d\5&\24\2\u026d\u026f\3\2\2\2\u026e\u025f\3\2"+
		"\2\2\u026e\u0261\3\2\2\2\u026e\u0263\3\2\2\2\u026e\u0266\3\2\2\2\u026f"+
		"!\3\2\2\2\u0270\u0278\5$\23\2\u0271\u0272\t\17\2\2\u0272\u0274\5b\62\2"+
		"\u0273\u0275\5\62\32\2\u0274\u0273\3\2\2\2\u0274\u0275\3\2\2\2\u0275\u0277"+
		"\3\2\2\2\u0276\u0271\3\2\2\2\u0277\u027a\3\2\2\2\u0278\u0276\3\2\2\2\u0278"+
		"\u0279\3\2\2\2\u0279#\3\2\2\2\u027a\u0278\3\2\2\2\u027b\u027c\7\62\2\2"+
		"\u027c\u027d\5&\24\2\u027d\u027e\5:\36\2\u027e\u028a\3\2\2\2\u027f\u0280"+
		"\5d\63\2\u0280\u0281\5&\24\2\u0281\u0282\5:\36\2\u0282\u028a\3\2\2\2\u0283"+
		"\u0284\5\16\b\2\u0284\u0285\t\17\2\2\u0285\u0286\5b\62\2\u0286\u0287\5"+
		"&\24\2\u0287\u0288\5:\36\2\u0288\u028a\3\2\2\2\u0289\u027b\3\2\2\2\u0289"+
		"\u027f\3\2\2\2\u0289\u0283\3\2\2\2\u028a%\3\2\2\2\u028b\u028c\5(\25\2"+
		"\u028c\'\3\2\2\2\u028d\u0295\5*\26\2\u028e\u0290\7C\2\2\u028f\u0291\7"+
		"|\2\2\u0290\u028f\3\2\2\2\u0290\u0291\3\2\2\2\u0291\u0292\3\2\2\2\u0292"+
		"\u0294\5*\26\2\u0293\u028e\3\2\2\2\u0294\u0297\3\2\2\2\u0295\u0293\3\2"+
		"\2\2\u0295\u0296\3\2\2\2\u0296)\3\2\2\2\u0297\u0295\3\2\2\2\u0298\u029f"+
		"\7q\2\2\u0299\u029f\5,\27\2\u029a\u029f\5.\30\2\u029b\u029f\5T+\2\u029c"+
		"\u029f\5\f\7\2\u029d\u029f\5 \21\2\u029e\u0298\3\2\2\2\u029e\u0299\3\2"+
		"\2\2\u029e\u029a\3\2\2\2\u029e\u029b\3\2\2\2\u029e\u029c\3\2\2\2\u029e"+
		"\u029d\3\2\2\2\u029f+\3\2\2\2\u02a0\u02a1\7N\2\2\u02a1\u02a2\5\f\7\2\u02a2"+
		"-\3\2\2\2\u02a3\u02a4\7a\2\2\u02a4\u02a8\5\n\6\2\u02a5\u02a6\7b\2\2\u02a6"+
		"\u02a8\5\n\6\2\u02a7\u02a3\3\2\2\2\u02a7\u02a5\3\2\2\2\u02a8/\3\2\2\2"+
		"\u02a9\u02ae\5\64\33\2\u02aa\u02ac\7C\2\2\u02ab\u02ad\7|\2\2\u02ac\u02ab"+
		"\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02af\3\2\2\2\u02ae\u02aa\3\2\2\2\u02ae"+
		"\u02af\3\2\2\2\u02af\u02c1\3\2\2\2\u02b0\u02b1\5\64\33\2\u02b1\u02b3\7"+
		"C\2\2\u02b2\u02b4\7|\2\2\u02b3\u02b2\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4"+
		"\u02b5\3\2\2\2\u02b5\u02b6\5.\30\2\u02b6\u02c1\3\2\2\2\u02b7\u02bc\5R"+
		"*\2\u02b8\u02ba\7C\2\2\u02b9\u02bb\7|\2\2\u02ba\u02b9\3\2\2\2\u02ba\u02bb"+
		"\3\2\2\2\u02bb\u02bd\3\2\2\2\u02bc\u02b8\3\2\2\2\u02bc\u02bd\3\2\2\2\u02bd"+
		"\u02c1\3\2\2\2\u02be\u02c1\5.\30\2\u02bf\u02c1\5 \21\2\u02c0\u02a9\3\2"+
		"\2\2\u02c0\u02b0\3\2\2\2\u02c0\u02b7\3\2\2\2\u02c0\u02be\3\2\2\2\u02c0"+
		"\u02bf\3\2\2\2\u02c1\61\3\2\2\2\u02c2\u02c4\7=\2\2\u02c3\u02c5\7|\2\2"+
		"\u02c4\u02c3\3\2\2\2\u02c4\u02c5\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u02ee"+
		"\7>\2\2\u02c7\u02c9\7=\2\2\u02c8\u02ca\7|\2\2\u02c9\u02c8\3\2\2\2\u02c9"+
		"\u02ca\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\5(\25\2\u02cc\u02ce\7C"+
		"\2\2\u02cd\u02cc\3\2\2\2\u02cd\u02ce\3\2\2\2\u02ce\u02d0\3\2\2\2\u02cf"+
		"\u02d1\7|\2\2\u02d0\u02cf\3\2\2\2\u02d0\u02d1\3\2\2\2\u02d1\u02d2\3\2"+
		"\2\2\u02d2\u02d3\7>\2\2\u02d3\u02ee\3\2\2\2\u02d4\u02d6\7=\2\2\u02d5\u02d7"+
		"\7|\2\2\u02d6\u02d5\3\2\2\2\u02d6\u02d7\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8"+
		"\u02d9\5\64\33\2\u02d9\u02db\7C\2\2\u02da\u02dc\7|\2\2\u02db\u02da\3\2"+
		"\2\2\u02db\u02dc\3\2\2\2\u02dc\u02dd\3\2\2\2\u02dd\u02df\5\"\22\2\u02de"+
		"\u02e0\7|\2\2\u02df\u02de\3\2\2\2\u02df\u02e0\3\2\2\2\u02e0\u02e1\3\2"+
		"\2\2\u02e1\u02e2\7>\2\2\u02e2\u02ee\3\2\2\2\u02e3\u02e5\7=\2\2\u02e4\u02e6"+
		"\7|\2\2\u02e5\u02e4\3\2\2\2\u02e5\u02e6\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7"+
		"\u02e9\5\"\22\2\u02e8\u02ea\7|\2\2\u02e9\u02e8\3\2\2\2\u02e9\u02ea\3\2"+
		"\2\2\u02ea\u02eb\3\2\2\2\u02eb\u02ec\7>\2\2\u02ec\u02ee\3\2\2\2\u02ed"+
		"\u02c2\3\2\2\2\u02ed\u02c7\3\2\2\2\u02ed\u02d4\3\2\2\2\u02ed\u02e3\3\2"+
		"\2\2\u02ee\63\3\2\2\2\u02ef\u02f7\5\f\7\2\u02f0\u02f2\7C\2\2\u02f1\u02f3"+
		"\7|\2\2\u02f2\u02f1\3\2\2\2\u02f2\u02f3\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4"+
		"\u02f6\5\f\7\2\u02f5\u02f0\3\2\2\2\u02f6\u02f9\3\2\2\2\u02f7\u02f5\3\2"+
		"\2\2\u02f7\u02f8\3\2\2\2\u02f8\65\3\2\2\2\u02f9\u02f7\3\2\2\2\u02fa\u02fd"+
		"\58\35\2\u02fb\u02fd\5:\36\2\u02fc\u02fa\3\2\2\2\u02fc\u02fb\3\2\2\2\u02fd"+
		"\67\3\2\2\2\u02fe\u0300\7?\2\2\u02ff\u0301\7|\2\2\u0300\u02ff\3\2\2\2"+
		"\u0300\u0301\3\2\2\2\u0301\u0303\3\2\2\2\u0302\u0304\5<\37\2\u0303\u0302"+
		"\3\2\2\2\u0303\u0304\3\2\2\2\u0304\u0305\3\2\2\2\u0305\u0306\5\u0096L"+
		"\2\u0306\u0307\7@\2\2\u03079\3\2\2\2\u0308\u030a\7\37\2\2\u0309\u030b"+
		"\7|\2\2\u030a\u0309\3\2\2\2\u030a\u030b\3\2\2\2\u030b\u030d\3\2\2\2\u030c"+
		"\u030e\5<\37\2\u030d\u030c\3\2\2\2\u030d\u030e\3\2\2\2\u030e\u030f\3\2"+
		"\2\2\u030f\u0310\5\u0096L\2\u0310\u0311\7\"\2\2\u0311;\3\2\2\2\u0312\u0314"+
		"\7Q\2\2\u0313\u0315\5> \2\u0314\u0313\3\2\2\2\u0314\u0315\3\2\2\2\u0315"+
		"\u0316\3\2\2\2\u0316\u0317\7Q\2\2\u0317=\3\2\2\2\u0318\u031b\5\20\t\2"+
		"\u0319\u031b\5\22\n\2\u031a\u0318\3\2\2\2\u031a\u0319\3\2\2\2\u031b?\3"+
		"\2\2\2\u031c\u031e\7;\2\2\u031d\u031f\7|\2\2\u031e\u031d\3\2\2\2\u031e"+
		"\u031f\3\2\2\2\u031f\u0321\3\2\2\2\u0320\u0322\5\60\31\2\u0321\u0320\3"+
		"\2\2\2\u0321\u0322\3\2\2\2\u0322\u0324\3\2\2\2\u0323\u0325\7|\2\2\u0324"+
		"\u0323\3\2\2\2\u0324\u0325\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u033c\7<"+
		"\2\2\u0327\u0329\7o\2\2\u0328\u032a\5H%\2\u0329\u0328\3\2\2\2\u0329\u032a"+
		"\3\2\2\2\u032a\u032b\3\2\2\2\u032b\u033c\7\7\2\2\u032c\u032e\7s\2\2\u032d"+
		"\u032f\5H%\2\u032e\u032d\3\2\2\2\u032e\u032f\3\2\2\2\u032f\u0330\3\2\2"+
		"\2\u0330\u033c\7\b\2\2\u0331\u0333\7t\2\2\u0332\u0334\5B\"\2\u0333\u0332"+
		"\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u0335\3\2\2\2\u0335\u033c\7\r\2\2\u0336"+
		"\u0338\7p\2\2\u0337\u0339\5B\"\2\u0338\u0337\3\2\2\2\u0338\u0339\3\2\2"+
		"\2\u0339\u033a\3\2\2\2\u033a\u033c\7\f\2\2\u033b\u031c\3\2\2\2\u033b\u0327"+
		"\3\2\2\2\u033b\u032c\3\2\2\2\u033b\u0331\3\2\2\2\u033b\u0336\3\2\2\2\u033c"+
		"A\3\2\2\2\u033d\u033f\7\u0091\2\2\u033e\u033d\3\2\2\2\u033f\u0342\3\2"+
		"\2\2\u0340\u033e\3\2\2\2\u0340\u0341\3\2\2\2\u0341\u0343\3\2\2\2\u0342"+
		"\u0340\3\2\2\2\u0343\u034c\5D#\2\u0344\u0346\7\u0091\2\2\u0345\u0344\3"+
		"\2\2\2\u0346\u0347\3\2\2\2\u0347\u0345\3\2\2\2\u0347\u0348\3\2\2\2\u0348"+
		"\u0349\3\2\2\2\u0349\u034b\5D#\2\u034a\u0345\3\2\2\2\u034b\u034e\3\2\2"+
		"\2\u034c\u034a\3\2\2\2\u034c\u034d\3\2\2\2\u034d\u0352\3\2\2\2\u034e\u034c"+
		"\3\2\2\2\u034f\u0351\7\u0091\2\2\u0350\u034f\3\2\2\2\u0351\u0354\3\2\2"+
		"\2\u0352\u0350\3\2\2\2\u0352\u0353\3\2\2\2\u0353C\3\2\2\2\u0354\u0352"+
		"\3\2\2\2\u0355\u0358\7\u0092\2\2\u0356\u0358\5F$\2\u0357\u0355\3\2\2\2"+
		"\u0357\u0356\3\2\2\2\u0358\u0359\3\2\2\2\u0359\u0357\3\2\2\2\u0359\u035a"+
		"\3\2\2\2\u035aE\3\2\2\2\u035b\u035c\7\u0090\2\2\u035c\u035d\5\4\3\2\u035d"+
		"\u035e\7\17\2\2\u035eG\3\2\2\2\u035f\u0361\7\u0093\2\2\u0360\u035f\3\2"+
		"\2\2\u0361\u0364\3\2\2\2\u0362\u0360\3\2\2\2\u0362\u0363\3\2\2\2\u0363"+
		"\u0365\3\2\2\2\u0364\u0362\3\2\2\2\u0365\u036e\5J&\2\u0366\u0368\7\u0093"+
		"\2\2\u0367\u0366\3\2\2\2\u0368\u0369\3\2\2\2\u0369\u0367\3\2\2\2\u0369"+
		"\u036a\3\2\2\2\u036a\u036b\3\2\2\2\u036b\u036d\5J&\2\u036c\u0367\3\2\2"+
		"\2\u036d\u0370\3\2\2\2\u036e\u036c\3\2\2\2\u036e\u036f\3\2\2\2\u036f\u0374"+
		"\3\2\2\2\u0370\u036e\3\2\2\2\u0371\u0373\7\u0093\2\2\u0372\u0371\3\2\2"+
		"\2\u0373\u0376\3\2\2\2\u0374\u0372\3\2\2\2\u0374\u0375\3\2\2\2\u0375I"+
		"\3\2\2\2\u0376\u0374\3\2\2\2\u0377\u0379\7\u0094\2\2\u0378\u0377\3\2\2"+
		"\2\u0379\u037a\3\2\2\2\u037a\u0378\3\2\2\2\u037a\u037b\3\2\2\2\u037bK"+
		"\3\2\2\2\u037c\u037e\7?\2\2\u037d\u037f\7|\2\2\u037e\u037d\3\2\2\2\u037e"+
		"\u037f\3\2\2\2\u037f\u0384\3\2\2\2\u0380\u0382\5N(\2\u0381\u0383\7C\2"+
		"\2\u0382\u0381\3\2\2\2\u0382\u0383\3\2\2\2\u0383\u0385\3\2\2\2\u0384\u0380"+
		"\3\2\2\2\u0384\u0385\3\2\2\2\u0385\u0387\3\2\2\2\u0386\u0388\7|\2\2\u0387"+
		"\u0386\3\2\2\2\u0387\u0388\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038a\7@"+
		"\2\2\u038aM\3\2\2\2\u038b\u0393\5P)\2\u038c\u038e\7C\2\2\u038d\u038f\7"+
		"|\2\2\u038e\u038d\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u0390\3\2\2\2\u0390"+
		"\u0392\5P)\2\u0391\u038c\3\2\2\2\u0392\u0395\3\2\2\2\u0393\u0391\3\2\2"+
		"\2\u0393\u0394\3\2\2\2\u0394O\3\2\2\2\u0395\u0393\3\2\2\2\u0396\u039a"+
		"\5T+\2\u0397\u0398\7b\2\2\u0398\u039a\5\f\7\2\u0399\u0396\3\2\2\2\u0399"+
		"\u0397\3\2\2\2\u039aQ\3\2\2\2\u039b\u03a3\5T+\2\u039c\u039e\7C\2\2\u039d"+
		"\u039f\7|\2\2\u039e\u039d\3\2\2\2\u039e\u039f\3\2\2\2\u039f\u03a0\3\2"+
		"\2\2\u03a0\u03a2\5T+\2\u03a1\u039c\3\2\2\2\u03a2\u03a5\3\2\2\2\u03a3\u03a1"+
		"\3\2\2\2\u03a3\u03a4\3\2\2\2\u03a4S\3\2\2\2\u03a5\u03a3\3\2\2\2\u03a6"+
		"\u03a9\5\f\7\2\u03a7\u03a9\5\u00ceh\2\u03a8\u03a6\3\2\2\2\u03a8\u03a7"+
		"\3\2\2\2\u03a9\u03aa\3\2\2\2\u03aa\u03af\t\21\2\2\u03ab\u03ad\7|\2\2\u03ac"+
		"\u03ab\3\2\2\2\u03ac\u03ad\3\2\2\2\u03ad\u03ae\3\2\2\2\u03ae\u03b0\5\f"+
		"\7\2\u03af\u03ac\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0U\3\2\2\2\u03b1\u03b3"+
		"\7\35\2\2\u03b2\u03b4\7|\2\2\u03b3\u03b2\3\2\2\2\u03b3\u03b4\3\2\2\2\u03b4"+
		"\u03b5\3\2\2\2\u03b5\u03b6\5Z.\2\u03b6\u03b7\5h\65\2\u03b7\u03b8\5\u0096"+
		"L\2\u03b8\u03b9\7\"\2\2\u03b9\u03c7\3\2\2\2\u03ba\u03bc\7\35\2\2\u03bb"+
		"\u03bd\7|\2\2\u03bc\u03bb\3\2\2\2\u03bc\u03bd\3\2\2\2\u03bd\u03be\3\2"+
		"\2\2\u03be\u03bf\5d\63\2\u03bf\u03c0\5h\65\2\u03c0\u03c2\7S\2\2\u03c1"+
		"\u03c3\7|\2\2\u03c2\u03c1\3\2\2\2\u03c2\u03c3\3\2\2\2\u03c3\u03c4\3\2"+
		"\2\2\u03c4\u03c5\5\f\7\2\u03c5\u03c7\3\2\2\2\u03c6\u03b1\3\2\2\2\u03c6"+
		"\u03ba\3\2\2\2\u03c7W\3\2\2\2\u03c8\u03ce\7J\2\2\u03c9\u03cb\7=\2\2\u03ca"+
		"\u03cc\5j\66\2\u03cb\u03ca\3\2\2\2\u03cb\u03cc\3\2\2\2\u03cc\u03cd\3\2"+
		"\2\2\u03cd\u03cf\7>\2\2\u03ce\u03c9\3\2\2\2\u03ce\u03cf\3\2\2\2\u03cf"+
		"\u03d0\3\2\2\2\u03d0\u03d1\5\66\34\2\u03d1Y\3\2\2\2\u03d2\u03de\5^\60"+
		"\2\u03d3\u03d5\5\\/\2\u03d4\u03d6\7|\2\2\u03d5\u03d4\3\2\2\2\u03d5\u03d6"+
		"\3\2\2\2\u03d6\u03d7\3\2\2\2\u03d7\u03d9\t\17\2\2\u03d8\u03da\7|\2\2\u03d9"+
		"\u03d8\3\2\2\2\u03d9\u03da\3\2\2\2\u03da\u03db\3\2\2\2\u03db\u03dc\5^"+
		"\60\2\u03dc\u03de\3\2\2\2\u03dd\u03d2\3\2\2\2\u03dd\u03d3\3\2\2\2\u03de"+
		"[\3\2\2\2\u03df\u03e6\5\u00acW\2\u03e0\u03e6\5\u00aeX\2\u03e1\u03e2\7"+
		"=\2\2\u03e2\u03e3\5\n\6\2\u03e3\u03e4\7>\2\2\u03e4\u03e6\3\2\2\2\u03e5"+
		"\u03df\3\2\2\2\u03e5\u03e0\3\2\2\2\u03e5\u03e1\3\2\2\2\u03e6]\3\2\2\2"+
		"\u03e7\u03ea\5b\62\2\u03e8\u03ea\5`\61\2\u03e9\u03e7\3\2\2\2\u03e9\u03e8"+
		"\3\2\2\2\u03ea_\3\2\2\2\u03eb\u03ec\7\u0084\2\2\u03eca\3\2\2\2\u03ed\u03f1"+
		"\5d\63\2\u03ee\u03f1\5\u00d0i\2\u03ef\u03f1\5\u00ceh\2\u03f0\u03ed\3\2"+
		"\2\2\u03f0\u03ee\3\2\2\2\u03f0\u03ef\3\2\2\2\u03f1c\3\2\2\2\u03f2\u03f6"+
		"\7\177\2\2\u03f3\u03f6\7\u0083\2\2\u03f4\u03f6\5f\64\2\u03f5\u03f2\3\2"+
		"\2\2\u03f5\u03f3\3\2\2\2\u03f5\u03f4\3\2\2\2\u03f6e\3\2\2\2\u03f7\u03fb"+
		"\7\177\2\2\u03f8\u03fb\7\u0083\2\2\u03f9\u03fb\5\u00ceh\2\u03fa\u03f7"+
		"\3\2\2\2\u03fa\u03f8\3\2\2\2\u03fa\u03f9\3\2\2\2\u03fb\u03fc\3\2\2\2\u03fc"+
		"\u03fd\t\22\2\2\u03fdg\3\2\2\2\u03fe\u0400\7=\2\2\u03ff\u0401\7|\2\2\u0400"+
		"\u03ff\3\2\2\2\u0400\u0401\3\2\2\2\u0401\u0403\3\2\2\2\u0402\u0404\5j"+
		"\66\2\u0403\u0402\3\2\2\2\u0403\u0404\3\2\2\2\u0404\u0406\3\2\2\2\u0405"+
		"\u0407\7|\2\2\u0406\u0405\3\2\2\2\u0406\u0407\3\2\2\2\u0407\u0408\3\2"+
		"\2\2\u0408\u040d\7>\2\2\u0409\u040b\5j\66\2\u040a\u0409\3\2\2\2\u040a"+
		"\u040b\3\2\2\2\u040b\u040d\3\2\2\2\u040c\u03fe\3\2\2\2\u040c\u040a\3\2"+
		"\2\2\u040di\3\2\2\2\u040e\u0416\5l\67\2\u040f\u0411\7C\2\2\u0410\u0412"+
		"\7|\2\2\u0411\u0410\3\2\2\2\u0411\u0412\3\2\2\2\u0412\u0413\3\2\2\2\u0413"+
		"\u0415\5l\67\2\u0414\u040f\3\2\2\2\u0415\u0418\3\2\2\2\u0416\u0414\3\2"+
		"\2\2\u0416\u0417\3\2\2\2\u0417k\3\2\2\2\u0418\u0416\3\2\2\2\u0419\u0420"+
		"\5p9\2\u041a\u0420\5n8\2\u041b\u0420\5r:\2\u041c\u0420\5t;\2\u041d\u0420"+
		"\5v<\2\u041e\u0420\5x=\2\u041f\u0419\3\2\2\2\u041f\u041a\3\2\2\2\u041f"+
		"\u041b\3\2\2\2\u041f\u041c\3\2\2\2\u041f\u041d\3\2\2\2\u041f\u041e\3\2"+
		"\2\2\u0420m\3\2\2\2\u0421\u0422\7\177\2\2\u0422o\3\2\2\2\u0423\u0424\7"+
		"\177\2\2\u0424\u0426\7S\2\2\u0425\u0427\7|\2\2\u0426\u0425\3\2\2\2\u0426"+
		"\u0427\3\2\2\2\u0427\u0428\3\2\2\2\u0428\u0429\5\f\7\2\u0429q\3\2\2\2"+
		"\u042a\u042c\7a\2\2\u042b\u042d\7\177\2\2\u042c\u042b\3\2\2\2\u042c\u042d"+
		"\3\2\2\2\u042ds\3\2\2\2\u042e\u0430\7b\2\2\u042f\u0431\7\177\2\2\u0430"+
		"\u042f\3\2\2\2\u0430\u0431\3\2\2\2\u0431u\3\2\2\2\u0432\u0433\7\177\2"+
		"\2\u0433\u0438\7A\2\2\u0434\u0436\7|\2\2\u0435\u0434\3\2\2\2\u0435\u0436"+
		"\3\2\2\2\u0436\u0437\3\2\2\2\u0437\u0439\5\f\7\2\u0438\u0435\3\2\2\2\u0438"+
		"\u0439\3\2\2\2\u0439w\3\2\2\2\u043a\u043c\7N\2\2\u043b\u043d\7\177\2\2"+
		"\u043c\u043b\3\2\2\2\u043c\u043d\3\2\2\2\u043dy\3\2\2\2\u043e\u0440\7"+
		"&\2\2\u043f\u0441\7|\2\2\u0440\u043f\3\2\2\2\u0440\u0441\3\2\2\2\u0441"+
		"\u0442\3\2\2\2\u0442\u0443\5\n\6\2\u0443\u0447\5|?\2\u0444\u0446\5~@\2"+
		"\u0445\u0444\3\2\2\2\u0446\u0449\3\2\2\2\u0447\u0445\3\2\2\2\u0447\u0448"+
		"\3\2\2\2\u0448\u044b\3\2\2\2\u0449\u0447\3\2\2\2\u044a\u044c\5\u0080A"+
		"\2\u044b\u044a\3\2\2\2\u044b\u044c\3\2\2\2\u044c\u044d\3\2\2\2\u044d\u044e"+
		"\7\"\2\2\u044e{\3\2\2\2\u044f\u0451\t\2\2\2\u0450\u044f\3\2\2\2\u0451"+
		"\u0452\3\2\2\2\u0452\u0450\3\2\2\2\u0452\u0453\3\2\2\2\u0453\u0454\3\2"+
		"\2\2\u0454\u045b\5\4\3\2\u0455\u0457\t\2\2\2\u0456\u0455\3\2\2\2\u0456"+
		"\u0457\3\2\2\2\u0457\u0458\3\2\2\2\u0458\u0459\7\63\2\2\u0459\u045b\5"+
		"\4\3\2\u045a\u0450\3\2\2\2\u045a\u0456\3\2\2\2\u045b}\3\2\2\2\u045c\u045e"+
		"\7!\2\2\u045d\u045f\7|\2\2\u045e\u045d\3\2\2\2\u045e\u045f\3\2\2\2\u045f"+
		"\u0460\3\2\2\2\u0460\u0461\5\n\6\2\u0461\u0462\5|?\2\u0462\177\3\2\2\2"+
		"\u0463\u0464\7 \2\2\u0464\u0465\5\4\3\2\u0465\u0081\3\2\2\2\u0466\u0468"+
		"\7\66\2\2\u0467\u0469\7|\2\2\u0468\u0467\3\2\2\2\u0468\u0469\3\2\2\2\u0469"+
		"\u046a\3\2\2\2\u046a\u046b\5\n\6\2\u046b\u046d\5|?\2\u046c\u046e\5\u0080"+
		"A\2\u046d\u046c\3\2\2\2\u046d\u046e\3\2\2\2\u046e\u046f\3\2\2\2\u046f"+
		"\u0470\7\"\2\2\u0470\u0083\3\2\2\2\u0471\u0473\7\33\2\2\u0472\u0474\7"+
		"|\2\2\u0473\u0472\3\2\2\2\u0473\u0474\3\2\2\2\u0474\u0476\3\2\2\2\u0475"+
		"\u0477\5\n\6\2\u0476\u0475\3\2\2\2\u0476\u0477\3\2\2\2\u0477\u047b\3\2"+
		"\2\2\u0478\u047a\t\2\2\2\u0479\u0478\3\2\2\2\u047a\u047d\3\2\2\2\u047b"+
		"\u0479\3\2\2\2\u047b\u047c\3\2\2\2\u047c\u047f\3\2\2\2\u047d\u047b\3\2"+
		"\2\2\u047e\u0480\5\u0086D\2\u047f\u047e\3\2\2\2\u0480\u0481\3\2\2\2\u0481"+
		"\u047f\3\2\2\2\u0481\u0482\3\2\2\2\u0482\u0484\3\2\2\2\u0483\u0485\5\u0080"+
		"A\2\u0484\u0483\3\2\2\2\u0484\u0485\3\2\2\2\u0485\u0486\3\2\2\2\u0486"+
		"\u0487\7\"\2\2\u0487\u0085\3\2\2\2\u0488\u048a\78\2\2\u0489\u048b\7|\2"+
		"\2\u048a\u0489\3\2\2\2\u048a\u048b\3\2\2\2\u048b\u048c\3\2\2\2\u048c\u048d"+
		"\5\u0088E\2\u048d\u048e\5|?\2\u048e\u0087\3\2\2\2\u048f\u0492\5\64\33"+
		"\2\u0490\u0491\7C\2\2\u0491\u0493\5.\30\2\u0492\u0490\3\2\2\2\u0492\u0493"+
		"\3\2\2\2\u0493\u0496\3\2\2\2\u0494\u0496\5.\30\2\u0495\u048f\3\2\2\2\u0495"+
		"\u0494\3\2\2\2\u0496\u0089\3\2\2\2\u0497\u0499\79\2\2\u0498\u049a\7|\2"+
		"\2\u0499\u0498\3\2\2\2\u0499\u049a\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u049c"+
		"\5\n\6\2\u049c\u049d\5\u008cG\2\u049d\u049e\7\"\2\2\u049e\u008b\3\2\2"+
		"\2\u049f\u04a1\t\2\2\2\u04a0\u049f\3\2\2\2\u04a1\u04a2\3\2\2\2\u04a2\u04a0"+
		"\3\2\2\2\u04a2\u04a3\3\2\2\2\u04a3\u04a4\3\2\2\2\u04a4\u04a8\5\4\3\2\u04a5"+
		"\u04a6\7\37\2\2\u04a6\u04a8\5\4\3\2\u04a7\u04a0\3\2\2\2\u04a7\u04a5\3"+
		"\2\2\2\u04a8\u008d\3\2\2\2\u04a9\u04ab\7\67\2\2\u04aa\u04ac\7|\2\2\u04ab"+
		"\u04aa\3\2\2\2\u04ab\u04ac\3\2\2\2\u04ac\u04ad\3\2\2\2\u04ad\u04ae\5\n"+
		"\6\2\u04ae\u04af\5\u008cG\2\u04af\u04b0\7\"\2\2\u04b0\u008f\3\2\2\2\u04b1"+
		"\u04b3\7$\2\2\u04b2\u04b4\7|\2\2\u04b3\u04b2\3\2\2\2\u04b3\u04b4\3\2\2"+
		"\2\u04b4\u04b5\3\2\2\2\u04b5\u04b6\5\u0092J\2\u04b6\u04b8\7\'\2\2\u04b7"+
		"\u04b9\7|\2\2\u04b8\u04b7\3\2\2\2\u04b8\u04b9\3\2\2\2\u04b9\u04ba\3\2"+
		"\2\2\u04ba\u04bb\5\n\6\2\u04bb\u04bc\5\u008cG\2\u04bc\u04bd\7\"\2\2\u04bd"+
		"\u0091\3\2\2\2\u04be\u04c1\5\20\t\2\u04bf\u04c1\5\22\n\2\u04c0\u04be\3"+
		"\2\2\2\u04c0\u04bf\3\2\2\2\u04c1\u0093\3\2\2\2\u04c2\u04c3\7\31\2\2\u04c3"+
		"\u04c4\5\u0096L\2\u04c4\u04c5\7\"\2\2\u04c5\u0095\3\2\2\2\u04c6\u04ca"+
		"\5\4\3\2\u04c7\u04c9\5\u0098M\2\u04c8\u04c7\3\2\2\2\u04c9\u04cc\3\2\2"+
		"\2\u04ca\u04c8\3\2\2\2\u04ca\u04cb\3\2\2\2\u04cb\u04ce\3\2\2\2\u04cc\u04ca"+
		"\3\2\2\2\u04cd\u04cf\5\u0080A\2\u04ce\u04cd\3\2\2\2\u04ce\u04cf\3\2\2"+
		"\2\u04cf\u04d1\3\2\2\2\u04d0\u04d2\5\u009eP\2\u04d1\u04d0\3\2\2\2\u04d1"+
		"\u04d2\3\2\2\2\u04d2\u0097\3\2\2\2\u04d3\u04d5\7.\2\2\u04d4\u04d6\5\u009a"+
		"N\2\u04d5\u04d4\3\2\2\2\u04d5\u04d6\3\2\2\2\u04d6\u04d8\3\2\2\2\u04d7"+
		"\u04d9\7|\2\2\u04d8\u04d7\3\2\2\2\u04d8\u04d9\3\2\2\2\u04d9\u04db\3\2"+
		"\2\2\u04da\u04dc\5\u009cO\2\u04db\u04da\3\2\2\2\u04db\u04dc\3\2\2\2\u04dc"+
		"\u04dd\3\2\2\2\u04dd\u04de\5|?\2\u04de\u0099\3\2\2\2\u04df\u04e2\5\f\7"+
		"\2\u04e0\u04e2\5\32\16\2\u04e1\u04df\3\2\2\2\u04e1\u04e0\3\2\2\2\u04e2"+
		"\u009b\3\2\2\2\u04e3\u04e4\7I\2\2\u04e4\u04e5\5\20\t\2\u04e5\u009d\3\2"+
		"\2\2\u04e6\u04e7\7#\2\2\u04e7\u04e8\5\4\3\2\u04e8\u009f\3\2\2\2\u04e9"+
		"\u04eb\7\34\2\2\u04ea\u04ec\7|\2\2\u04eb\u04ea\3\2\2\2\u04eb\u04ec\3\2"+
		"\2\2\u04ec\u04ed\3\2\2\2\u04ed\u04f3\5\u00a2R\2\u04ee\u04f0\7[\2\2\u04ef"+
		"\u04f1\7|\2\2\u04f0\u04ef\3\2\2\2\u04f0\u04f1\3\2\2\2\u04f1\u04f2\3\2"+
		"\2\2\u04f2\u04f4\5\n\6\2\u04f3\u04ee\3\2\2\2\u04f3\u04f4\3\2\2\2\u04f4"+
		"\u04f5\3\2\2\2\u04f5\u04f6\5\u0096L\2\u04f6\u04f7\7\"\2\2\u04f7\u050a"+
		"\3\2\2\2\u04f8\u04fa\7\34\2\2\u04f9\u04fb\7|\2\2\u04fa\u04f9\3\2\2\2\u04fa"+
		"\u04fb\3\2\2\2\u04fb\u04fc\3\2\2\2\u04fc\u04fe\7]\2\2\u04fd\u04ff\7|\2"+
		"\2\u04fe\u04fd\3\2\2\2\u04fe\u04ff\3\2\2\2\u04ff\u0500\3\2\2\2\u0500\u0502"+
		"\5\n\6\2\u0501\u0503\t\2\2\2\u0502\u0501\3\2\2\2\u0503\u0504\3\2\2\2\u0504"+
		"\u0502\3\2\2\2\u0504\u0505\3\2\2\2\u0505\u0506\3\2\2\2\u0506\u0507\5\u0096"+
		"L\2\u0507\u0508\7\"\2\2\u0508\u050a\3\2\2\2\u0509\u04e9\3\2\2\2\u0509"+
		"\u04f8\3\2\2\2\u050a\u00a1\3\2\2\2\u050b\u050e\5\u00b0Y\2\u050c\u050e"+
		"\7\u0083\2\2\u050d\u050b\3\2\2\2\u050d\u050c\3\2\2\2\u050e\u00a3\3\2\2"+
		"\2\u050f\u0511\7(\2\2\u0510\u0512\7|\2\2\u0511\u0510\3\2\2\2\u0511\u0512"+
		"\3\2\2\2\u0512\u0513\3\2\2\2\u0513\u0514\5\u00a2R\2\u0514\u0515\5\u0096"+
		"L\2\u0515\u0516\7\"\2\2\u0516\u00a5\3\2\2\2\u0517\u051d\7:\2\2\u0518\u051a"+
		"\7=\2\2\u0519\u051b\5(\25\2\u051a\u0519\3\2\2\2\u051a\u051b\3\2\2\2\u051b"+
		"\u051c\3\2\2\2\u051c\u051e\7>\2\2\u051d\u0518\3\2\2\2\u051d\u051e\3\2"+
		"\2\2\u051e\u00a7\3\2\2\2\u051f\u0520\t\23\2\2\u0520\u00a9\3\2\2\2\u0521"+
		"\u0524\5\u00acW\2\u0522\u0524\5\u00aeX\2\u0523\u0521\3\2\2\2\u0523\u0522"+
		"\3\2\2\2\u0524\u00ab\3\2\2\2\u0525\u0526\t\24\2\2\u0526\u00ad\3\2\2\2"+
		"\u0527\u052f\7*\2\2\u0528\u052f\7\64\2\2\u0529\u052f\7%\2\2\u052a\u052f"+
		"\7\61\2\2\u052b\u052f\7\24\2\2\u052c\u052f\7\22\2\2\u052d\u052f\7\23\2"+
		"\2\u052e\u0527\3\2\2\2\u052e\u0528\3\2\2\2\u052e\u0529\3\2\2\2\u052e\u052a"+
		"\3\2\2\2\u052e\u052b\3\2\2\2\u052e\u052c\3\2\2\2\u052e\u052d\3\2\2\2\u052f"+
		"\u00af\3\2\2\2\u0530\u0531\7B\2\2\u0531\u0537\7\u0083\2\2\u0532\u0533"+
		"\5\16\b\2\u0533\u0534\7B\2\2\u0534\u0535\7\u0083\2\2\u0535\u0537\3\2\2"+
		"\2\u0536\u0530\3\2\2\2\u0536\u0532\3\2\2\2\u0537\u00b1\3\2\2\2\u0538\u0541"+
		"\7r\2\2\u0539\u0541\5\u00c8e\2\u053a\u0541\5\u00b4[\2\u053b\u053d\7\5"+
		"\2\2\u053c\u053e\7\u0096\2\2\u053d\u053c\3\2\2\2\u053d\u053e\3\2\2\2\u053e"+
		"\u053f\3\2\2\2\u053f\u0541\7\u0095\2\2\u0540\u0538\3\2\2\2\u0540\u0539"+
		"\3\2\2\2\u0540\u053a\3\2\2\2\u0540\u053b\3\2\2\2\u0541\u00b3\3\2\2\2\u0542"+
		"\u0546\7~\2\2\u0543\u0544\7A\2\2\u0544\u0546\5\u00b6\\\2\u0545\u0542\3"+
		"\2\2\2\u0545\u0543\3\2\2\2\u0546\u00b5\3\2\2\2\u0547\u0548\b\\\1\2\u0548"+
		"\u054b\5\u00ba^\2\u0549\u054b\5\u00be`\2\u054a\u0547\3\2\2\2\u054a\u0549"+
		"\3\2\2\2\u054b\u0554\3\2\2\2\u054c\u054e\f\3\2\2\u054d\u054f\5\u00b6\\"+
		"\2\u054e\u054d\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u054e\3\2\2\2\u0550\u0551"+
		"\3\2\2\2\u0551\u0553\3\2\2\2\u0552\u054c\3\2\2\2\u0553\u0556\3\2\2\2\u0554"+
		"\u0552\3\2\2\2\u0554\u0555\3\2\2\2\u0555\u00b7\3\2\2\2\u0556\u0554\3\2"+
		"\2\2\u0557\u0559\7k\2\2\u0558\u055a\7\20\2\2\u0559\u0558\3\2\2\2\u0559"+
		"\u055a\3\2\2\2\u055a\u055b\3\2\2\2\u055b\u056f\7\6\2\2\u055c\u0561\7l"+
		"\2\2\u055d\u0560\7\21\2\2\u055e\u0560\5\u00bc_\2\u055f\u055d\3\2\2\2\u055f"+
		"\u055e\3\2\2\2\u0560\u0563\3\2\2\2\u0561\u055f\3\2\2\2\u0561\u0562\3\2"+
		"\2\2\u0562\u0564\3\2\2\2\u0563\u0561\3\2\2\2\u0564\u056f\7\n\2\2\u0565"+
		"\u056a\7n\2\2\u0566\u0569\7\21\2\2\u0567\u0569\5\u00bc_\2\u0568\u0566"+
		"\3\2\2\2\u0568\u0567\3\2\2\2\u0569\u056c\3\2\2\2\u056a\u0568\3\2\2\2\u056a"+
		"\u056b\3\2\2\2\u056b\u056d\3\2\2\2\u056c\u056a\3\2\2\2\u056d\u056f\7\13"+
		"\2\2\u056e\u0557\3\2\2\2\u056e\u055c\3\2\2\2\u056e\u0565\3\2\2\2\u056f"+
		"\u00b9\3\2\2\2\u0570\u0577\7i\2\2\u0571\u0573\7j\2\2\u0572\u0574\7\u0089"+
		"\2\2\u0573\u0572\3\2\2\2\u0573\u0574\3\2\2\2\u0574\u0575\3\2\2\2\u0575"+
		"\u0577\7\u0088\2\2\u0576\u0570\3\2\2\2\u0576\u0571\3\2\2\2\u0577\u00bb"+
		"\3\2\2\2\u0578\u0579\7\u008c\2\2\u0579\u057a\5\4\3\2\u057a\u057b\7\16"+
		"\2\2\u057b\u00bd\3\2\2\2\u057c\u057f\7j\2\2\u057d\u0580\7\u0089\2\2\u057e"+
		"\u0580\5\u00c0a\2\u057f\u057d\3\2\2\2\u057f\u057e\3\2\2\2\u0580\u0581"+
		"\3\2\2\2\u0581\u057f\3\2\2\2\u0581\u0582\3\2\2\2\u0582\u0583\3\2\2\2\u0583"+
		"\u0584\7\u0088\2\2\u0584\u00bf\3\2\2\2\u0585\u0586\7\u008b\2\2\u0586\u0587"+
		"\5\4\3\2\u0587\u0588\7\3\2\2\u0588\u00c1\3\2\2\2\u0589\u058c\7\5\2\2\u058a"+
		"\u058d\7\u0096\2\2\u058b\u058d\5\u00c4c\2\u058c\u058a\3\2\2\2\u058c\u058b"+
		"\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u058c\3\2\2\2\u058e\u058f\3\2\2\2\u058f"+
		"\u0590\3\2\2\2\u0590\u0591\7\u0095\2\2\u0591\u00c3\3\2\2\2\u0592\u0593"+
		"\7\u0097\2\2\u0593\u0594\5\4\3\2\u0594\u0595\7\4\2\2\u0595\u00c5\3\2\2"+
		"\2\u0596\u059b\7m\2\2\u0597\u059a\7\21\2\2\u0598\u059a\5\u00bc_\2\u0599"+
		"\u0597\3\2\2\2\u0599\u0598\3\2\2\2\u059a\u059d\3\2\2\2\u059b\u0599\3\2"+
		"\2\2\u059b\u059c\3\2\2\2\u059c\u059e\3\2\2\2\u059d\u059b\3\2\2\2\u059e"+
		"\u059f\7\t\2\2\u059f\u00c7\3\2\2\2\u05a0\u05a2\t\b\2\2\u05a1\u05a0\3\2"+
		"\2\2\u05a1\u05a2\3\2\2\2\u05a2\u05a3\3\2\2\2\u05a3\u05a4\5\u00caf\2\u05a4"+
		"\u00c9\3\2\2\2\u05a5\u05a6\t\25\2\2\u05a6\u00cb\3\2\2\2\u05a7\u05aa\5"+
		"^\60\2\u05a8\u05aa\5\u00b4[\2\u05a9\u05a7\3\2\2\2\u05a9\u05a8\3\2\2\2"+
		"\u05aa\u00cd\3\2\2\2\u05ab\u05ac\t\26\2\2\u05ac\u00cf\3\2\2\2\u05ad\u05c9"+
		"\7V\2\2\u05ae\u05c9\7N\2\2\u05af\u05c9\7Q\2\2\u05b0\u05c9\7W\2\2\u05b1"+
		"\u05c9\7T\2\2\u05b2\u05c9\7U\2\2\u05b3\u05c9\7X\2\2\u05b4\u05c9\7Y\2\2"+
		"\u05b5\u05c9\7Z\2\2\u05b6\u05c9\7[\2\2\u05b7\u05c9\7\\\2\2\u05b8\u05c9"+
		"\7]\2\2\u05b9\u05c9\7^\2\2\u05ba\u05c9\7_\2\2\u05bb\u05c9\7`\2\2\u05bc"+
		"\u05c9\7a\2\2\u05bd\u05c9\7c\2\2\u05be\u05c9\7d\2\2\u05bf\u05c9\7b\2\2"+
		"\u05c0\u05c9\7e\2\2\u05c1\u05c9\7f\2\2\u05c2\u05c9\7g\2\2\u05c3\u05c4"+
		"\7;\2\2\u05c4\u05c9\7<\2\2\u05c5\u05c6\7;\2\2\u05c6\u05c7\7<\2\2\u05c7"+
		"\u05c9\7S\2\2\u05c8\u05ad\3\2\2\2\u05c8\u05ae\3\2\2\2\u05c8\u05af\3\2"+
		"\2\2\u05c8\u05b0\3\2\2\2\u05c8\u05b1\3\2\2\2\u05c8\u05b2\3\2\2\2\u05c8"+
		"\u05b3\3\2\2\2\u05c8\u05b4\3\2\2\2\u05c8\u05b5\3\2\2\2\u05c8\u05b6\3\2"+
		"\2\2\u05c8\u05b7\3\2\2\2\u05c8\u05b8\3\2\2\2\u05c8\u05b9\3\2\2\2\u05c8"+
		"\u05ba\3\2\2\2\u05c8\u05bb\3\2\2\2\u05c8\u05bc\3\2\2\2\u05c8\u05bd\3\2"+
		"\2\2\u05c8\u05be\3\2\2\2\u05c8\u05bf\3\2\2\2\u05c8\u05c0\3\2\2\2\u05c8"+
		"\u05c1\3\2\2\2\u05c8\u05c2\3\2\2\2\u05c8\u05c3\3\2\2\2\u05c8\u05c5\3\2"+
		"\2\2\u05c9\u00d1\3\2\2\2\u00e8\u00d8\u00dc\u00e1\u00e8\u00ed\u00f3\u00f7"+
		"\u00fd\u0102\u0107\u0115\u011a\u011f\u0126\u0128\u012d\u0130\u0135\u013a"+
		"\u0141\u0148\u014f\u0154\u0159\u015c\u0161\u0167\u016d\u0173\u0179\u017f"+
		"\u0185\u018b\u0191\u0197\u019b\u019f\u01a6\u01a9\u01ae\u01b1\u01b3\u01b5"+
		"\u01de\u01e1\u01ea\u01ec\u01f4\u01f9\u01fd\u0201\u0204\u020a\u020c\u020e"+
		"\u0215\u021f\u0224\u0228\u022c\u0230\u0234\u0240\u0243\u0246\u024b\u0250"+
		"\u0257\u025d\u0269\u026e\u0274\u0278\u0289\u0290\u0295\u029e\u02a7\u02ac"+
		"\u02ae\u02b3\u02ba\u02bc\u02c0\u02c4\u02c9\u02cd\u02d0\u02d6\u02db\u02df"+
		"\u02e5\u02e9\u02ed\u02f2\u02f7\u02fc\u0300\u0303\u030a\u030d\u0314\u031a"+
		"\u031e\u0321\u0324\u0329\u032e\u0333\u0338\u033b\u0340\u0347\u034c\u0352"+
		"\u0357\u0359\u0362\u0369\u036e\u0374\u037a\u037e\u0382\u0384\u0387\u038e"+
		"\u0393\u0399\u039e\u03a3\u03a8\u03ac\u03af\u03b3\u03bc\u03c2\u03c6\u03cb"+
		"\u03ce\u03d5\u03d9\u03dd\u03e5\u03e9\u03f0\u03f5\u03fa\u0400\u0403\u0406"+
		"\u040a\u040c\u0411\u0416\u041f\u0426\u042c\u0430\u0435\u0438\u043c\u0440"+
		"\u0447\u044b\u0452\u0456\u045a\u045e\u0468\u046d\u0473\u0476\u047b\u0481"+
		"\u0484\u048a\u0492\u0495\u0499\u04a2\u04a7\u04ab\u04b3\u04b8\u04c0\u04ca"+
		"\u04ce\u04d1\u04d5\u04d8\u04db\u04e1\u04eb\u04f0\u04f3\u04fa\u04fe\u0504"+
		"\u0509\u050d\u0511\u051a\u051d\u0523\u052e\u0536\u053d\u0540\u0545\u054a"+
		"\u0550\u0554\u0559\u055f\u0561\u0568\u056a\u056e\u0573\u0576\u057f\u0581"+
		"\u058c\u058e\u0599\u059b\u05a1\u05a9\u05c8";
	public static final ATN _ATN =
		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
	static {
		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy