MFortranParser2018.java

// $ANTLR 3.5.2 MFortranParser2018.g 2023-02-11 20:42:12

    package edu.udel.cis.vsl.abc.front.fortran.parse;

    import edu.udel.cis.vsl.abc.token.IF.CivlcToken;
	import edu.udel.cis.vsl.abc.front.fortran.ptree.MFPUtils;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

@SuppressWarnings("all")
public class MFortranParser2018 extends BaseMFortranParser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "ABSTRACT", "ACQUIRED_LOCK", "ALL", 
		"ALLOCATABLE", "ALLOCATE", "AND", "ASSIGNMENT", "ASSOCIATE", "ASTERISK", 
		"ASYNCHRONOUS", "BACKSPACE", "BIND", "BIN_CONST", "BLOCK", "BLOCKDATA", 
		"CALL", "CASE", "CHANGE", "CHARACTER", "CHAR_CONST", "CIVL_PRIMITIVE", 
		"CLASS", "CLOSE", "CODIMENSION", "COLON", "COLON_COLON", "COMMA", "COMMON", 
		"COMPLEX", "CONCURRENT", "CONTAINS", "CONTIGUOUS", "CONTINUE", "CONTINUE_CHAR", 
		"CRITICAL", "CYCLE", "DATA", "DEALLOCATE", "DEFAULT", "DEFERRED", "DEFINED_OP", 
		"DIGIT_STR", "DIMENSION", "DO", "DOUBLE", "DOUBLECOMPLEX", "DOUBLEPRECISION", 
		"Digit", "EDIT_DESC_MISC", "ELEMENTAL", "ELSE", "ELSEIF", "ELSEWHERE", 
		"END", "ENTRY", "ENUM", "ENUMERATOR", "EOS", "EQ", "EQUALS", "EQUIVALENCE", 
		"EQV", "EQ_EQ", "EQ_GT", "ERRMSG", "ERROR", "EVENT", "EVENTWAIT", "EXIT", 
		"EXTENDS", "EXTERNAL", "FAIL", "FAILIMAGE", "FALSE", "FILE", "FINAL", 
		"FLUSH", "FORALL", "FORM", "FORMAT", "FORMATTED", "FORMTEAM", "FUNCTION", 
		"GE", "GENERIC", "GO", "GOTO", "GREATERTHAN", "GREATERTHAN_EQ", "GT", 
		"HEX_CONST", "IDENT", "IF", "IMAGE", "IMAGES", "IMPLICIT", "IMPORT", "IMPURE", 
		"IN", "INCLUDE", "INOUT", "INQUIRE", "INTEGER", "INTENT", "INTERFACE", 
		"INTRINSIC", "IS", "KIND", "LBRACKET", "LE", "LEN", "LESSTHAN", "LESSTHAN_EQ", 
		"LINE_COMMENT", "LOCAL", "LOCAL_INT", "LOCK", "LOGICAL", "LPAREN", "LT", 
		"Letter", "MEMORY", "MINUS", "MISC_CHAR", "MODULE", "MOLD", "M_ALLOCATE_STMT_1", 
		"M_ASSIGNMENT_STMT", "M_CSTR_EDIT_DESC", "M_CTRL_EDIT_DESC", "M_DATA_EDIT_DESC", 
		"M_EOF", "M_FORALL_CONSTRUCT_STMT", "M_FORALL_STMT", "M_IF_STMT", "M_INCLUDE_NAME", 
		"M_INQUIRE_STMT_2", "M_LBL_DO_TERMINAL", "M_PTR_ASSIGNMENT_STMT", "M_REAL_CONST", 
		"M_WHERE_CONSTRUCT_STMT", "M_WHERE_STMT", "NAMELIST", "NE", "NEQV", "NONE", 
		"NON_INTRINSIC", "NON_OVERRIDABLE", "NON_RECURSIVE", "NOPASS", "NOT", 
		"NO_LANG_EXT", "NULLIFY", "OCT_CONST", "ONLY", "OPEN", "OPERATOR", "OPTIONAL", 
		"OR", "OUT", "PARAMETER", "PASS", "PAUSE", "PERCENT", "PERIOD", "PERIOD_EXPONENT", 
		"PLUS", "POINTER", "POST", "POWER", "PRAGMA", "PRECISION", "PREPROCESS_LINE", 
		"PRINT", "PRIVATE", "PROCEDURE", "PROGRAM", "PROTECTED", "PUBLIC", "PURE", 
		"QUIET", "RANK", "RBRACKET", "READ", "REAL", "RECURSIVE", "RESULT", "RETURN", 
		"REWIND", "RPAREN", "SAVE", "SELECT", "SELECTCASE", "SELECTTYPE", "SEQUENCE", 
		"SHARED", "SLASH", "SLASH_EQ", "SLASH_SLASH", "SOURCE", "STAT", "STMT_FUNCTION", 
		"STOP", "SUBMODULE", "SUBROUTINE", "SYNC", "SYNCTEAM", "Sp_Char", "TARGET", 
		"TEAM", "THEN", "TO", "TRUE", "TYPE", "UNDERSCORE", "UNFORMATTED", "UNLOCK", 
		"USE", "VALUE", "VOLATILE", "WAIT", "WHERE", "WHILE", "WRITE", "WS", "DODOT", 
		"ERRORSTOP", "SELECTRANK", "TEAM_NUMBER"
	};
	public static final int EOF=-1;
	public static final int ABSTRACT=4;
	public static final int ACQUIRED_LOCK=5;
	public static final int ALL=6;
	public static final int ALLOCATABLE=7;
	public static final int ALLOCATE=8;
	public static final int AND=9;
	public static final int ASSIGNMENT=10;
	public static final int ASSOCIATE=11;
	public static final int ASTERISK=12;
	public static final int ASYNCHRONOUS=13;
	public static final int BACKSPACE=14;
	public static final int BIND=15;
	public static final int BIN_CONST=16;
	public static final int BLOCK=17;
	public static final int BLOCKDATA=18;
	public static final int CALL=19;
	public static final int CASE=20;
	public static final int CHANGE=21;
	public static final int CHARACTER=22;
	public static final int CHAR_CONST=23;
	public static final int CIVL_PRIMITIVE=24;
	public static final int CLASS=25;
	public static final int CLOSE=26;
	public static final int CODIMENSION=27;
	public static final int COLON=28;
	public static final int COLON_COLON=29;
	public static final int COMMA=30;
	public static final int COMMON=31;
	public static final int COMPLEX=32;
	public static final int CONCURRENT=33;
	public static final int CONTAINS=34;
	public static final int CONTIGUOUS=35;
	public static final int CONTINUE=36;
	public static final int CONTINUE_CHAR=37;
	public static final int CRITICAL=38;
	public static final int CYCLE=39;
	public static final int DATA=40;
	public static final int DEALLOCATE=41;
	public static final int DEFAULT=42;
	public static final int DEFERRED=43;
	public static final int DEFINED_OP=44;
	public static final int DIGIT_STR=45;
	public static final int DIMENSION=46;
	public static final int DO=47;
	public static final int DOUBLE=48;
	public static final int DOUBLECOMPLEX=49;
	public static final int DOUBLEPRECISION=50;
	public static final int Digit=51;
	public static final int EDIT_DESC_MISC=52;
	public static final int ELEMENTAL=53;
	public static final int ELSE=54;
	public static final int ELSEIF=55;
	public static final int ELSEWHERE=56;
	public static final int END=57;
	public static final int ENTRY=58;
	public static final int ENUM=59;
	public static final int ENUMERATOR=60;
	public static final int EOS=61;
	public static final int EQ=62;
	public static final int EQUALS=63;
	public static final int EQUIVALENCE=64;
	public static final int EQV=65;
	public static final int EQ_EQ=66;
	public static final int EQ_GT=67;
	public static final int ERRMSG=68;
	public static final int ERROR=69;
	public static final int EVENT=70;
	public static final int EVENTWAIT=71;
	public static final int EXIT=72;
	public static final int EXTENDS=73;
	public static final int EXTERNAL=74;
	public static final int FAIL=75;
	public static final int FAILIMAGE=76;
	public static final int FALSE=77;
	public static final int FILE=78;
	public static final int FINAL=79;
	public static final int FLUSH=80;
	public static final int FORALL=81;
	public static final int FORM=82;
	public static final int FORMAT=83;
	public static final int FORMATTED=84;
	public static final int FORMTEAM=85;
	public static final int FUNCTION=86;
	public static final int GE=87;
	public static final int GENERIC=88;
	public static final int GO=89;
	public static final int GOTO=90;
	public static final int GREATERTHAN=91;
	public static final int GREATERTHAN_EQ=92;
	public static final int GT=93;
	public static final int HEX_CONST=94;
	public static final int IDENT=95;
	public static final int IF=96;
	public static final int IMAGE=97;
	public static final int IMAGES=98;
	public static final int IMPLICIT=99;
	public static final int IMPORT=100;
	public static final int IMPURE=101;
	public static final int IN=102;
	public static final int INCLUDE=103;
	public static final int INOUT=104;
	public static final int INQUIRE=105;
	public static final int INTEGER=106;
	public static final int INTENT=107;
	public static final int INTERFACE=108;
	public static final int INTRINSIC=109;
	public static final int IS=110;
	public static final int KIND=111;
	public static final int LBRACKET=112;
	public static final int LE=113;
	public static final int LEN=114;
	public static final int LESSTHAN=115;
	public static final int LESSTHAN_EQ=116;
	public static final int LINE_COMMENT=117;
	public static final int LOCAL=118;
	public static final int LOCAL_INT=119;
	public static final int LOCK=120;
	public static final int LOGICAL=121;
	public static final int LPAREN=122;
	public static final int LT=123;
	public static final int Letter=124;
	public static final int MEMORY=125;
	public static final int MINUS=126;
	public static final int MISC_CHAR=127;
	public static final int MODULE=128;
	public static final int MOLD=129;
	public static final int M_ALLOCATE_STMT_1=130;
	public static final int M_ASSIGNMENT_STMT=131;
	public static final int M_CSTR_EDIT_DESC=132;
	public static final int M_CTRL_EDIT_DESC=133;
	public static final int M_DATA_EDIT_DESC=134;
	public static final int M_EOF=135;
	public static final int M_FORALL_CONSTRUCT_STMT=136;
	public static final int M_FORALL_STMT=137;
	public static final int M_IF_STMT=138;
	public static final int M_INCLUDE_NAME=139;
	public static final int M_INQUIRE_STMT_2=140;
	public static final int M_LBL_DO_TERMINAL=141;
	public static final int M_PTR_ASSIGNMENT_STMT=142;
	public static final int M_REAL_CONST=143;
	public static final int M_WHERE_CONSTRUCT_STMT=144;
	public static final int M_WHERE_STMT=145;
	public static final int NAMELIST=146;
	public static final int NE=147;
	public static final int NEQV=148;
	public static final int NONE=149;
	public static final int NON_INTRINSIC=150;
	public static final int NON_OVERRIDABLE=151;
	public static final int NON_RECURSIVE=152;
	public static final int NOPASS=153;
	public static final int NOT=154;
	public static final int NO_LANG_EXT=155;
	public static final int NULLIFY=156;
	public static final int OCT_CONST=157;
	public static final int ONLY=158;
	public static final int OPEN=159;
	public static final int OPERATOR=160;
	public static final int OPTIONAL=161;
	public static final int OR=162;
	public static final int OUT=163;
	public static final int PARAMETER=164;
	public static final int PASS=165;
	public static final int PAUSE=166;
	public static final int PERCENT=167;
	public static final int PERIOD=168;
	public static final int PERIOD_EXPONENT=169;
	public static final int PLUS=170;
	public static final int POINTER=171;
	public static final int POST=172;
	public static final int POWER=173;
	public static final int PRAGMA=174;
	public static final int PRECISION=175;
	public static final int PREPROCESS_LINE=176;
	public static final int PRINT=177;
	public static final int PRIVATE=178;
	public static final int PROCEDURE=179;
	public static final int PROGRAM=180;
	public static final int PROTECTED=181;
	public static final int PUBLIC=182;
	public static final int PURE=183;
	public static final int QUIET=184;
	public static final int RANK=185;
	public static final int RBRACKET=186;
	public static final int READ=187;
	public static final int REAL=188;
	public static final int RECURSIVE=189;
	public static final int RESULT=190;
	public static final int RETURN=191;
	public static final int REWIND=192;
	public static final int RPAREN=193;
	public static final int SAVE=194;
	public static final int SELECT=195;
	public static final int SELECTCASE=196;
	public static final int SELECTTYPE=197;
	public static final int SEQUENCE=198;
	public static final int SHARED=199;
	public static final int SLASH=200;
	public static final int SLASH_EQ=201;
	public static final int SLASH_SLASH=202;
	public static final int SOURCE=203;
	public static final int STAT=204;
	public static final int STMT_FUNCTION=205;
	public static final int STOP=206;
	public static final int SUBMODULE=207;
	public static final int SUBROUTINE=208;
	public static final int SYNC=209;
	public static final int SYNCTEAM=210;
	public static final int Sp_Char=211;
	public static final int TARGET=212;
	public static final int TEAM=213;
	public static final int THEN=214;
	public static final int TO=215;
	public static final int TRUE=216;
	public static final int TYPE=217;
	public static final int UNDERSCORE=218;
	public static final int UNFORMATTED=219;
	public static final int UNLOCK=220;
	public static final int USE=221;
	public static final int VALUE=222;
	public static final int VOLATILE=223;
	public static final int WAIT=224;
	public static final int WHERE=225;
	public static final int WHILE=226;
	public static final int WRITE=227;
	public static final int WS=228;
	public static final int DODOT=229;
	public static final int ERRORSTOP=230;
	public static final int SELECTRANK=231;
	public static final int TEAM_NUMBER=232;

	// delegates
	public BaseMFortranParser[] getDelegates() {
		return new BaseMFortranParser[] {};
	}

	// delegators


	public MFortranParser2018(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public MFortranParser2018(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return MFortranParser2018.tokenNames; }
	@Override public String getGrammarFileName() { return "MFortranParser2018.g"; }


	    int gctr0;
	    int gctr1;

	    public void initialize() {
	        MFPA.start_of_file(fileName, pathName);
	    }

	    public void finalize() {
	        MFPA.end_of_file(fileName, pathName);
	    }



	// $ANTLR start "ext_function_subprogram"
	// MFortranParser2018.g:56:1: ext_function_subprogram : ( prefix )? function_subprogram ;
	public final void ext_function_subprogram() throws RecognitionException {
		 
		  boolean hasPrefix=false; 

		try {
			// MFortranParser2018.g:63:5: ( ( prefix )? function_subprogram )
			// MFortranParser2018.g:63:7: ( prefix )? function_subprogram
			{
			// MFortranParser2018.g:63:7: ( prefix )?
			int alt1=2;
			int LA1_0 = input.LA(1);
			if ( (LA1_0==CHARACTER||LA1_0==CLASS||LA1_0==COMPLEX||(LA1_0 >= DOUBLE && LA1_0 <= DOUBLEPRECISION)||LA1_0==ELEMENTAL||LA1_0==IMPURE||LA1_0==INTEGER||LA1_0==LOGICAL||LA1_0==MODULE||LA1_0==NON_RECURSIVE||LA1_0==PURE||(LA1_0 >= REAL && LA1_0 <= RECURSIVE)||LA1_0==TYPE) ) {
				alt1=1;
			}
			switch (alt1) {
				case 1 :
					// MFortranParser2018.g:63:9: prefix
					{
					pushFollow(FOLLOW_prefix_in_ext_function_subprogram83);
					prefix();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasPrefix=true;}
					}
					break;

			}

			pushFollow(FOLLOW_function_subprogram_in_ext_function_subprogram97);
			function_subprogram();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.ext_function_subprogram(hasPrefix);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ext_function_subprogram"



	// $ANTLR start "specification_part"
	// MFortranParser2018.g:73:1: specification_part : ( use_stmt )* ( import_stmt )* implicit_part_recursion ( declaration_construct )* ;
	public final void specification_part() throws RecognitionException {

		  int numUS=0; 
		  int numIS=0; 
		  gctr0=0;
		  gctr1=0; 

		try {
			// MFortranParser2018.g:83:5: ( ( use_stmt )* ( import_stmt )* implicit_part_recursion ( declaration_construct )* )
			// MFortranParser2018.g:83:7: ( use_stmt )* ( import_stmt )* implicit_part_recursion ( declaration_construct )*
			{
			// MFortranParser2018.g:83:7: ( use_stmt )*
			loop2:
			while (true) {
				int alt2=2;
				int LA2_0 = input.LA(1);
				if ( (LA2_0==DIGIT_STR) ) {
					int LA2_1 = input.LA(2);
					if ( (LA2_1==USE) ) {
						alt2=1;
					}

				}
				else if ( (LA2_0==USE) ) {
					alt2=1;
				}

				switch (alt2) {
				case 1 :
					// MFortranParser2018.g:83:9: use_stmt
					{
					pushFollow(FOLLOW_use_stmt_in_specification_part126);
					use_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numUS++;}
					}
					break;

				default :
					break loop2;
				}
			}

			// MFortranParser2018.g:84:7: ( import_stmt )*
			loop3:
			while (true) {
				int alt3=2;
				int LA3_0 = input.LA(1);
				if ( (LA3_0==DIGIT_STR) ) {
					int LA3_1 = input.LA(2);
					if ( (LA3_1==IMPORT) ) {
						alt3=1;
					}

				}
				else if ( (LA3_0==IMPORT) ) {
					alt3=1;
				}

				switch (alt3) {
				case 1 :
					// MFortranParser2018.g:84:9: import_stmt
					{
					pushFollow(FOLLOW_import_stmt_in_specification_part142);
					import_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numIS++;}
					}
					break;

				default :
					break loop3;
				}
			}

			pushFollow(FOLLOW_implicit_part_recursion_in_specification_part155);
			implicit_part_recursion();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:86:7: ( declaration_construct )*
			loop4:
			while (true) {
				int alt4=2;
				switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA4_1 = input.LA(2);
					if ( (LA4_1==ABSTRACT||LA4_1==ALLOCATABLE||LA4_1==ASYNCHRONOUS||LA4_1==BIND||LA4_1==CHARACTER||LA4_1==CLASS||LA4_1==CODIMENSION||(LA4_1 >= COMMON && LA4_1 <= COMPLEX)||LA4_1==DATA||LA4_1==DIMENSION||(LA4_1 >= DOUBLE && LA4_1 <= DOUBLEPRECISION)||(LA4_1 >= ENTRY && LA4_1 <= ENUM)||LA4_1==EQUIVALENCE||LA4_1==EXTERNAL||LA4_1==FORMAT||(LA4_1 >= INTEGER && LA4_1 <= INTRINSIC)||LA4_1==LOGICAL||LA4_1==NAMELIST||LA4_1==OPTIONAL||LA4_1==PARAMETER||LA4_1==POINTER||(LA4_1 >= PRIVATE && LA4_1 <= PROCEDURE)||(LA4_1 >= PROTECTED && LA4_1 <= PUBLIC)||LA4_1==REAL||LA4_1==SAVE||LA4_1==STMT_FUNCTION||LA4_1==TARGET||LA4_1==TYPE||(LA4_1 >= VALUE && LA4_1 <= VOLATILE)) ) {
						alt4=1;
					}

					}
					break;
				case PRAGMA:
					{
					int LA4_3 = input.LA(2);
					if ( (LA4_3==IDENT) ) {
						int LA4_5 = input.LA(3);
						if ( (LA4_5==CIVL_PRIMITIVE) ) {
							int LA4_6 = input.LA(4);
							if ( (LA4_6==EOF||LA4_6==EOS) ) {
								alt4=1;
							}

						}

					}

					}
					break;
				case ABSTRACT:
				case ALLOCATABLE:
				case ASYNCHRONOUS:
				case BIND:
				case CHARACTER:
				case CLASS:
				case CODIMENSION:
				case COMMON:
				case COMPLEX:
				case DATA:
				case DIMENSION:
				case DOUBLE:
				case DOUBLECOMPLEX:
				case DOUBLEPRECISION:
				case ENTRY:
				case ENUM:
				case EQUIVALENCE:
				case EXTERNAL:
				case FORMAT:
				case INTEGER:
				case INTENT:
				case INTERFACE:
				case INTRINSIC:
				case LOGICAL:
				case NAMELIST:
				case OPTIONAL:
				case PARAMETER:
				case POINTER:
				case PRIVATE:
				case PROCEDURE:
				case PROTECTED:
				case PUBLIC:
				case REAL:
				case SAVE:
				case STMT_FUNCTION:
				case TARGET:
				case TYPE:
				case VALUE:
				case VOLATILE:
					{
					alt4=1;
					}
					break;
				}
				switch (alt4) {
				case 1 :
					// MFortranParser2018.g:86:9: declaration_construct
					{
					pushFollow(FOLLOW_declaration_construct_in_specification_part165);
					declaration_construct();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr1++;}
					}
					break;

				default :
					break loop4;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.specification_part(numUS, numIS, gctr0, gctr1);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "specification_part"



	// $ANTLR start "implicit_part_recursion"
	// MFortranParser2018.g:93:1: implicit_part_recursion : ( ( ( label )? IMPLICIT )=> implicit_stmt implicit_part_recursion | ( ( label )? PARAMETER )=> parameter_stmt implicit_part_recursion | ( ( label )? FORMAT )=> format_stmt implicit_part_recursion | ( ( label )? ENTRY )=> entry_stmt implicit_part_recursion |);
	public final void implicit_part_recursion() throws RecognitionException {
		try {
			// MFortranParser2018.g:94:5: ( ( ( label )? IMPLICIT )=> implicit_stmt implicit_part_recursion | ( ( label )? PARAMETER )=> parameter_stmt implicit_part_recursion | ( ( label )? FORMAT )=> format_stmt implicit_part_recursion | ( ( label )? ENTRY )=> entry_stmt implicit_part_recursion |)
			int alt5=5;
			alt5 = dfa5.predict(input);
			switch (alt5) {
				case 1 :
					// MFortranParser2018.g:94:7: ( ( label )? IMPLICIT )=> implicit_stmt implicit_part_recursion
					{
					pushFollow(FOLLOW_implicit_stmt_in_implicit_part_recursion212);
					implicit_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr0++;}
					pushFollow(FOLLOW_implicit_part_recursion_in_implicit_part_recursion217);
					implicit_part_recursion();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:96:7: ( ( label )? PARAMETER )=> parameter_stmt implicit_part_recursion
					{
					pushFollow(FOLLOW_parameter_stmt_in_implicit_part_recursion247);
					parameter_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr1++;}
					pushFollow(FOLLOW_implicit_part_recursion_in_implicit_part_recursion251);
					implicit_part_recursion();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:98:7: ( ( label )? FORMAT )=> format_stmt implicit_part_recursion
					{
					pushFollow(FOLLOW_format_stmt_in_implicit_part_recursion284);
					format_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr1++;}
					pushFollow(FOLLOW_implicit_part_recursion_in_implicit_part_recursion291);
					implicit_part_recursion();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:100:7: ( ( label )? ENTRY )=> entry_stmt implicit_part_recursion
					{
					pushFollow(FOLLOW_entry_stmt_in_implicit_part_recursion325);
					entry_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr1++;}
					pushFollow(FOLLOW_implicit_part_recursion_in_implicit_part_recursion333);
					implicit_part_recursion();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:103:5: 
					{
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "implicit_part_recursion"



	// $ANTLR start "declaration_construct"
	// MFortranParser2018.g:112:1: declaration_construct : ( access_stmt | allocatable_stmt | asynchronous_stmt | bind_stmt | codimension_stmt | common_stmt | data_stmt | derived_type_def | dimension_stmt | entry_stmt | enum_def | equivalence_stmt | external_stmt | format_stmt | intent_stmt | interface_block | intrinsic_stmt | namelist_stmt | optional_stmt | parameter_stmt | pointer_stmt | procedure_declaration_stmt | protected_stmt | save_stmt | target_stmt | type_declaration_stmt | volatile_stmt | value_stmt | stmt_function_stmt | pragma_type_qualifier_stmt );
	public final void declaration_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:116:5: ( access_stmt | allocatable_stmt | asynchronous_stmt | bind_stmt | codimension_stmt | common_stmt | data_stmt | derived_type_def | dimension_stmt | entry_stmt | enum_def | equivalence_stmt | external_stmt | format_stmt | intent_stmt | interface_block | intrinsic_stmt | namelist_stmt | optional_stmt | parameter_stmt | pointer_stmt | procedure_declaration_stmt | protected_stmt | save_stmt | target_stmt | type_declaration_stmt | volatile_stmt | value_stmt | stmt_function_stmt | pragma_type_qualifier_stmt )
			int alt6=30;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case PRIVATE:
				case PUBLIC:
					{
					alt6=1;
					}
					break;
				case ALLOCATABLE:
					{
					alt6=2;
					}
					break;
				case ASYNCHRONOUS:
					{
					alt6=3;
					}
					break;
				case BIND:
					{
					alt6=4;
					}
					break;
				case CODIMENSION:
					{
					alt6=5;
					}
					break;
				case COMMON:
					{
					alt6=6;
					}
					break;
				case DATA:
					{
					alt6=7;
					}
					break;
				case TYPE:
					{
					int LA6_9 = input.LA(3);
					if ( (LA6_9==LPAREN) ) {
						alt6=26;
					}
					else if ( ((LA6_9 >= COLON_COLON && LA6_9 <= COMMA)||LA6_9==IDENT) ) {
						alt6=8;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 6, 9, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case DIMENSION:
					{
					alt6=9;
					}
					break;
				case ENTRY:
					{
					alt6=10;
					}
					break;
				case ENUM:
					{
					alt6=11;
					}
					break;
				case EQUIVALENCE:
					{
					alt6=12;
					}
					break;
				case EXTERNAL:
					{
					alt6=13;
					}
					break;
				case FORMAT:
					{
					alt6=14;
					}
					break;
				case INTENT:
					{
					alt6=15;
					}
					break;
				case ABSTRACT:
				case INTERFACE:
					{
					alt6=16;
					}
					break;
				case INTRINSIC:
					{
					alt6=17;
					}
					break;
				case NAMELIST:
					{
					alt6=18;
					}
					break;
				case OPTIONAL:
					{
					alt6=19;
					}
					break;
				case PARAMETER:
					{
					alt6=20;
					}
					break;
				case POINTER:
					{
					alt6=21;
					}
					break;
				case PROCEDURE:
					{
					alt6=22;
					}
					break;
				case PROTECTED:
					{
					alt6=23;
					}
					break;
				case SAVE:
					{
					alt6=24;
					}
					break;
				case TARGET:
					{
					alt6=25;
					}
					break;
				case CHARACTER:
				case CLASS:
				case COMPLEX:
				case DOUBLE:
				case DOUBLECOMPLEX:
				case DOUBLEPRECISION:
				case INTEGER:
				case LOGICAL:
				case REAL:
					{
					alt6=26;
					}
					break;
				case VOLATILE:
					{
					alt6=27;
					}
					break;
				case VALUE:
					{
					alt6=28;
					}
					break;
				case STMT_FUNCTION:
					{
					alt6=29;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 6, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case PRIVATE:
			case PUBLIC:
				{
				alt6=1;
				}
				break;
			case ALLOCATABLE:
				{
				alt6=2;
				}
				break;
			case ASYNCHRONOUS:
				{
				alt6=3;
				}
				break;
			case BIND:
				{
				alt6=4;
				}
				break;
			case CODIMENSION:
				{
				alt6=5;
				}
				break;
			case COMMON:
				{
				alt6=6;
				}
				break;
			case DATA:
				{
				alt6=7;
				}
				break;
			case TYPE:
				{
				int LA6_9 = input.LA(2);
				if ( (LA6_9==LPAREN) ) {
					alt6=26;
				}
				else if ( ((LA6_9 >= COLON_COLON && LA6_9 <= COMMA)||LA6_9==IDENT) ) {
					alt6=8;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 6, 9, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIMENSION:
				{
				alt6=9;
				}
				break;
			case ENTRY:
				{
				alt6=10;
				}
				break;
			case ENUM:
				{
				alt6=11;
				}
				break;
			case EQUIVALENCE:
				{
				alt6=12;
				}
				break;
			case EXTERNAL:
				{
				alt6=13;
				}
				break;
			case FORMAT:
				{
				alt6=14;
				}
				break;
			case INTENT:
				{
				alt6=15;
				}
				break;
			case ABSTRACT:
			case INTERFACE:
				{
				alt6=16;
				}
				break;
			case INTRINSIC:
				{
				alt6=17;
				}
				break;
			case NAMELIST:
				{
				alt6=18;
				}
				break;
			case OPTIONAL:
				{
				alt6=19;
				}
				break;
			case PARAMETER:
				{
				alt6=20;
				}
				break;
			case POINTER:
				{
				alt6=21;
				}
				break;
			case PROCEDURE:
				{
				alt6=22;
				}
				break;
			case PROTECTED:
				{
				alt6=23;
				}
				break;
			case SAVE:
				{
				alt6=24;
				}
				break;
			case TARGET:
				{
				alt6=25;
				}
				break;
			case CHARACTER:
			case CLASS:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case INTEGER:
			case LOGICAL:
			case REAL:
				{
				alt6=26;
				}
				break;
			case VOLATILE:
				{
				alt6=27;
				}
				break;
			case VALUE:
				{
				alt6=28;
				}
				break;
			case STMT_FUNCTION:
				{
				alt6=29;
				}
				break;
			case PRAGMA:
				{
				alt6=30;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 6, 0, input);
				throw nvae;
			}
			switch (alt6) {
				case 1 :
					// MFortranParser2018.g:116:7: access_stmt
					{
					pushFollow(FOLLOW_access_stmt_in_declaration_construct363);
					access_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:117:7: allocatable_stmt
					{
					pushFollow(FOLLOW_allocatable_stmt_in_declaration_construct371);
					allocatable_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:118:7: asynchronous_stmt
					{
					pushFollow(FOLLOW_asynchronous_stmt_in_declaration_construct379);
					asynchronous_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:119:7: bind_stmt
					{
					pushFollow(FOLLOW_bind_stmt_in_declaration_construct387);
					bind_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:120:7: codimension_stmt
					{
					pushFollow(FOLLOW_codimension_stmt_in_declaration_construct395);
					codimension_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:121:7: common_stmt
					{
					pushFollow(FOLLOW_common_stmt_in_declaration_construct403);
					common_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:122:7: data_stmt
					{
					pushFollow(FOLLOW_data_stmt_in_declaration_construct411);
					data_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:123:7: derived_type_def
					{
					pushFollow(FOLLOW_derived_type_def_in_declaration_construct419);
					derived_type_def();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 9 :
					// MFortranParser2018.g:124:7: dimension_stmt
					{
					pushFollow(FOLLOW_dimension_stmt_in_declaration_construct427);
					dimension_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 10 :
					// MFortranParser2018.g:125:7: entry_stmt
					{
					pushFollow(FOLLOW_entry_stmt_in_declaration_construct435);
					entry_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 11 :
					// MFortranParser2018.g:126:7: enum_def
					{
					pushFollow(FOLLOW_enum_def_in_declaration_construct443);
					enum_def();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 12 :
					// MFortranParser2018.g:127:7: equivalence_stmt
					{
					pushFollow(FOLLOW_equivalence_stmt_in_declaration_construct451);
					equivalence_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 13 :
					// MFortranParser2018.g:128:7: external_stmt
					{
					pushFollow(FOLLOW_external_stmt_in_declaration_construct459);
					external_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 14 :
					// MFortranParser2018.g:129:7: format_stmt
					{
					pushFollow(FOLLOW_format_stmt_in_declaration_construct467);
					format_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 15 :
					// MFortranParser2018.g:130:7: intent_stmt
					{
					pushFollow(FOLLOW_intent_stmt_in_declaration_construct475);
					intent_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 16 :
					// MFortranParser2018.g:131:7: interface_block
					{
					pushFollow(FOLLOW_interface_block_in_declaration_construct483);
					interface_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 17 :
					// MFortranParser2018.g:132:7: intrinsic_stmt
					{
					pushFollow(FOLLOW_intrinsic_stmt_in_declaration_construct491);
					intrinsic_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 18 :
					// MFortranParser2018.g:133:7: namelist_stmt
					{
					pushFollow(FOLLOW_namelist_stmt_in_declaration_construct499);
					namelist_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 19 :
					// MFortranParser2018.g:134:7: optional_stmt
					{
					pushFollow(FOLLOW_optional_stmt_in_declaration_construct507);
					optional_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 20 :
					// MFortranParser2018.g:135:7: parameter_stmt
					{
					pushFollow(FOLLOW_parameter_stmt_in_declaration_construct515);
					parameter_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 21 :
					// MFortranParser2018.g:136:7: pointer_stmt
					{
					pushFollow(FOLLOW_pointer_stmt_in_declaration_construct523);
					pointer_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 22 :
					// MFortranParser2018.g:137:7: procedure_declaration_stmt
					{
					pushFollow(FOLLOW_procedure_declaration_stmt_in_declaration_construct531);
					procedure_declaration_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 23 :
					// MFortranParser2018.g:138:7: protected_stmt
					{
					pushFollow(FOLLOW_protected_stmt_in_declaration_construct539);
					protected_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 24 :
					// MFortranParser2018.g:139:7: save_stmt
					{
					pushFollow(FOLLOW_save_stmt_in_declaration_construct547);
					save_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 25 :
					// MFortranParser2018.g:140:7: target_stmt
					{
					pushFollow(FOLLOW_target_stmt_in_declaration_construct555);
					target_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 26 :
					// MFortranParser2018.g:141:7: type_declaration_stmt
					{
					pushFollow(FOLLOW_type_declaration_stmt_in_declaration_construct563);
					type_declaration_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 27 :
					// MFortranParser2018.g:142:7: volatile_stmt
					{
					pushFollow(FOLLOW_volatile_stmt_in_declaration_construct571);
					volatile_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 28 :
					// MFortranParser2018.g:143:7: value_stmt
					{
					pushFollow(FOLLOW_value_stmt_in_declaration_construct579);
					value_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 29 :
					// MFortranParser2018.g:144:7: stmt_function_stmt
					{
					pushFollow(FOLLOW_stmt_function_stmt_in_declaration_construct587);
					stmt_function_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 30 :
					// MFortranParser2018.g:145:7: pragma_type_qualifier_stmt
					{
					pushFollow(FOLLOW_pragma_type_qualifier_stmt_in_declaration_construct595);
					pragma_type_qualifier_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.declaration_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "declaration_construct"



	// $ANTLR start "execution_part"
	// MFortranParser2018.g:151:1: execution_part : executable_construct ( execution_part_construct )* ;
	public final void execution_part() throws RecognitionException {

		  int numExec = 1;

		try {
			// MFortranParser2018.g:158:5: ( executable_construct ( execution_part_construct )* )
			// MFortranParser2018.g:158:7: executable_construct ( execution_part_construct )*
			{
			pushFollow(FOLLOW_executable_construct_in_execution_part622);
			executable_construct();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:159:7: ( execution_part_construct )*
			loop7:
			while (true) {
				int alt7=2;
				switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA7_1 = input.LA(2);
					if ( (LA7_1==END) ) {
						int LA7_3 = input.LA(3);
						if ( (LA7_3==FILE) ) {
							alt7=1;
						}

					}
					else if ( (LA7_1==ALLOCATE||LA7_1==ASSOCIATE||LA7_1==BACKSPACE||LA7_1==BLOCK||LA7_1==CALL||LA7_1==CLOSE||LA7_1==CONTINUE||(LA7_1 >= CRITICAL && LA7_1 <= DEALLOCATE)||LA7_1==DO||LA7_1==ENTRY||LA7_1==EXIT||LA7_1==FLUSH||LA7_1==FORMAT||(LA7_1 >= GO && LA7_1 <= GOTO)||(LA7_1 >= IDENT && LA7_1 <= IF)||LA7_1==INQUIRE||(LA7_1 >= M_ALLOCATE_STMT_1 && LA7_1 <= M_ASSIGNMENT_STMT)||(LA7_1 >= M_FORALL_CONSTRUCT_STMT && LA7_1 <= M_IF_STMT)||LA7_1==M_INQUIRE_STMT_2||LA7_1==M_PTR_ASSIGNMENT_STMT||LA7_1==M_WHERE_STMT||LA7_1==NULLIFY||LA7_1==OPEN||LA7_1==PRINT||LA7_1==READ||(LA7_1 >= RETURN && LA7_1 <= REWIND)||(LA7_1 >= SELECT && LA7_1 <= SELECTTYPE)||LA7_1==STOP||LA7_1==SYNC||LA7_1==WAIT||LA7_1==WRITE) ) {
						alt7=1;
					}

					}
					break;
				case END:
					{
					int LA7_3 = input.LA(2);
					if ( (LA7_3==FILE) ) {
						alt7=1;
					}

					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DATA:
				case DEALLOCATE:
				case DO:
				case ENTRY:
				case EXIT:
				case FLUSH:
				case FORMAT:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt7=1;
					}
					break;
				}
				switch (alt7) {
				case 1 :
					// MFortranParser2018.g:159:9: execution_part_construct
					{
					pushFollow(FOLLOW_execution_part_construct_in_execution_part632);
					execution_part_construct();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numExec++;}
					}
					break;

				default :
					break loop7;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.execution_part(numExec);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "execution_part"



	// $ANTLR start "execution_part_construct"
	// MFortranParser2018.g:165:1: execution_part_construct : ( executable_construct | data_stmt | entry_stmt | format_stmt );
	public final void execution_part_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:169:5: ( executable_construct | data_stmt | entry_stmt | format_stmt )
			int alt8=4;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DEALLOCATE:
				case DO:
				case END:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt8=1;
					}
					break;
				case DATA:
					{
					alt8=2;
					}
					break;
				case ENTRY:
					{
					alt8=3;
					}
					break;
				case FORMAT:
					{
					alt8=4;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 8, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case ALLOCATE:
			case ASSOCIATE:
			case BACKSPACE:
			case BLOCK:
			case CALL:
			case CLOSE:
			case CONTINUE:
			case CRITICAL:
			case CYCLE:
			case DEALLOCATE:
			case DO:
			case END:
			case EXIT:
			case FLUSH:
			case GO:
			case GOTO:
			case IDENT:
			case IF:
			case INQUIRE:
			case M_ALLOCATE_STMT_1:
			case M_ASSIGNMENT_STMT:
			case M_FORALL_CONSTRUCT_STMT:
			case M_FORALL_STMT:
			case M_IF_STMT:
			case M_INQUIRE_STMT_2:
			case M_PTR_ASSIGNMENT_STMT:
			case M_WHERE_CONSTRUCT_STMT:
			case M_WHERE_STMT:
			case NULLIFY:
			case OPEN:
			case PRAGMA:
			case PRINT:
			case READ:
			case RETURN:
			case REWIND:
			case SELECT:
			case SELECTCASE:
			case SELECTTYPE:
			case STOP:
			case SYNC:
			case WAIT:
			case WRITE:
				{
				alt8=1;
				}
				break;
			case DATA:
				{
				alt8=2;
				}
				break;
			case ENTRY:
				{
				alt8=3;
				}
				break;
			case FORMAT:
				{
				alt8=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}
			switch (alt8) {
				case 1 :
					// MFortranParser2018.g:169:7: executable_construct
					{
					pushFollow(FOLLOW_executable_construct_in_execution_part_construct661);
					executable_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:170:7: data_stmt
					{
					pushFollow(FOLLOW_data_stmt_in_execution_part_construct669);
					data_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:171:7: entry_stmt
					{
					pushFollow(FOLLOW_entry_stmt_in_execution_part_construct677);
					entry_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:172:7: format_stmt
					{
					pushFollow(FOLLOW_format_stmt_in_execution_part_construct685);
					format_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.execution_part_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "execution_part_construct"



	// $ANTLR start "internal_subprogram_part"
	// MFortranParser2018.g:178:1: internal_subprogram_part : contains_stmt ( internal_subprogram )* ;
	public final void internal_subprogram_part() throws RecognitionException {

		  int numIS = 0;

		try {
			// MFortranParser2018.g:185:5: ( contains_stmt ( internal_subprogram )* )
			// MFortranParser2018.g:185:7: contains_stmt ( internal_subprogram )*
			{
			pushFollow(FOLLOW_contains_stmt_in_internal_subprogram_part712);
			contains_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:186:7: ( internal_subprogram )*
			loop9:
			while (true) {
				int alt9=2;
				int LA9_0 = input.LA(1);
				if ( (LA9_0==DIGIT_STR) ) {
					int LA9_1 = input.LA(2);
					if ( (LA9_1==CHARACTER||LA9_1==CLASS||LA9_1==COMPLEX||(LA9_1 >= DOUBLE && LA9_1 <= DOUBLEPRECISION)||LA9_1==ELEMENTAL||LA9_1==FUNCTION||LA9_1==IMPURE||LA9_1==INTEGER||LA9_1==LOGICAL||LA9_1==MODULE||LA9_1==NON_RECURSIVE||LA9_1==PURE||(LA9_1 >= REAL && LA9_1 <= RECURSIVE)||LA9_1==SUBROUTINE||LA9_1==TYPE) ) {
						alt9=1;
					}

				}
				else if ( (LA9_0==CHARACTER||LA9_0==CLASS||LA9_0==COMPLEX||(LA9_0 >= DOUBLE && LA9_0 <= DOUBLEPRECISION)||LA9_0==ELEMENTAL||LA9_0==FUNCTION||LA9_0==IMPURE||LA9_0==INTEGER||LA9_0==LOGICAL||LA9_0==MODULE||LA9_0==NON_RECURSIVE||LA9_0==PURE||(LA9_0 >= REAL && LA9_0 <= RECURSIVE)||LA9_0==SUBROUTINE||LA9_0==TYPE) ) {
					alt9=1;
				}

				switch (alt9) {
				case 1 :
					// MFortranParser2018.g:186:9: internal_subprogram
					{
					pushFollow(FOLLOW_internal_subprogram_in_internal_subprogram_part722);
					internal_subprogram();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numIS++;}
					}
					break;

				default :
					break loop9;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.internal_subprogram_part(numIS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "internal_subprogram_part"



	// $ANTLR start "internal_subprogram"
	// MFortranParser2018.g:192:1: internal_subprogram options {backtrack=true; } : ( ( prefix )? function_subprogram | subroutine_subprogram );
	public final void internal_subprogram() throws RecognitionException {
		try {
			// MFortranParser2018.g:197:5: ( ( prefix )? function_subprogram | subroutine_subprogram )
			int alt11=2;
			switch ( input.LA(1) ) {
			case INTEGER:
				{
				int LA11_1 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case REAL:
				{
				int LA11_2 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case DOUBLE:
				{
				int LA11_3 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case DOUBLEPRECISION:
				{
				int LA11_4 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case COMPLEX:
				{
				int LA11_5 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case DOUBLECOMPLEX:
				{
				int LA11_6 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case CHARACTER:
				{
				int LA11_7 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case LOGICAL:
				{
				int LA11_8 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case TYPE:
				{
				int LA11_9 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case CLASS:
				{
				int LA11_10 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case ELEMENTAL:
				{
				int LA11_11 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case IMPURE:
				{
				int LA11_12 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case MODULE:
				{
				int LA11_13 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case NON_RECURSIVE:
				{
				int LA11_14 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case PURE:
				{
				int LA11_15 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case RECURSIVE:
				{
				int LA11_16 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case DIGIT_STR:
				{
				int LA11_17 = input.LA(2);
				if ( (synpred5_MFortranParser2018()) ) {
					alt11=1;
				}
				else if ( (true) ) {
					alt11=2;
				}

				}
				break;
			case FUNCTION:
				{
				alt11=1;
				}
				break;
			case SUBROUTINE:
				{
				alt11=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 11, 0, input);
				throw nvae;
			}
			switch (alt11) {
				case 1 :
					// MFortranParser2018.g:197:7: ( prefix )? function_subprogram
					{
					// MFortranParser2018.g:197:7: ( prefix )?
					int alt10=2;
					int LA10_0 = input.LA(1);
					if ( (LA10_0==CHARACTER||LA10_0==CLASS||LA10_0==COMPLEX||(LA10_0 >= DOUBLE && LA10_0 <= DOUBLEPRECISION)||LA10_0==ELEMENTAL||LA10_0==IMPURE||LA10_0==INTEGER||LA10_0==LOGICAL||LA10_0==MODULE||LA10_0==NON_RECURSIVE||LA10_0==PURE||(LA10_0 >= REAL && LA10_0 <= RECURSIVE)||LA10_0==TYPE) ) {
						alt10=1;
					}
					switch (alt10) {
						case 1 :
							// MFortranParser2018.g:197:9: prefix
							{
							pushFollow(FOLLOW_prefix_in_internal_subprogram763);
							prefix();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_function_subprogram_in_internal_subprogram768);
					function_subprogram();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:198:7: subroutine_subprogram
					{
					pushFollow(FOLLOW_subroutine_subprogram_in_internal_subprogram776);
					subroutine_subprogram();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.internal_subprogram();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "internal_subprogram"



	// $ANTLR start "executable_construct"
	// MFortranParser2018.g:210:1: executable_construct : ( action_stmt | associate_construct | block_construct | case_construct | critical_construct | do_construct | forall_construct | if_construct | select_type_construct | where_construct | pragma_stmt );
	public final void executable_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:214:5: ( action_stmt | associate_construct | block_construct | case_construct | critical_construct | do_construct | forall_construct | if_construct | select_type_construct | where_construct | pragma_stmt )
			int alt12=11;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case ALLOCATE:
				case BACKSPACE:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CYCLE:
				case DEALLOCATE:
				case END:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt12=1;
					}
					break;
				case IDENT:
					{
					int LA12_15 = input.LA(3);
					if ( (LA12_15==COLON) ) {
						switch ( input.LA(4) ) {
						case ASSOCIATE:
							{
							alt12=2;
							}
							break;
						case BLOCK:
							{
							alt12=3;
							}
							break;
						case SELECT:
							{
							int LA12_6 = input.LA(5);
							if ( (LA12_6==CASE) ) {
								alt12=4;
							}
							else if ( (LA12_6==TYPE) ) {
								alt12=9;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 12, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

							}
							break;
						case SELECTCASE:
							{
							alt12=4;
							}
							break;
						case CRITICAL:
							{
							alt12=5;
							}
							break;
						case DO:
							{
							alt12=6;
							}
							break;
						case M_FORALL_CONSTRUCT_STMT:
							{
							alt12=7;
							}
							break;
						case IF:
							{
							alt12=8;
							}
							break;
						case SELECTTYPE:
							{
							alt12=9;
							}
							break;
						default:
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 12, 17, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 12, 15, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case ASSOCIATE:
					{
					alt12=2;
					}
					break;
				case BLOCK:
					{
					alt12=3;
					}
					break;
				case SELECT:
					{
					int LA12_6 = input.LA(3);
					if ( (LA12_6==CASE) ) {
						alt12=4;
					}
					else if ( (LA12_6==TYPE) ) {
						alt12=9;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 12, 6, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case SELECTCASE:
					{
					alt12=4;
					}
					break;
				case CRITICAL:
					{
					alt12=5;
					}
					break;
				case DO:
					{
					alt12=6;
					}
					break;
				case M_FORALL_CONSTRUCT_STMT:
					{
					alt12=7;
					}
					break;
				case IF:
					{
					alt12=8;
					}
					break;
				case SELECTTYPE:
					{
					alt12=9;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 12, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case ALLOCATE:
			case BACKSPACE:
			case CALL:
			case CLOSE:
			case CONTINUE:
			case CYCLE:
			case DEALLOCATE:
			case END:
			case EXIT:
			case FLUSH:
			case GO:
			case GOTO:
			case INQUIRE:
			case M_ALLOCATE_STMT_1:
			case M_ASSIGNMENT_STMT:
			case M_FORALL_STMT:
			case M_IF_STMT:
			case M_INQUIRE_STMT_2:
			case M_PTR_ASSIGNMENT_STMT:
			case M_WHERE_STMT:
			case NULLIFY:
			case OPEN:
			case PRINT:
			case READ:
			case RETURN:
			case REWIND:
			case STOP:
			case SYNC:
			case WAIT:
			case WRITE:
				{
				alt12=1;
				}
				break;
			case IDENT:
				{
				int LA12_3 = input.LA(2);
				if ( (LA12_3==COLON) ) {
					switch ( input.LA(3) ) {
					case ASSOCIATE:
						{
						alt12=2;
						}
						break;
					case BLOCK:
						{
						alt12=3;
						}
						break;
					case SELECT:
						{
						int LA12_6 = input.LA(4);
						if ( (LA12_6==CASE) ) {
							alt12=4;
						}
						else if ( (LA12_6==TYPE) ) {
							alt12=9;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 12, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

						}
						break;
					case SELECTCASE:
						{
						alt12=4;
						}
						break;
					case CRITICAL:
						{
						alt12=5;
						}
						break;
					case DO:
						{
						alt12=6;
						}
						break;
					case M_FORALL_CONSTRUCT_STMT:
						{
						alt12=7;
						}
						break;
					case IF:
						{
						alt12=8;
						}
						break;
					case SELECTTYPE:
						{
						alt12=9;
						}
						break;
					case M_WHERE_CONSTRUCT_STMT:
						{
						alt12=10;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 12, 16, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 12, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ASSOCIATE:
				{
				alt12=2;
				}
				break;
			case BLOCK:
				{
				alt12=3;
				}
				break;
			case SELECT:
				{
				int LA12_6 = input.LA(2);
				if ( (LA12_6==CASE) ) {
					alt12=4;
				}
				else if ( (LA12_6==TYPE) ) {
					alt12=9;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 12, 6, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case SELECTCASE:
				{
				alt12=4;
				}
				break;
			case CRITICAL:
				{
				alt12=5;
				}
				break;
			case DO:
				{
				alt12=6;
				}
				break;
			case M_FORALL_CONSTRUCT_STMT:
				{
				alt12=7;
				}
				break;
			case IF:
				{
				alt12=8;
				}
				break;
			case SELECTTYPE:
				{
				alt12=9;
				}
				break;
			case M_WHERE_CONSTRUCT_STMT:
				{
				alt12=10;
				}
				break;
			case PRAGMA:
				{
				alt12=11;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}
			switch (alt12) {
				case 1 :
					// MFortranParser2018.g:214:7: action_stmt
					{
					pushFollow(FOLLOW_action_stmt_in_executable_construct800);
					action_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:215:7: associate_construct
					{
					pushFollow(FOLLOW_associate_construct_in_executable_construct808);
					associate_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:216:7: block_construct
					{
					pushFollow(FOLLOW_block_construct_in_executable_construct816);
					block_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:217:7: case_construct
					{
					pushFollow(FOLLOW_case_construct_in_executable_construct824);
					case_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:218:7: critical_construct
					{
					pushFollow(FOLLOW_critical_construct_in_executable_construct832);
					critical_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:219:7: do_construct
					{
					pushFollow(FOLLOW_do_construct_in_executable_construct840);
					do_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:220:7: forall_construct
					{
					pushFollow(FOLLOW_forall_construct_in_executable_construct848);
					forall_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:221:7: if_construct
					{
					pushFollow(FOLLOW_if_construct_in_executable_construct856);
					if_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 9 :
					// MFortranParser2018.g:222:7: select_type_construct
					{
					pushFollow(FOLLOW_select_type_construct_in_executable_construct864);
					select_type_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 10 :
					// MFortranParser2018.g:223:7: where_construct
					{
					pushFollow(FOLLOW_where_construct_in_executable_construct872);
					where_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 11 :
					// MFortranParser2018.g:224:7: pragma_stmt
					{
					pushFollow(FOLLOW_pragma_stmt_in_executable_construct880);
					pragma_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.executable_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "executable_construct"



	// $ANTLR start "action_stmt"
	// MFortranParser2018.g:230:1: action_stmt : ( allocate_stmt | assignment_stmt | backspace_stmt | call_stmt | close_stmt | computed_goto_stmt | continue_stmt | cycle_stmt | deallocate_stmt | endfile_stmt | exit_stmt | flush_stmt | forall_stmt | goto_stmt | if_stmt | inquire_stmt | nullify_stmt | open_stmt | pointer_assignment_stmt | print_stmt | read_stmt | return_stmt | rewind_stmt | stop_stmt | sync_all_stmt | sync_images_stmt | sync_memory_stmt | wait_stmt | where_stmt | write_stmt );
	public final void action_stmt() throws RecognitionException {
		try {
			// MFortranParser2018.g:235:5: ( allocate_stmt | assignment_stmt | backspace_stmt | call_stmt | close_stmt | computed_goto_stmt | continue_stmt | cycle_stmt | deallocate_stmt | endfile_stmt | exit_stmt | flush_stmt | forall_stmt | goto_stmt | if_stmt | inquire_stmt | nullify_stmt | open_stmt | pointer_assignment_stmt | print_stmt | read_stmt | return_stmt | rewind_stmt | stop_stmt | sync_all_stmt | sync_images_stmt | sync_memory_stmt | wait_stmt | where_stmt | write_stmt )
			int alt13=30;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case ALLOCATE:
				case M_ALLOCATE_STMT_1:
					{
					alt13=1;
					}
					break;
				case M_ASSIGNMENT_STMT:
					{
					alt13=2;
					}
					break;
				case BACKSPACE:
					{
					alt13=3;
					}
					break;
				case CALL:
					{
					alt13=4;
					}
					break;
				case CLOSE:
					{
					alt13=5;
					}
					break;
				case GO:
					{
					int LA13_7 = input.LA(3);
					if ( (LA13_7==TO) ) {
						int LA13_30 = input.LA(4);
						if ( (LA13_30==LPAREN) ) {
							alt13=6;
						}
						else if ( (LA13_30==DIGIT_STR) ) {
							alt13=14;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 13, 30, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 13, 7, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case GOTO:
					{
					int LA13_8 = input.LA(3);
					if ( (LA13_8==LPAREN) ) {
						alt13=6;
					}
					else if ( (LA13_8==DIGIT_STR) ) {
						alt13=14;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 13, 8, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case CONTINUE:
					{
					alt13=7;
					}
					break;
				case CYCLE:
					{
					alt13=8;
					}
					break;
				case DEALLOCATE:
					{
					alt13=9;
					}
					break;
				case END:
					{
					alt13=10;
					}
					break;
				case EXIT:
					{
					alt13=11;
					}
					break;
				case FLUSH:
					{
					alt13=12;
					}
					break;
				case M_FORALL_STMT:
					{
					alt13=13;
					}
					break;
				case M_IF_STMT:
					{
					alt13=15;
					}
					break;
				case INQUIRE:
				case M_INQUIRE_STMT_2:
					{
					alt13=16;
					}
					break;
				case NULLIFY:
					{
					alt13=17;
					}
					break;
				case OPEN:
					{
					alt13=18;
					}
					break;
				case M_PTR_ASSIGNMENT_STMT:
					{
					alt13=19;
					}
					break;
				case PRINT:
					{
					alt13=20;
					}
					break;
				case READ:
					{
					alt13=21;
					}
					break;
				case RETURN:
					{
					alt13=22;
					}
					break;
				case REWIND:
					{
					alt13=23;
					}
					break;
				case STOP:
					{
					alt13=24;
					}
					break;
				case SYNC:
					{
					switch ( input.LA(3) ) {
					case ALL:
						{
						alt13=25;
						}
						break;
					case IMAGES:
						{
						alt13=26;
						}
						break;
					case MEMORY:
						{
						alt13=27;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 13, 26, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
					}
					break;
				case WAIT:
					{
					alt13=28;
					}
					break;
				case M_WHERE_STMT:
					{
					alt13=29;
					}
					break;
				case WRITE:
					{
					alt13=30;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case ALLOCATE:
			case M_ALLOCATE_STMT_1:
				{
				alt13=1;
				}
				break;
			case M_ASSIGNMENT_STMT:
				{
				alt13=2;
				}
				break;
			case BACKSPACE:
				{
				alt13=3;
				}
				break;
			case CALL:
				{
				alt13=4;
				}
				break;
			case CLOSE:
				{
				alt13=5;
				}
				break;
			case GO:
				{
				int LA13_7 = input.LA(2);
				if ( (LA13_7==TO) ) {
					int LA13_30 = input.LA(3);
					if ( (LA13_30==LPAREN) ) {
						alt13=6;
					}
					else if ( (LA13_30==DIGIT_STR) ) {
						alt13=14;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 13, 30, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 7, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GOTO:
				{
				int LA13_8 = input.LA(2);
				if ( (LA13_8==LPAREN) ) {
					alt13=6;
				}
				else if ( (LA13_8==DIGIT_STR) ) {
					alt13=14;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 8, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CONTINUE:
				{
				alt13=7;
				}
				break;
			case CYCLE:
				{
				alt13=8;
				}
				break;
			case DEALLOCATE:
				{
				alt13=9;
				}
				break;
			case END:
				{
				alt13=10;
				}
				break;
			case EXIT:
				{
				alt13=11;
				}
				break;
			case FLUSH:
				{
				alt13=12;
				}
				break;
			case M_FORALL_STMT:
				{
				alt13=13;
				}
				break;
			case M_IF_STMT:
				{
				alt13=15;
				}
				break;
			case INQUIRE:
			case M_INQUIRE_STMT_2:
				{
				alt13=16;
				}
				break;
			case NULLIFY:
				{
				alt13=17;
				}
				break;
			case OPEN:
				{
				alt13=18;
				}
				break;
			case M_PTR_ASSIGNMENT_STMT:
				{
				alt13=19;
				}
				break;
			case PRINT:
				{
				alt13=20;
				}
				break;
			case READ:
				{
				alt13=21;
				}
				break;
			case RETURN:
				{
				alt13=22;
				}
				break;
			case REWIND:
				{
				alt13=23;
				}
				break;
			case STOP:
				{
				alt13=24;
				}
				break;
			case SYNC:
				{
				switch ( input.LA(2) ) {
				case ALL:
					{
					alt13=25;
					}
					break;
				case IMAGES:
					{
					alt13=26;
					}
					break;
				case MEMORY:
					{
					alt13=27;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 26, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case WAIT:
				{
				alt13=28;
				}
				break;
			case M_WHERE_STMT:
				{
				alt13=29;
				}
				break;
			case WRITE:
				{
				alt13=30;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 13, 0, input);
				throw nvae;
			}
			switch (alt13) {
				case 1 :
					// MFortranParser2018.g:235:7: allocate_stmt
					{
					pushFollow(FOLLOW_allocate_stmt_in_action_stmt903);
					allocate_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:236:7: assignment_stmt
					{
					pushFollow(FOLLOW_assignment_stmt_in_action_stmt911);
					assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:237:7: backspace_stmt
					{
					pushFollow(FOLLOW_backspace_stmt_in_action_stmt919);
					backspace_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:238:7: call_stmt
					{
					pushFollow(FOLLOW_call_stmt_in_action_stmt927);
					call_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:239:7: close_stmt
					{
					pushFollow(FOLLOW_close_stmt_in_action_stmt935);
					close_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:240:7: computed_goto_stmt
					{
					pushFollow(FOLLOW_computed_goto_stmt_in_action_stmt943);
					computed_goto_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:241:7: continue_stmt
					{
					pushFollow(FOLLOW_continue_stmt_in_action_stmt951);
					continue_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:242:7: cycle_stmt
					{
					pushFollow(FOLLOW_cycle_stmt_in_action_stmt959);
					cycle_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 9 :
					// MFortranParser2018.g:243:7: deallocate_stmt
					{
					pushFollow(FOLLOW_deallocate_stmt_in_action_stmt967);
					deallocate_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 10 :
					// MFortranParser2018.g:244:7: endfile_stmt
					{
					pushFollow(FOLLOW_endfile_stmt_in_action_stmt975);
					endfile_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 11 :
					// MFortranParser2018.g:245:7: exit_stmt
					{
					pushFollow(FOLLOW_exit_stmt_in_action_stmt983);
					exit_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 12 :
					// MFortranParser2018.g:246:7: flush_stmt
					{
					pushFollow(FOLLOW_flush_stmt_in_action_stmt991);
					flush_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 13 :
					// MFortranParser2018.g:247:7: forall_stmt
					{
					pushFollow(FOLLOW_forall_stmt_in_action_stmt999);
					forall_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 14 :
					// MFortranParser2018.g:248:7: goto_stmt
					{
					pushFollow(FOLLOW_goto_stmt_in_action_stmt1007);
					goto_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 15 :
					// MFortranParser2018.g:249:7: if_stmt
					{
					pushFollow(FOLLOW_if_stmt_in_action_stmt1015);
					if_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 16 :
					// MFortranParser2018.g:250:7: inquire_stmt
					{
					pushFollow(FOLLOW_inquire_stmt_in_action_stmt1023);
					inquire_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 17 :
					// MFortranParser2018.g:251:7: nullify_stmt
					{
					pushFollow(FOLLOW_nullify_stmt_in_action_stmt1031);
					nullify_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 18 :
					// MFortranParser2018.g:252:7: open_stmt
					{
					pushFollow(FOLLOW_open_stmt_in_action_stmt1039);
					open_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 19 :
					// MFortranParser2018.g:253:7: pointer_assignment_stmt
					{
					pushFollow(FOLLOW_pointer_assignment_stmt_in_action_stmt1047);
					pointer_assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 20 :
					// MFortranParser2018.g:254:7: print_stmt
					{
					pushFollow(FOLLOW_print_stmt_in_action_stmt1055);
					print_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 21 :
					// MFortranParser2018.g:255:7: read_stmt
					{
					pushFollow(FOLLOW_read_stmt_in_action_stmt1063);
					read_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 22 :
					// MFortranParser2018.g:256:7: return_stmt
					{
					pushFollow(FOLLOW_return_stmt_in_action_stmt1071);
					return_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 23 :
					// MFortranParser2018.g:257:7: rewind_stmt
					{
					pushFollow(FOLLOW_rewind_stmt_in_action_stmt1079);
					rewind_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 24 :
					// MFortranParser2018.g:258:7: stop_stmt
					{
					pushFollow(FOLLOW_stop_stmt_in_action_stmt1087);
					stop_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 25 :
					// MFortranParser2018.g:259:7: sync_all_stmt
					{
					pushFollow(FOLLOW_sync_all_stmt_in_action_stmt1095);
					sync_all_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 26 :
					// MFortranParser2018.g:260:7: sync_images_stmt
					{
					pushFollow(FOLLOW_sync_images_stmt_in_action_stmt1103);
					sync_images_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 27 :
					// MFortranParser2018.g:261:7: sync_memory_stmt
					{
					pushFollow(FOLLOW_sync_memory_stmt_in_action_stmt1111);
					sync_memory_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 28 :
					// MFortranParser2018.g:262:7: wait_stmt
					{
					pushFollow(FOLLOW_wait_stmt_in_action_stmt1119);
					wait_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 29 :
					// MFortranParser2018.g:263:7: where_stmt
					{
					pushFollow(FOLLOW_where_stmt_in_action_stmt1127);
					where_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 30 :
					// MFortranParser2018.g:264:7: write_stmt
					{
					pushFollow(FOLLOW_write_stmt_in_action_stmt1135);
					write_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			    MFPA.action_stmt();
			    checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "action_stmt"



	// $ANTLR start "keyword"
	// MFortranParser2018.g:284:1: keyword returns [Token t] : name ;
	public final Token keyword() throws RecognitionException {
		Token t = null;


		Token name1 =null;

		try {
			// MFortranParser2018.g:288:5: ( name )
			// MFortranParser2018.g:288:7: name
			{
			pushFollow(FOLLOW_name_in_keyword1176);
			name1=name();
			state._fsp--;
			if (state.failed) return t;
			if ( state.backtracking==0 ) {t = name1;}
			}

			if ( state.backtracking==0 ) {
			  MFPA.keyword();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "keyword"



	// $ANTLR start "name"
	// MFortranParser2018.g:300:1: name returns [Token t] : IDENT ;
	public final Token name() throws RecognitionException {
		Token t = null;


		Token IDENT2=null;

		try {
			// MFortranParser2018.g:304:5: ( IDENT )
			// MFortranParser2018.g:304:7: IDENT
			{
			IDENT2=(Token)match(input,IDENT,FOLLOW_IDENT_in_name1208); if (state.failed) return t;
			if ( state.backtracking==0 ) { t = IDENT2; }
			}

			if ( state.backtracking==0 ) {
			  MFPA.name(t);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "name"



	// $ANTLR start "constant"
	// MFortranParser2018.g:312:1: constant : ( literal_constant |t= IDENT );
	public final void constant() throws RecognitionException {
		Token t=null;

		try {
			// MFortranParser2018.g:316:5: ( literal_constant |t= IDENT )
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==BIN_CONST||LA14_0==CHAR_CONST||LA14_0==DIGIT_STR||LA14_0==FALSE||LA14_0==HEX_CONST||LA14_0==LPAREN||LA14_0==M_REAL_CONST||LA14_0==OCT_CONST||LA14_0==TRUE) ) {
				alt14=1;
			}
			else if ( (LA14_0==IDENT) ) {
				int LA14_2 = input.LA(2);
				if ( (LA14_2==CHAR_CONST) ) {
					alt14=1;
				}
				else if ( (LA14_2==EOF) ) {
					alt14=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 14, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 14, 0, input);
				throw nvae;
			}

			switch (alt14) {
				case 1 :
					// MFortranParser2018.g:316:7: literal_constant
					{
					pushFollow(FOLLOW_literal_constant_in_constant1233);
					literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:317:7: t= IDENT
					{
					t=(Token)match(input,IDENT,FOLLOW_IDENT_in_constant1243); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.constant(t);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "constant"



	// $ANTLR start "literal_constant"
	// MFortranParser2018.g:323:1: literal_constant : ( int_literal_constant | real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant );
	public final void literal_constant() throws RecognitionException {
		try {
			// MFortranParser2018.g:327:5: ( int_literal_constant | real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant )
			int alt15=6;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA15_1 = input.LA(2);
				if ( (LA15_1==UNDERSCORE) ) {
					int LA15_7 = input.LA(3);
					if ( (LA15_7==CHAR_CONST) ) {
						alt15=5;
					}
					else if ( (LA15_7==DIGIT_STR||LA15_7==IDENT) ) {
						alt15=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 15, 7, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA15_1==EOF||LA15_1==AND||LA15_1==ASTERISK||(LA15_1 >= COLON && LA15_1 <= COMMA)||LA15_1==DEFINED_OP||(LA15_1 >= EOS && LA15_1 <= EQ)||(LA15_1 >= EQV && LA15_1 <= EQ_EQ)||LA15_1==GE||(LA15_1 >= GREATERTHAN && LA15_1 <= GT)||LA15_1==LE||(LA15_1 >= LESSTHAN && LA15_1 <= LESSTHAN_EQ)||LA15_1==LT||LA15_1==MINUS||(LA15_1 >= NE && LA15_1 <= NEQV)||LA15_1==OR||LA15_1==PLUS||LA15_1==POWER||LA15_1==RBRACKET||LA15_1==RPAREN||(LA15_1 >= SLASH && LA15_1 <= SLASH_SLASH)) ) {
					alt15=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 15, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_REAL_CONST:
				{
				alt15=2;
				}
				break;
			case LPAREN:
				{
				alt15=3;
				}
				break;
			case FALSE:
			case TRUE:
				{
				alt15=4;
				}
				break;
			case CHAR_CONST:
			case IDENT:
				{
				alt15=5;
				}
				break;
			case BIN_CONST:
			case HEX_CONST:
			case OCT_CONST:
				{
				alt15=6;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 15, 0, input);
				throw nvae;
			}
			switch (alt15) {
				case 1 :
					// MFortranParser2018.g:327:7: int_literal_constant
					{
					pushFollow(FOLLOW_int_literal_constant_in_literal_constant1267);
					int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:328:7: real_literal_constant
					{
					pushFollow(FOLLOW_real_literal_constant_in_literal_constant1275);
					real_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:329:7: complex_literal_constant
					{
					pushFollow(FOLLOW_complex_literal_constant_in_literal_constant1283);
					complex_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:330:7: logical_literal_constant
					{
					pushFollow(FOLLOW_logical_literal_constant_in_literal_constant1291);
					logical_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:331:7: char_literal_constant
					{
					pushFollow(FOLLOW_char_literal_constant_in_literal_constant1299);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:332:7: boz_literal_constant
					{
					pushFollow(FOLLOW_boz_literal_constant_in_literal_constant1307);
					boz_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.literal_constant();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "literal_constant"



	// $ANTLR start "int_constant"
	// MFortranParser2018.g:340:1: int_constant : ( int_literal_constant |c= IDENT );
	public final void int_constant() throws RecognitionException {
		Token c=null;

		try {
			// MFortranParser2018.g:344:5: ( int_literal_constant |c= IDENT )
			int alt16=2;
			int LA16_0 = input.LA(1);
			if ( (LA16_0==DIGIT_STR) ) {
				alt16=1;
			}
			else if ( (LA16_0==IDENT) ) {
				alt16=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 16, 0, input);
				throw nvae;
			}

			switch (alt16) {
				case 1 :
					// MFortranParser2018.g:344:7: int_literal_constant
					{
					pushFollow(FOLLOW_int_literal_constant_in_int_constant1332);
					int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:345:7: c= IDENT
					{
					c=(Token)match(input,IDENT,FOLLOW_IDENT_in_int_constant1342); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.int_constant(c);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "int_constant"



	// $ANTLR start "intrinsic_operator"
	// MFortranParser2018.g:351:1: intrinsic_operator returns [Token t] : ( power_op | mult_op | add_op | concat_op | rel_op | not_op | and_op | or_op | equiv_op );
	public final Token intrinsic_operator() throws RecognitionException {
		Token t = null;


		Token power_op3 =null;
		Token mult_op4 =null;
		Token add_op5 =null;
		Token concat_op6 =null;
		Token rel_op7 =null;
		Token not_op8 =null;
		Token and_op9 =null;
		Token or_op10 =null;
		Token equiv_op11 =null;

		try {
			// MFortranParser2018.g:355:5: ( power_op | mult_op | add_op | concat_op | rel_op | not_op | and_op | or_op | equiv_op )
			int alt17=9;
			switch ( input.LA(1) ) {
			case POWER:
				{
				alt17=1;
				}
				break;
			case ASTERISK:
			case SLASH:
				{
				alt17=2;
				}
				break;
			case MINUS:
			case PLUS:
				{
				alt17=3;
				}
				break;
			case SLASH_SLASH:
				{
				alt17=4;
				}
				break;
			case EQ:
			case EQ_EQ:
			case GE:
			case GREATERTHAN:
			case GREATERTHAN_EQ:
			case GT:
			case LE:
			case LESSTHAN:
			case LESSTHAN_EQ:
			case LT:
			case NE:
			case SLASH_EQ:
				{
				alt17=5;
				}
				break;
			case NOT:
				{
				alt17=6;
				}
				break;
			case AND:
				{
				alt17=7;
				}
				break;
			case OR:
				{
				alt17=8;
				}
				break;
			case EQV:
			case NEQV:
				{
				alt17=9;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 17, 0, input);
				throw nvae;
			}
			switch (alt17) {
				case 1 :
					// MFortranParser2018.g:355:7: power_op
					{
					pushFollow(FOLLOW_power_op_in_intrinsic_operator1369);
					power_op3=power_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = power_op3; }
					}
					break;
				case 2 :
					// MFortranParser2018.g:356:7: mult_op
					{
					pushFollow(FOLLOW_mult_op_in_intrinsic_operator1380);
					mult_op4=mult_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = mult_op4; }
					}
					break;
				case 3 :
					// MFortranParser2018.g:357:7: add_op
					{
					pushFollow(FOLLOW_add_op_in_intrinsic_operator1392);
					add_op5=add_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = add_op5; }
					}
					break;
				case 4 :
					// MFortranParser2018.g:358:7: concat_op
					{
					pushFollow(FOLLOW_concat_op_in_intrinsic_operator1405);
					concat_op6=concat_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = concat_op6; }
					}
					break;
				case 5 :
					// MFortranParser2018.g:359:7: rel_op
					{
					pushFollow(FOLLOW_rel_op_in_intrinsic_operator1415);
					rel_op7=rel_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = rel_op7; }
					}
					break;
				case 6 :
					// MFortranParser2018.g:360:7: not_op
					{
					pushFollow(FOLLOW_not_op_in_intrinsic_operator1428);
					not_op8=not_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = not_op8; }
					}
					break;
				case 7 :
					// MFortranParser2018.g:361:7: and_op
					{
					pushFollow(FOLLOW_and_op_in_intrinsic_operator1441);
					and_op9=and_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = and_op9; }
					}
					break;
				case 8 :
					// MFortranParser2018.g:362:7: or_op
					{
					pushFollow(FOLLOW_or_op_in_intrinsic_operator1454);
					or_op10=or_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = or_op10; }
					}
					break;
				case 9 :
					// MFortranParser2018.g:363:7: equiv_op
					{
					pushFollow(FOLLOW_equiv_op_in_intrinsic_operator1468);
					equiv_op11=equiv_op();
					state._fsp--;
					if (state.failed) return t;
					if ( state.backtracking==0 ) { t = equiv_op11; }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.intrinsic_operator();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "intrinsic_operator"



	// $ANTLR start "defined_operator"
	// MFortranParser2018.g:369:1: defined_operator : ( DEFINED_OP | extended_intrinsic_op );
	public final void defined_operator() throws RecognitionException {
		Token DEFINED_OP12=null;
		Token extended_intrinsic_op13 =null;

		try {
			// MFortranParser2018.g:370:5: ( DEFINED_OP | extended_intrinsic_op )
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==DEFINED_OP) ) {
				alt18=1;
			}
			else if ( (LA18_0==AND||LA18_0==ASTERISK||LA18_0==EQ||(LA18_0 >= EQV && LA18_0 <= EQ_EQ)||LA18_0==GE||(LA18_0 >= GREATERTHAN && LA18_0 <= GT)||LA18_0==LE||(LA18_0 >= LESSTHAN && LA18_0 <= LESSTHAN_EQ)||LA18_0==LT||LA18_0==MINUS||(LA18_0 >= NE && LA18_0 <= NEQV)||LA18_0==NOT||LA18_0==OR||LA18_0==PLUS||LA18_0==POWER||(LA18_0 >= SLASH && LA18_0 <= SLASH_SLASH)) ) {
				alt18=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 18, 0, input);
				throw nvae;
			}

			switch (alt18) {
				case 1 :
					// MFortranParser2018.g:370:7: DEFINED_OP
					{
					DEFINED_OP12=(Token)match(input,DEFINED_OP,FOLLOW_DEFINED_OP_in_defined_operator1490); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_operator(DEFINED_OP12, false); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:372:7: extended_intrinsic_op
					{
					pushFollow(FOLLOW_extended_intrinsic_op_in_defined_operator1508);
					extended_intrinsic_op13=extended_intrinsic_op();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_operator(extended_intrinsic_op13, true); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "defined_operator"



	// $ANTLR start "extended_intrinsic_op"
	// MFortranParser2018.g:379:1: extended_intrinsic_op returns [Token t] : intrinsic_operator ;
	public final Token extended_intrinsic_op() throws RecognitionException {
		Token t = null;


		Token intrinsic_operator14 =null;

		try {
			// MFortranParser2018.g:383:5: ( intrinsic_operator )
			// MFortranParser2018.g:383:7: intrinsic_operator
			{
			pushFollow(FOLLOW_intrinsic_operator_in_extended_intrinsic_op1546);
			intrinsic_operator14=intrinsic_operator();
			state._fsp--;
			if (state.failed) return t;
			if ( state.backtracking==0 ) { t = intrinsic_operator14; }
			}

			if ( state.backtracking==0 ) {
			  MFPA.extended_intrinsic_op();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "extended_intrinsic_op"



	// $ANTLR start "label"
	// MFortranParser2018.g:389:1: label returns [Token t] : DIGIT_STR ;
	public final Token label() throws RecognitionException {
		Token t = null;


		Token DIGIT_STR15=null;

		try {
			// MFortranParser2018.g:390:5: ( DIGIT_STR )
			// MFortranParser2018.g:390:7: DIGIT_STR
			{
			DIGIT_STR15=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_label1571); if (state.failed) return t;
			if ( state.backtracking==0 ) { t = DIGIT_STR15; }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "label"



	// $ANTLR start "label_list"
	// MFortranParser2018.g:394:1: label_list : lbl= label ( COMMA lbl= label )* ;
	public final void label_list() throws RecognitionException {
		Token lbl =null;


		  int numLbl = 1;

		try {
			// MFortranParser2018.g:401:5: (lbl= label ( COMMA lbl= label )* )
			// MFortranParser2018.g:401:7: lbl= label ( COMMA lbl= label )*
			{
			pushFollow(FOLLOW_label_in_label_list1601);
			lbl=label();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {  MFPA.label(lbl); }
			// MFortranParser2018.g:402:7: ( COMMA lbl= label )*
			loop19:
			while (true) {
				int alt19=2;
				int LA19_0 = input.LA(1);
				if ( (LA19_0==COMMA) ) {
					alt19=1;
				}

				switch (alt19) {
				case 1 :
					// MFortranParser2018.g:402:9: COMMA lbl= label
					{
					match(input,COMMA,FOLLOW_COMMA_in_label_list1614); if (state.failed) return;
					pushFollow(FOLLOW_label_in_label_list1618);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {  MFPA.label(lbl);numLbl++; }
					}
					break;

				default :
					break loop19;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.label_list(numLbl);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "label_list"



	// $ANTLR start "char_constant"
	// MFortranParser2018.g:410:2: char_constant : ( char_literal_constant | IDENT );
	public final void char_constant() throws RecognitionException {
		Token IDENT16=null;

		try {
			// MFortranParser2018.g:411:5: ( char_literal_constant | IDENT )
			int alt20=2;
			int LA20_0 = input.LA(1);
			if ( (LA20_0==CHAR_CONST||LA20_0==DIGIT_STR) ) {
				alt20=1;
			}
			else if ( (LA20_0==IDENT) ) {
				int LA20_2 = input.LA(2);
				if ( (LA20_2==CHAR_CONST) ) {
					alt20=1;
				}
				else if ( (LA20_2==EOF||LA20_2==COMMA||LA20_2==EOS) ) {
					alt20=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 20, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 20, 0, input);
				throw nvae;
			}

			switch (alt20) {
				case 1 :
					// MFortranParser2018.g:411:7: char_literal_constant
					{
					pushFollow(FOLLOW_char_literal_constant_in_char_constant1662);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.int_constant(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:412:7: IDENT
					{
					IDENT16=(Token)match(input,IDENT,FOLLOW_IDENT_in_char_constant1672); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.int_constant(IDENT16); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "char_constant"



	// $ANTLR start "type_param_value"
	// MFortranParser2018.g:418:1: type_param_value : ( expr | ASTERISK | COLON );
	public final void type_param_value() throws RecognitionException {
		try {
			// MFortranParser2018.g:419:5: ( expr | ASTERISK | COLON )
			int alt21=3;
			switch ( input.LA(1) ) {
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case IDENT:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt21=1;
				}
				break;
			case ASTERISK:
				{
				alt21=2;
				}
				break;
			case COLON:
				{
				alt21=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 21, 0, input);
				throw nvae;
			}
			switch (alt21) {
				case 1 :
					// MFortranParser2018.g:419:7: expr
					{
					pushFollow(FOLLOW_expr_in_type_param_value1693);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_value(MFPUtils.TYPE_PARAM_EXPR); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:421:7: ASTERISK
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_type_param_value1712); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_value(MFPUtils.TYPE_PARAM_ASTERISK); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:423:7: COLON
					{
					match(input,COLON,FOLLOW_COLON_in_type_param_value1731); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_value(MFPUtils.TYPE_PARAM_COLON); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_value"



	// $ANTLR start "type_spec"
	// MFortranParser2018.g:430:1: type_spec : ( intrinsic_type_spec | derived_type_spec );
	public final void type_spec() throws RecognitionException {
		try {
			// MFortranParser2018.g:434:5: ( intrinsic_type_spec | derived_type_spec )
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==CHARACTER||LA22_0==COMPLEX||(LA22_0 >= DOUBLE && LA22_0 <= DOUBLEPRECISION)||LA22_0==INTEGER||LA22_0==LOGICAL||LA22_0==REAL) ) {
				alt22=1;
			}
			else if ( (LA22_0==IDENT) ) {
				alt22=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 22, 0, input);
				throw nvae;
			}

			switch (alt22) {
				case 1 :
					// MFortranParser2018.g:434:7: intrinsic_type_spec
					{
					pushFollow(FOLLOW_intrinsic_type_spec_in_type_spec1766);
					intrinsic_type_spec();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:435:7: derived_type_spec
					{
					pushFollow(FOLLOW_derived_type_spec_in_type_spec1774);
					derived_type_spec();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.type_spec();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_spec"



	// $ANTLR start "declaration_type_spec"
	// MFortranParser2018.g:441:1: declaration_type_spec : ( intrinsic_type_spec | TYPE LPAREN intrinsic_type_spec RPAREN | TYPE LPAREN derived_type_spec RPAREN | TYPE LPAREN ASTERISK RPAREN | CLASS LPAREN derived_type_spec RPAREN | CLASS LPAREN ASTERISK RPAREN );
	public final void declaration_type_spec() throws RecognitionException {
		Token TYPE17=null;
		Token TYPE18=null;
		Token TYPE19=null;
		Token ASTERISK20=null;
		Token CLASS21=null;
		Token CLASS22=null;
		Token ASTERISK23=null;

		try {
			// MFortranParser2018.g:442:5: ( intrinsic_type_spec | TYPE LPAREN intrinsic_type_spec RPAREN | TYPE LPAREN derived_type_spec RPAREN | TYPE LPAREN ASTERISK RPAREN | CLASS LPAREN derived_type_spec RPAREN | CLASS LPAREN ASTERISK RPAREN )
			int alt23=6;
			switch ( input.LA(1) ) {
			case CHARACTER:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case INTEGER:
			case LOGICAL:
			case REAL:
				{
				alt23=1;
				}
				break;
			case TYPE:
				{
				int LA23_2 = input.LA(2);
				if ( (LA23_2==LPAREN) ) {
					switch ( input.LA(3) ) {
					case ASTERISK:
						{
						alt23=4;
						}
						break;
					case CHARACTER:
					case COMPLEX:
					case DOUBLE:
					case DOUBLECOMPLEX:
					case DOUBLEPRECISION:
					case INTEGER:
					case LOGICAL:
					case REAL:
						{
						alt23=2;
						}
						break;
					case IDENT:
						{
						alt23=3;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 23, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 23, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CLASS:
				{
				int LA23_3 = input.LA(2);
				if ( (LA23_3==LPAREN) ) {
					int LA23_5 = input.LA(3);
					if ( (LA23_5==ASTERISK) ) {
						alt23=6;
					}
					else if ( (LA23_5==IDENT) ) {
						alt23=5;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 23, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 23, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 23, 0, input);
				throw nvae;
			}
			switch (alt23) {
				case 1 :
					// MFortranParser2018.g:442:7: intrinsic_type_spec
					{
					pushFollow(FOLLOW_intrinsic_type_spec_in_declaration_type_spec1793);
					intrinsic_type_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( null, null, 
					            MFPUtils.F_INTRNSIC); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:445:7: TYPE LPAREN intrinsic_type_spec RPAREN
					{
					TYPE17=(Token)match(input,TYPE,FOLLOW_TYPE_in_declaration_type_spec1811); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_declaration_type_spec1814); if (state.failed) return;
					pushFollow(FOLLOW_intrinsic_type_spec_in_declaration_type_spec1816);
					intrinsic_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_declaration_type_spec1818); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( TYPE17, null, 
					            MFPUtils.TYPE_INTRN); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:448:7: TYPE LPAREN derived_type_spec RPAREN
					{
					TYPE18=(Token)match(input,TYPE,FOLLOW_TYPE_in_declaration_type_spec1836); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_declaration_type_spec1839); if (state.failed) return;
					pushFollow(FOLLOW_derived_type_spec_in_declaration_type_spec1841);
					derived_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_declaration_type_spec1843); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( TYPE18, null, 
					            MFPUtils.TYPE_DERIV); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:451:7: TYPE LPAREN ASTERISK RPAREN
					{
					TYPE19=(Token)match(input,TYPE,FOLLOW_TYPE_in_declaration_type_spec1861); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_declaration_type_spec1864); if (state.failed) return;
					ASTERISK20=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_declaration_type_spec1866); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_declaration_type_spec1868); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( TYPE19, ASTERISK20,
					            MFPUtils.TYPE_UNLMT); }
					}
					break;
				case 5 :
					// MFortranParser2018.g:454:7: CLASS LPAREN derived_type_spec RPAREN
					{
					CLASS21=(Token)match(input,CLASS,FOLLOW_CLASS_in_declaration_type_spec1886); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_declaration_type_spec1888); if (state.failed) return;
					pushFollow(FOLLOW_derived_type_spec_in_declaration_type_spec1890);
					derived_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_declaration_type_spec1892); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( CLASS21, null, 
					            MFPUtils.CLSS_DERIV); }
					}
					break;
				case 6 :
					// MFortranParser2018.g:457:7: CLASS LPAREN ASTERISK RPAREN
					{
					CLASS22=(Token)match(input,CLASS,FOLLOW_CLASS_in_declaration_type_spec1910); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_declaration_type_spec1912); if (state.failed) return;
					ASTERISK23=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_declaration_type_spec1914); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_declaration_type_spec1916); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.declaration_type_spec( CLASS22, ASTERISK23,
					            MFPUtils.CLSS_UNLMT); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "declaration_type_spec"



	// $ANTLR start "intrinsic_type_spec"
	// MFortranParser2018.g:468:1: intrinsic_type_spec : ( INTEGER ( kind_selector )? | REAL ( kind_selector )? | DOUBLE PRECISION | DOUBLEPRECISION | COMPLEX ( kind_selector )? | DOUBLE COMPLEX | DOUBLECOMPLEX | CHARACTER ( char_selector )? | LOGICAL ( kind_selector )? );
	public final void intrinsic_type_spec() throws RecognitionException {
		Token INTEGER24=null;
		Token REAL25=null;
		Token DOUBLE26=null;
		Token PRECISION27=null;
		Token DOUBLEPRECISION28=null;
		Token COMPLEX29=null;
		Token DOUBLE30=null;
		Token COMPLEX31=null;
		Token DOUBLECOMPLEX32=null;
		Token CHARACTER33=null;
		Token LOGICAL34=null;


		  boolean hasKS = false;

		try {
			// MFortranParser2018.g:472:5: ( INTEGER ( kind_selector )? | REAL ( kind_selector )? | DOUBLE PRECISION | DOUBLEPRECISION | COMPLEX ( kind_selector )? | DOUBLE COMPLEX | DOUBLECOMPLEX | CHARACTER ( char_selector )? | LOGICAL ( kind_selector )? )
			int alt29=9;
			switch ( input.LA(1) ) {
			case INTEGER:
				{
				alt29=1;
				}
				break;
			case REAL:
				{
				alt29=2;
				}
				break;
			case DOUBLE:
				{
				int LA29_3 = input.LA(2);
				if ( (LA29_3==PRECISION) ) {
					alt29=3;
				}
				else if ( (LA29_3==COMPLEX) ) {
					alt29=6;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 29, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DOUBLEPRECISION:
				{
				alt29=4;
				}
				break;
			case COMPLEX:
				{
				alt29=5;
				}
				break;
			case DOUBLECOMPLEX:
				{
				alt29=7;
				}
				break;
			case CHARACTER:
				{
				alt29=8;
				}
				break;
			case LOGICAL:
				{
				alt29=9;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 29, 0, input);
				throw nvae;
			}
			switch (alt29) {
				case 1 :
					// MFortranParser2018.g:472:7: INTEGER ( kind_selector )?
					{
					INTEGER24=(Token)match(input,INTEGER,FOLLOW_INTEGER_in_intrinsic_type_spec1949); if (state.failed) return;
					// MFortranParser2018.g:472:15: ( kind_selector )?
					int alt24=2;
					int LA24_0 = input.LA(1);
					if ( (LA24_0==LPAREN) ) {
						int LA24_1 = input.LA(2);
						if ( (LA24_1==BIN_CONST||LA24_1==CHAR_CONST||(LA24_1 >= DEFINED_OP && LA24_1 <= DIGIT_STR)||LA24_1==FALSE||LA24_1==HEX_CONST||(LA24_1 >= KIND && LA24_1 <= LBRACKET)||LA24_1==LPAREN||LA24_1==MINUS||LA24_1==M_REAL_CONST||LA24_1==NOT||LA24_1==OCT_CONST||LA24_1==PLUS||LA24_1==TRUE) ) {
							alt24=1;
						}
						else if ( (LA24_1==IDENT) ) {
							switch ( input.LA(3) ) {
								case AND:
								case ASTERISK:
								case CHAR_CONST:
								case DEFINED_OP:
								case EQ:
								case EQV:
								case EQ_EQ:
								case GE:
								case GREATERTHAN:
								case GREATERTHAN_EQ:
								case GT:
								case LBRACKET:
								case LE:
								case LESSTHAN:
								case LESSTHAN_EQ:
								case LPAREN:
								case LT:
								case NE:
								case NEQV:
								case OR:
								case PERCENT:
								case PLUS:
								case POWER:
								case SLASH:
								case SLASH_EQ:
								case SLASH_SLASH:
									{
									alt24=1;
									}
									break;
								case MINUS:
									{
									int LA24_5 = input.LA(4);
									if ( (LA24_5==IDENT) ) {
										int LA24_7 = input.LA(5);
										if ( (LA24_7==AND||LA24_7==ASTERISK||LA24_7==CHAR_CONST||LA24_7==DEFINED_OP||LA24_7==EQ||(LA24_7 >= EQV && LA24_7 <= EQ_EQ)||LA24_7==GE||(LA24_7 >= GREATERTHAN && LA24_7 <= GT)||(LA24_7 >= LBRACKET && LA24_7 <= LE)||(LA24_7 >= LESSTHAN && LA24_7 <= LESSTHAN_EQ)||(LA24_7 >= LPAREN && LA24_7 <= LT)||LA24_7==MINUS||(LA24_7 >= NE && LA24_7 <= NEQV)||LA24_7==OR||LA24_7==PERCENT||LA24_7==PLUS||LA24_7==POWER||(LA24_7 >= SLASH && LA24_7 <= SLASH_SLASH)) ) {
											alt24=1;
										}
										else if ( (LA24_7==RPAREN) ) {
											int LA24_6 = input.LA(6);
											if ( (LA24_6==CHARACTER||LA24_6==CLASS||LA24_6==COLON_COLON||LA24_6==COMPLEX||LA24_6==DIGIT_STR||(LA24_6 >= DOUBLE && LA24_6 <= DOUBLEPRECISION)||LA24_6==ELEMENTAL||LA24_6==FUNCTION||LA24_6==IDENT||LA24_6==IMPURE||LA24_6==INTEGER||(LA24_6 >= LOGICAL && LA24_6 <= LPAREN)||LA24_6==MODULE||LA24_6==NON_RECURSIVE||LA24_6==PURE||(LA24_6 >= REAL && LA24_6 <= RECURSIVE)||LA24_6==RPAREN||LA24_6==SUBROUTINE||LA24_6==TYPE) ) {
												alt24=1;
											}
											else if ( (LA24_6==COMMA) ) {
												int LA24_8 = input.LA(7);
												if ( (LA24_8==ALLOCATABLE||LA24_8==ASYNCHRONOUS||LA24_8==BIND||LA24_8==CODIMENSION||LA24_8==CONTIGUOUS||LA24_8==DIMENSION||LA24_8==EXTERNAL||LA24_8==INTENT||LA24_8==INTRINSIC||LA24_8==NO_LANG_EXT||LA24_8==OPTIONAL||LA24_8==PARAMETER||LA24_8==POINTER||LA24_8==PRIVATE||(LA24_8 >= PROTECTED && LA24_8 <= PUBLIC)||LA24_8==SAVE||LA24_8==TARGET||(LA24_8 >= VALUE && LA24_8 <= VOLATILE)) ) {
													alt24=1;
												}
											}
										}
									}
									else if ( (LA24_5==BIN_CONST||LA24_5==CHAR_CONST||(LA24_5 >= DEFINED_OP && LA24_5 <= DIGIT_STR)||LA24_5==FALSE||LA24_5==HEX_CONST||LA24_5==LBRACKET||LA24_5==LPAREN||LA24_5==M_REAL_CONST||LA24_5==OCT_CONST||LA24_5==TRUE) ) {
										alt24=1;
									}
									}
									break;
								case RPAREN:
									{
									int LA24_6 = input.LA(4);
									if ( (LA24_6==CHARACTER||LA24_6==CLASS||LA24_6==COLON_COLON||LA24_6==COMPLEX||LA24_6==DIGIT_STR||(LA24_6 >= DOUBLE && LA24_6 <= DOUBLEPRECISION)||LA24_6==ELEMENTAL||LA24_6==FUNCTION||LA24_6==IDENT||LA24_6==IMPURE||LA24_6==INTEGER||(LA24_6 >= LOGICAL && LA24_6 <= LPAREN)||LA24_6==MODULE||LA24_6==NON_RECURSIVE||LA24_6==PURE||(LA24_6 >= REAL && LA24_6 <= RECURSIVE)||LA24_6==RPAREN||LA24_6==SUBROUTINE||LA24_6==TYPE) ) {
										alt24=1;
									}
									else if ( (LA24_6==COMMA) ) {
										int LA24_8 = input.LA(5);
										if ( (LA24_8==ALLOCATABLE||LA24_8==ASYNCHRONOUS||LA24_8==BIND||LA24_8==CODIMENSION||LA24_8==CONTIGUOUS||LA24_8==DIMENSION||LA24_8==EXTERNAL||LA24_8==INTENT||LA24_8==INTRINSIC||LA24_8==NO_LANG_EXT||LA24_8==OPTIONAL||LA24_8==PARAMETER||LA24_8==POINTER||LA24_8==PRIVATE||(LA24_8 >= PROTECTED && LA24_8 <= PUBLIC)||LA24_8==SAVE||LA24_8==TARGET||(LA24_8 >= VALUE && LA24_8 <= VOLATILE)) ) {
											alt24=1;
										}
									}
									}
									break;
							}
						}
					}
					else if ( (LA24_0==ASTERISK) ) {
						alt24=1;
					}
					switch (alt24) {
						case 1 :
							// MFortranParser2018.g:472:16: kind_selector
							{
							pushFollow(FOLLOW_kind_selector_in_intrinsic_type_spec1952);
							kind_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasKS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            INTEGER24, null, 
					            MFPUtils.TYPE_INT,  hasKS);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:476:7: REAL ( kind_selector )?
					{
					REAL25=(Token)match(input,REAL,FOLLOW_REAL_in_intrinsic_type_spec1974); if (state.failed) return;
					// MFortranParser2018.g:476:12: ( kind_selector )?
					int alt25=2;
					int LA25_0 = input.LA(1);
					if ( (LA25_0==LPAREN) ) {
						int LA25_1 = input.LA(2);
						if ( (LA25_1==BIN_CONST||LA25_1==CHAR_CONST||(LA25_1 >= DEFINED_OP && LA25_1 <= DIGIT_STR)||LA25_1==FALSE||LA25_1==HEX_CONST||(LA25_1 >= KIND && LA25_1 <= LBRACKET)||LA25_1==LPAREN||LA25_1==MINUS||LA25_1==M_REAL_CONST||LA25_1==NOT||LA25_1==OCT_CONST||LA25_1==PLUS||LA25_1==TRUE) ) {
							alt25=1;
						}
						else if ( (LA25_1==IDENT) ) {
							switch ( input.LA(3) ) {
								case AND:
								case ASTERISK:
								case CHAR_CONST:
								case DEFINED_OP:
								case EQ:
								case EQV:
								case EQ_EQ:
								case GE:
								case GREATERTHAN:
								case GREATERTHAN_EQ:
								case GT:
								case LBRACKET:
								case LE:
								case LESSTHAN:
								case LESSTHAN_EQ:
								case LPAREN:
								case LT:
								case NE:
								case NEQV:
								case OR:
								case PERCENT:
								case PLUS:
								case POWER:
								case SLASH:
								case SLASH_EQ:
								case SLASH_SLASH:
									{
									alt25=1;
									}
									break;
								case MINUS:
									{
									int LA25_5 = input.LA(4);
									if ( (LA25_5==IDENT) ) {
										int LA25_7 = input.LA(5);
										if ( (LA25_7==AND||LA25_7==ASTERISK||LA25_7==CHAR_CONST||LA25_7==DEFINED_OP||LA25_7==EQ||(LA25_7 >= EQV && LA25_7 <= EQ_EQ)||LA25_7==GE||(LA25_7 >= GREATERTHAN && LA25_7 <= GT)||(LA25_7 >= LBRACKET && LA25_7 <= LE)||(LA25_7 >= LESSTHAN && LA25_7 <= LESSTHAN_EQ)||(LA25_7 >= LPAREN && LA25_7 <= LT)||LA25_7==MINUS||(LA25_7 >= NE && LA25_7 <= NEQV)||LA25_7==OR||LA25_7==PERCENT||LA25_7==PLUS||LA25_7==POWER||(LA25_7 >= SLASH && LA25_7 <= SLASH_SLASH)) ) {
											alt25=1;
										}
										else if ( (LA25_7==RPAREN) ) {
											int LA25_6 = input.LA(6);
											if ( (LA25_6==CHARACTER||LA25_6==CLASS||LA25_6==COLON_COLON||LA25_6==COMPLEX||LA25_6==DIGIT_STR||(LA25_6 >= DOUBLE && LA25_6 <= DOUBLEPRECISION)||LA25_6==ELEMENTAL||LA25_6==FUNCTION||LA25_6==IDENT||LA25_6==IMPURE||LA25_6==INTEGER||(LA25_6 >= LOGICAL && LA25_6 <= LPAREN)||LA25_6==MODULE||LA25_6==NON_RECURSIVE||LA25_6==PURE||(LA25_6 >= REAL && LA25_6 <= RECURSIVE)||LA25_6==RPAREN||LA25_6==SUBROUTINE||LA25_6==TYPE) ) {
												alt25=1;
											}
											else if ( (LA25_6==COMMA) ) {
												int LA25_8 = input.LA(7);
												if ( (LA25_8==ALLOCATABLE||LA25_8==ASYNCHRONOUS||LA25_8==BIND||LA25_8==CODIMENSION||LA25_8==CONTIGUOUS||LA25_8==DIMENSION||LA25_8==EXTERNAL||LA25_8==INTENT||LA25_8==INTRINSIC||LA25_8==NO_LANG_EXT||LA25_8==OPTIONAL||LA25_8==PARAMETER||LA25_8==POINTER||LA25_8==PRIVATE||(LA25_8 >= PROTECTED && LA25_8 <= PUBLIC)||LA25_8==SAVE||LA25_8==TARGET||(LA25_8 >= VALUE && LA25_8 <= VOLATILE)) ) {
													alt25=1;
												}
											}
										}
									}
									else if ( (LA25_5==BIN_CONST||LA25_5==CHAR_CONST||(LA25_5 >= DEFINED_OP && LA25_5 <= DIGIT_STR)||LA25_5==FALSE||LA25_5==HEX_CONST||LA25_5==LBRACKET||LA25_5==LPAREN||LA25_5==M_REAL_CONST||LA25_5==OCT_CONST||LA25_5==TRUE) ) {
										alt25=1;
									}
									}
									break;
								case RPAREN:
									{
									int LA25_6 = input.LA(4);
									if ( (LA25_6==CHARACTER||LA25_6==CLASS||LA25_6==COLON_COLON||LA25_6==COMPLEX||LA25_6==DIGIT_STR||(LA25_6 >= DOUBLE && LA25_6 <= DOUBLEPRECISION)||LA25_6==ELEMENTAL||LA25_6==FUNCTION||LA25_6==IDENT||LA25_6==IMPURE||LA25_6==INTEGER||(LA25_6 >= LOGICAL && LA25_6 <= LPAREN)||LA25_6==MODULE||LA25_6==NON_RECURSIVE||LA25_6==PURE||(LA25_6 >= REAL && LA25_6 <= RECURSIVE)||LA25_6==RPAREN||LA25_6==SUBROUTINE||LA25_6==TYPE) ) {
										alt25=1;
									}
									else if ( (LA25_6==COMMA) ) {
										int LA25_8 = input.LA(5);
										if ( (LA25_8==ALLOCATABLE||LA25_8==ASYNCHRONOUS||LA25_8==BIND||LA25_8==CODIMENSION||LA25_8==CONTIGUOUS||LA25_8==DIMENSION||LA25_8==EXTERNAL||LA25_8==INTENT||LA25_8==INTRINSIC||LA25_8==NO_LANG_EXT||LA25_8==OPTIONAL||LA25_8==PARAMETER||LA25_8==POINTER||LA25_8==PRIVATE||(LA25_8 >= PROTECTED && LA25_8 <= PUBLIC)||LA25_8==SAVE||LA25_8==TARGET||(LA25_8 >= VALUE && LA25_8 <= VOLATILE)) ) {
											alt25=1;
										}
									}
									}
									break;
							}
						}
					}
					else if ( (LA25_0==ASTERISK) ) {
						alt25=1;
					}
					switch (alt25) {
						case 1 :
							// MFortranParser2018.g:476:13: kind_selector
							{
							pushFollow(FOLLOW_kind_selector_in_intrinsic_type_spec1977);
							kind_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasKS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            REAL25, null, 
					            MFPUtils.TYPE_REAL, hasKS);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:480:7: DOUBLE PRECISION
					{
					DOUBLE26=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_intrinsic_type_spec1999); if (state.failed) return;
					PRECISION27=(Token)match(input,PRECISION,FOLLOW_PRECISION_in_intrinsic_type_spec2001); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            DOUBLE26, PRECISION27,
					            MFPUtils.TYPE_DBL,  false);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:484:7: DOUBLEPRECISION
					{
					DOUBLEPRECISION28=(Token)match(input,DOUBLEPRECISION,FOLLOW_DOUBLEPRECISION_in_intrinsic_type_spec2019); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            DOUBLEPRECISION28, null, 
					            MFPUtils.TYPE_DBL,  false);}
					}
					break;
				case 5 :
					// MFortranParser2018.g:488:7: COMPLEX ( kind_selector )?
					{
					COMPLEX29=(Token)match(input,COMPLEX,FOLLOW_COMPLEX_in_intrinsic_type_spec2037); if (state.failed) return;
					// MFortranParser2018.g:488:15: ( kind_selector )?
					int alt26=2;
					int LA26_0 = input.LA(1);
					if ( (LA26_0==LPAREN) ) {
						int LA26_1 = input.LA(2);
						if ( (LA26_1==BIN_CONST||LA26_1==CHAR_CONST||(LA26_1 >= DEFINED_OP && LA26_1 <= DIGIT_STR)||LA26_1==FALSE||LA26_1==HEX_CONST||(LA26_1 >= KIND && LA26_1 <= LBRACKET)||LA26_1==LPAREN||LA26_1==MINUS||LA26_1==M_REAL_CONST||LA26_1==NOT||LA26_1==OCT_CONST||LA26_1==PLUS||LA26_1==TRUE) ) {
							alt26=1;
						}
						else if ( (LA26_1==IDENT) ) {
							switch ( input.LA(3) ) {
								case AND:
								case ASTERISK:
								case CHAR_CONST:
								case DEFINED_OP:
								case EQ:
								case EQV:
								case EQ_EQ:
								case GE:
								case GREATERTHAN:
								case GREATERTHAN_EQ:
								case GT:
								case LBRACKET:
								case LE:
								case LESSTHAN:
								case LESSTHAN_EQ:
								case LPAREN:
								case LT:
								case NE:
								case NEQV:
								case OR:
								case PERCENT:
								case PLUS:
								case POWER:
								case SLASH:
								case SLASH_EQ:
								case SLASH_SLASH:
									{
									alt26=1;
									}
									break;
								case MINUS:
									{
									int LA26_5 = input.LA(4);
									if ( (LA26_5==IDENT) ) {
										int LA26_7 = input.LA(5);
										if ( (LA26_7==AND||LA26_7==ASTERISK||LA26_7==CHAR_CONST||LA26_7==DEFINED_OP||LA26_7==EQ||(LA26_7 >= EQV && LA26_7 <= EQ_EQ)||LA26_7==GE||(LA26_7 >= GREATERTHAN && LA26_7 <= GT)||(LA26_7 >= LBRACKET && LA26_7 <= LE)||(LA26_7 >= LESSTHAN && LA26_7 <= LESSTHAN_EQ)||(LA26_7 >= LPAREN && LA26_7 <= LT)||LA26_7==MINUS||(LA26_7 >= NE && LA26_7 <= NEQV)||LA26_7==OR||LA26_7==PERCENT||LA26_7==PLUS||LA26_7==POWER||(LA26_7 >= SLASH && LA26_7 <= SLASH_SLASH)) ) {
											alt26=1;
										}
										else if ( (LA26_7==RPAREN) ) {
											int LA26_6 = input.LA(6);
											if ( (LA26_6==CHARACTER||LA26_6==CLASS||LA26_6==COLON_COLON||LA26_6==COMPLEX||LA26_6==DIGIT_STR||(LA26_6 >= DOUBLE && LA26_6 <= DOUBLEPRECISION)||LA26_6==ELEMENTAL||LA26_6==FUNCTION||LA26_6==IDENT||LA26_6==IMPURE||LA26_6==INTEGER||(LA26_6 >= LOGICAL && LA26_6 <= LPAREN)||LA26_6==MODULE||LA26_6==NON_RECURSIVE||LA26_6==PURE||(LA26_6 >= REAL && LA26_6 <= RECURSIVE)||LA26_6==RPAREN||LA26_6==SUBROUTINE||LA26_6==TYPE) ) {
												alt26=1;
											}
											else if ( (LA26_6==COMMA) ) {
												int LA26_8 = input.LA(7);
												if ( (LA26_8==ALLOCATABLE||LA26_8==ASYNCHRONOUS||LA26_8==BIND||LA26_8==CODIMENSION||LA26_8==CONTIGUOUS||LA26_8==DIMENSION||LA26_8==EXTERNAL||LA26_8==INTENT||LA26_8==INTRINSIC||LA26_8==NO_LANG_EXT||LA26_8==OPTIONAL||LA26_8==PARAMETER||LA26_8==POINTER||LA26_8==PRIVATE||(LA26_8 >= PROTECTED && LA26_8 <= PUBLIC)||LA26_8==SAVE||LA26_8==TARGET||(LA26_8 >= VALUE && LA26_8 <= VOLATILE)) ) {
													alt26=1;
												}
											}
										}
									}
									else if ( (LA26_5==BIN_CONST||LA26_5==CHAR_CONST||(LA26_5 >= DEFINED_OP && LA26_5 <= DIGIT_STR)||LA26_5==FALSE||LA26_5==HEX_CONST||LA26_5==LBRACKET||LA26_5==LPAREN||LA26_5==M_REAL_CONST||LA26_5==OCT_CONST||LA26_5==TRUE) ) {
										alt26=1;
									}
									}
									break;
								case RPAREN:
									{
									int LA26_6 = input.LA(4);
									if ( (LA26_6==CHARACTER||LA26_6==CLASS||LA26_6==COLON_COLON||LA26_6==COMPLEX||LA26_6==DIGIT_STR||(LA26_6 >= DOUBLE && LA26_6 <= DOUBLEPRECISION)||LA26_6==ELEMENTAL||LA26_6==FUNCTION||LA26_6==IDENT||LA26_6==IMPURE||LA26_6==INTEGER||(LA26_6 >= LOGICAL && LA26_6 <= LPAREN)||LA26_6==MODULE||LA26_6==NON_RECURSIVE||LA26_6==PURE||(LA26_6 >= REAL && LA26_6 <= RECURSIVE)||LA26_6==RPAREN||LA26_6==SUBROUTINE||LA26_6==TYPE) ) {
										alt26=1;
									}
									else if ( (LA26_6==COMMA) ) {
										int LA26_8 = input.LA(5);
										if ( (LA26_8==ALLOCATABLE||LA26_8==ASYNCHRONOUS||LA26_8==BIND||LA26_8==CODIMENSION||LA26_8==CONTIGUOUS||LA26_8==DIMENSION||LA26_8==EXTERNAL||LA26_8==INTENT||LA26_8==INTRINSIC||LA26_8==NO_LANG_EXT||LA26_8==OPTIONAL||LA26_8==PARAMETER||LA26_8==POINTER||LA26_8==PRIVATE||(LA26_8 >= PROTECTED && LA26_8 <= PUBLIC)||LA26_8==SAVE||LA26_8==TARGET||(LA26_8 >= VALUE && LA26_8 <= VOLATILE)) ) {
											alt26=1;
										}
									}
									}
									break;
							}
						}
					}
					else if ( (LA26_0==ASTERISK) ) {
						alt26=1;
					}
					switch (alt26) {
						case 1 :
							// MFortranParser2018.g:488:16: kind_selector
							{
							pushFollow(FOLLOW_kind_selector_in_intrinsic_type_spec2040);
							kind_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasKS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            COMPLEX29, null,
					            MFPUtils.TYPE_CPLX, hasKS);}
					}
					break;
				case 6 :
					// MFortranParser2018.g:492:7: DOUBLE COMPLEX
					{
					DOUBLE30=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_intrinsic_type_spec2062); if (state.failed) return;
					COMPLEX31=(Token)match(input,COMPLEX,FOLLOW_COMPLEX_in_intrinsic_type_spec2064); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec( 
					            DOUBLE30, COMPLEX31, 
					            MFPUtils.TYPE_DCPLX, false);}
					}
					break;
				case 7 :
					// MFortranParser2018.g:496:7: DOUBLECOMPLEX
					{
					DOUBLECOMPLEX32=(Token)match(input,DOUBLECOMPLEX,FOLLOW_DOUBLECOMPLEX_in_intrinsic_type_spec2082); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            DOUBLECOMPLEX32, null, 
					            MFPUtils.TYPE_DCPLX, false);}
					}
					break;
				case 8 :
					// MFortranParser2018.g:500:7: CHARACTER ( char_selector )?
					{
					CHARACTER33=(Token)match(input,CHARACTER,FOLLOW_CHARACTER_in_intrinsic_type_spec2100); if (state.failed) return;
					// MFortranParser2018.g:500:17: ( char_selector )?
					int alt27=2;
					int LA27_0 = input.LA(1);
					if ( (LA27_0==ASTERISK) ) {
						alt27=1;
					}
					else if ( (LA27_0==LPAREN) ) {
						int LA27_2 = input.LA(2);
						if ( (LA27_2==ASTERISK||LA27_2==BIN_CONST||LA27_2==CHAR_CONST||LA27_2==COLON||(LA27_2 >= DEFINED_OP && LA27_2 <= DIGIT_STR)||LA27_2==FALSE||LA27_2==HEX_CONST||(LA27_2 >= KIND && LA27_2 <= LBRACKET)||LA27_2==LEN||LA27_2==LPAREN||LA27_2==MINUS||LA27_2==M_REAL_CONST||LA27_2==NOT||LA27_2==OCT_CONST||LA27_2==PLUS||LA27_2==TRUE) ) {
							alt27=1;
						}
						else if ( (LA27_2==IDENT) ) {
							switch ( input.LA(3) ) {
								case AND:
								case ASTERISK:
								case CHAR_CONST:
								case DEFINED_OP:
								case EQ:
								case EQV:
								case EQ_EQ:
								case GE:
								case GREATERTHAN:
								case GREATERTHAN_EQ:
								case GT:
								case LBRACKET:
								case LE:
								case LESSTHAN:
								case LESSTHAN_EQ:
								case LPAREN:
								case LT:
								case NE:
								case NEQV:
								case OR:
								case PERCENT:
								case PLUS:
								case POWER:
								case SLASH:
								case SLASH_EQ:
								case SLASH_SLASH:
									{
									alt27=1;
									}
									break;
								case MINUS:
									{
									int LA27_5 = input.LA(4);
									if ( (LA27_5==IDENT) ) {
										switch ( input.LA(5) ) {
											case AND:
											case ASTERISK:
											case CHAR_CONST:
											case DEFINED_OP:
											case EQ:
											case EQV:
											case EQ_EQ:
											case GE:
											case GREATERTHAN:
											case GREATERTHAN_EQ:
											case GT:
											case LBRACKET:
											case LE:
											case LESSTHAN:
											case LESSTHAN_EQ:
											case LPAREN:
											case LT:
											case MINUS:
											case NE:
											case NEQV:
											case OR:
											case PERCENT:
											case PLUS:
											case POWER:
											case SLASH:
											case SLASH_EQ:
											case SLASH_SLASH:
												{
												alt27=1;
												}
												break;
											case COMMA:
												{
												int LA27_6 = input.LA(6);
												if ( (LA27_6==BIN_CONST||LA27_6==CHAR_CONST||(LA27_6 >= DEFINED_OP && LA27_6 <= DIGIT_STR)||LA27_6==FALSE||LA27_6==HEX_CONST||(LA27_6 >= KIND && LA27_6 <= LBRACKET)||LA27_6==LPAREN||LA27_6==MINUS||LA27_6==M_REAL_CONST||LA27_6==NOT||LA27_6==OCT_CONST||LA27_6==PLUS||LA27_6==TRUE) ) {
													alt27=1;
												}
												else if ( (LA27_6==IDENT) ) {
													switch ( input.LA(7) ) {
														case AND:
														case ASTERISK:
														case CHAR_CONST:
														case DEFINED_OP:
														case EQ:
														case EQV:
														case EQ_EQ:
														case GE:
														case GREATERTHAN:
														case GREATERTHAN_EQ:
														case GT:
														case LBRACKET:
														case LE:
														case LESSTHAN:
														case LESSTHAN_EQ:
														case LPAREN:
														case LT:
														case NE:
														case NEQV:
														case OR:
														case PERCENT:
														case PLUS:
														case POWER:
														case SLASH:
														case SLASH_EQ:
														case SLASH_SLASH:
															{
															alt27=1;
															}
															break;
														case MINUS:
															{
															int LA27_11 = input.LA(8);
															if ( (LA27_11==IDENT) ) {
																int LA27_12 = input.LA(9);
																if ( (LA27_12==AND||LA27_12==ASTERISK||LA27_12==CHAR_CONST||LA27_12==DEFINED_OP||LA27_12==EQ||(LA27_12 >= EQV && LA27_12 <= EQ_EQ)||LA27_12==GE||(LA27_12 >= GREATERTHAN && LA27_12 <= GT)||(LA27_12 >= LBRACKET && LA27_12 <= LE)||(LA27_12 >= LESSTHAN && LA27_12 <= LESSTHAN_EQ)||(LA27_12 >= LPAREN && LA27_12 <= LT)||LA27_12==MINUS||(LA27_12 >= NE && LA27_12 <= NEQV)||LA27_12==OR||LA27_12==PERCENT||LA27_12==PLUS||LA27_12==POWER||(LA27_12 >= SLASH && LA27_12 <= SLASH_SLASH)) ) {
																	alt27=1;
																}
																else if ( (LA27_12==RPAREN) ) {
																	int LA27_7 = input.LA(10);
																	if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
																		alt27=1;
																	}
																	else if ( (LA27_7==COMMA) ) {
																		int LA27_10 = input.LA(11);
																		if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
																			alt27=1;
																		}
																	}
																}
															}
															else if ( (LA27_11==BIN_CONST||LA27_11==CHAR_CONST||(LA27_11 >= DEFINED_OP && LA27_11 <= DIGIT_STR)||LA27_11==FALSE||LA27_11==HEX_CONST||LA27_11==LBRACKET||LA27_11==LPAREN||LA27_11==M_REAL_CONST||LA27_11==OCT_CONST||LA27_11==TRUE) ) {
																alt27=1;
															}
															}
															break;
														case RPAREN:
															{
															int LA27_7 = input.LA(8);
															if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
																alt27=1;
															}
															else if ( (LA27_7==COMMA) ) {
																int LA27_10 = input.LA(9);
																if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
																	alt27=1;
																}
															}
															}
															break;
													}
												}
												}
												break;
											case RPAREN:
												{
												int LA27_7 = input.LA(6);
												if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
													alt27=1;
												}
												else if ( (LA27_7==COMMA) ) {
													int LA27_10 = input.LA(7);
													if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
														alt27=1;
													}
												}
												}
												break;
										}
									}
									else if ( (LA27_5==BIN_CONST||LA27_5==CHAR_CONST||(LA27_5 >= DEFINED_OP && LA27_5 <= DIGIT_STR)||LA27_5==FALSE||LA27_5==HEX_CONST||LA27_5==LBRACKET||LA27_5==LPAREN||LA27_5==M_REAL_CONST||LA27_5==OCT_CONST||LA27_5==TRUE) ) {
										alt27=1;
									}
									}
									break;
								case COMMA:
									{
									int LA27_6 = input.LA(4);
									if ( (LA27_6==BIN_CONST||LA27_6==CHAR_CONST||(LA27_6 >= DEFINED_OP && LA27_6 <= DIGIT_STR)||LA27_6==FALSE||LA27_6==HEX_CONST||(LA27_6 >= KIND && LA27_6 <= LBRACKET)||LA27_6==LPAREN||LA27_6==MINUS||LA27_6==M_REAL_CONST||LA27_6==NOT||LA27_6==OCT_CONST||LA27_6==PLUS||LA27_6==TRUE) ) {
										alt27=1;
									}
									else if ( (LA27_6==IDENT) ) {
										switch ( input.LA(5) ) {
											case AND:
											case ASTERISK:
											case CHAR_CONST:
											case DEFINED_OP:
											case EQ:
											case EQV:
											case EQ_EQ:
											case GE:
											case GREATERTHAN:
											case GREATERTHAN_EQ:
											case GT:
											case LBRACKET:
											case LE:
											case LESSTHAN:
											case LESSTHAN_EQ:
											case LPAREN:
											case LT:
											case NE:
											case NEQV:
											case OR:
											case PERCENT:
											case PLUS:
											case POWER:
											case SLASH:
											case SLASH_EQ:
											case SLASH_SLASH:
												{
												alt27=1;
												}
												break;
											case MINUS:
												{
												int LA27_11 = input.LA(6);
												if ( (LA27_11==IDENT) ) {
													int LA27_12 = input.LA(7);
													if ( (LA27_12==AND||LA27_12==ASTERISK||LA27_12==CHAR_CONST||LA27_12==DEFINED_OP||LA27_12==EQ||(LA27_12 >= EQV && LA27_12 <= EQ_EQ)||LA27_12==GE||(LA27_12 >= GREATERTHAN && LA27_12 <= GT)||(LA27_12 >= LBRACKET && LA27_12 <= LE)||(LA27_12 >= LESSTHAN && LA27_12 <= LESSTHAN_EQ)||(LA27_12 >= LPAREN && LA27_12 <= LT)||LA27_12==MINUS||(LA27_12 >= NE && LA27_12 <= NEQV)||LA27_12==OR||LA27_12==PERCENT||LA27_12==PLUS||LA27_12==POWER||(LA27_12 >= SLASH && LA27_12 <= SLASH_SLASH)) ) {
														alt27=1;
													}
													else if ( (LA27_12==RPAREN) ) {
														int LA27_7 = input.LA(8);
														if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
															alt27=1;
														}
														else if ( (LA27_7==COMMA) ) {
															int LA27_10 = input.LA(9);
															if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
																alt27=1;
															}
														}
													}
												}
												else if ( (LA27_11==BIN_CONST||LA27_11==CHAR_CONST||(LA27_11 >= DEFINED_OP && LA27_11 <= DIGIT_STR)||LA27_11==FALSE||LA27_11==HEX_CONST||LA27_11==LBRACKET||LA27_11==LPAREN||LA27_11==M_REAL_CONST||LA27_11==OCT_CONST||LA27_11==TRUE) ) {
													alt27=1;
												}
												}
												break;
											case RPAREN:
												{
												int LA27_7 = input.LA(6);
												if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
													alt27=1;
												}
												else if ( (LA27_7==COMMA) ) {
													int LA27_10 = input.LA(7);
													if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
														alt27=1;
													}
												}
												}
												break;
										}
									}
									}
									break;
								case RPAREN:
									{
									int LA27_7 = input.LA(4);
									if ( (LA27_7==CHARACTER||LA27_7==CLASS||LA27_7==COLON_COLON||LA27_7==COMPLEX||LA27_7==DIGIT_STR||(LA27_7 >= DOUBLE && LA27_7 <= DOUBLEPRECISION)||LA27_7==ELEMENTAL||LA27_7==FUNCTION||LA27_7==IDENT||LA27_7==IMPURE||LA27_7==INTEGER||(LA27_7 >= LOGICAL && LA27_7 <= LPAREN)||LA27_7==MODULE||LA27_7==NON_RECURSIVE||LA27_7==PURE||(LA27_7 >= REAL && LA27_7 <= RECURSIVE)||LA27_7==RPAREN||LA27_7==SUBROUTINE||LA27_7==TYPE) ) {
										alt27=1;
									}
									else if ( (LA27_7==COMMA) ) {
										int LA27_10 = input.LA(5);
										if ( (LA27_10==ALLOCATABLE||LA27_10==ASYNCHRONOUS||LA27_10==BIND||LA27_10==CODIMENSION||LA27_10==CONTIGUOUS||LA27_10==DIMENSION||LA27_10==EXTERNAL||LA27_10==INTENT||LA27_10==INTRINSIC||LA27_10==NO_LANG_EXT||LA27_10==OPTIONAL||LA27_10==PARAMETER||LA27_10==POINTER||LA27_10==PRIVATE||(LA27_10 >= PROTECTED && LA27_10 <= PUBLIC)||LA27_10==SAVE||LA27_10==TARGET||(LA27_10 >= VALUE && LA27_10 <= VOLATILE)) ) {
											alt27=1;
										}
									}
									}
									break;
							}
						}
					}
					switch (alt27) {
						case 1 :
							// MFortranParser2018.g:500:18: char_selector
							{
							pushFollow(FOLLOW_char_selector_in_intrinsic_type_spec2103);
							char_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasKS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            CHARACTER33, null, 
					            MFPUtils.TYPE_CHAR, hasKS);}
					}
					break;
				case 9 :
					// MFortranParser2018.g:504:7: LOGICAL ( kind_selector )?
					{
					LOGICAL34=(Token)match(input,LOGICAL,FOLLOW_LOGICAL_in_intrinsic_type_spec2125); if (state.failed) return;
					// MFortranParser2018.g:504:15: ( kind_selector )?
					int alt28=2;
					int LA28_0 = input.LA(1);
					if ( (LA28_0==LPAREN) ) {
						int LA28_1 = input.LA(2);
						if ( (LA28_1==BIN_CONST||LA28_1==CHAR_CONST||(LA28_1 >= DEFINED_OP && LA28_1 <= DIGIT_STR)||LA28_1==FALSE||LA28_1==HEX_CONST||(LA28_1 >= KIND && LA28_1 <= LBRACKET)||LA28_1==LPAREN||LA28_1==MINUS||LA28_1==M_REAL_CONST||LA28_1==NOT||LA28_1==OCT_CONST||LA28_1==PLUS||LA28_1==TRUE) ) {
							alt28=1;
						}
						else if ( (LA28_1==IDENT) ) {
							switch ( input.LA(3) ) {
								case AND:
								case ASTERISK:
								case CHAR_CONST:
								case DEFINED_OP:
								case EQ:
								case EQV:
								case EQ_EQ:
								case GE:
								case GREATERTHAN:
								case GREATERTHAN_EQ:
								case GT:
								case LBRACKET:
								case LE:
								case LESSTHAN:
								case LESSTHAN_EQ:
								case LPAREN:
								case LT:
								case NE:
								case NEQV:
								case OR:
								case PERCENT:
								case PLUS:
								case POWER:
								case SLASH:
								case SLASH_EQ:
								case SLASH_SLASH:
									{
									alt28=1;
									}
									break;
								case MINUS:
									{
									int LA28_5 = input.LA(4);
									if ( (LA28_5==IDENT) ) {
										int LA28_7 = input.LA(5);
										if ( (LA28_7==AND||LA28_7==ASTERISK||LA28_7==CHAR_CONST||LA28_7==DEFINED_OP||LA28_7==EQ||(LA28_7 >= EQV && LA28_7 <= EQ_EQ)||LA28_7==GE||(LA28_7 >= GREATERTHAN && LA28_7 <= GT)||(LA28_7 >= LBRACKET && LA28_7 <= LE)||(LA28_7 >= LESSTHAN && LA28_7 <= LESSTHAN_EQ)||(LA28_7 >= LPAREN && LA28_7 <= LT)||LA28_7==MINUS||(LA28_7 >= NE && LA28_7 <= NEQV)||LA28_7==OR||LA28_7==PERCENT||LA28_7==PLUS||LA28_7==POWER||(LA28_7 >= SLASH && LA28_7 <= SLASH_SLASH)) ) {
											alt28=1;
										}
										else if ( (LA28_7==RPAREN) ) {
											int LA28_6 = input.LA(6);
											if ( (LA28_6==CHARACTER||LA28_6==CLASS||LA28_6==COLON_COLON||LA28_6==COMPLEX||LA28_6==DIGIT_STR||(LA28_6 >= DOUBLE && LA28_6 <= DOUBLEPRECISION)||LA28_6==ELEMENTAL||LA28_6==FUNCTION||LA28_6==IDENT||LA28_6==IMPURE||LA28_6==INTEGER||(LA28_6 >= LOGICAL && LA28_6 <= LPAREN)||LA28_6==MODULE||LA28_6==NON_RECURSIVE||LA28_6==PURE||(LA28_6 >= REAL && LA28_6 <= RECURSIVE)||LA28_6==RPAREN||LA28_6==SUBROUTINE||LA28_6==TYPE) ) {
												alt28=1;
											}
											else if ( (LA28_6==COMMA) ) {
												int LA28_8 = input.LA(7);
												if ( (LA28_8==ALLOCATABLE||LA28_8==ASYNCHRONOUS||LA28_8==BIND||LA28_8==CODIMENSION||LA28_8==CONTIGUOUS||LA28_8==DIMENSION||LA28_8==EXTERNAL||LA28_8==INTENT||LA28_8==INTRINSIC||LA28_8==NO_LANG_EXT||LA28_8==OPTIONAL||LA28_8==PARAMETER||LA28_8==POINTER||LA28_8==PRIVATE||(LA28_8 >= PROTECTED && LA28_8 <= PUBLIC)||LA28_8==SAVE||LA28_8==TARGET||(LA28_8 >= VALUE && LA28_8 <= VOLATILE)) ) {
													alt28=1;
												}
											}
										}
									}
									else if ( (LA28_5==BIN_CONST||LA28_5==CHAR_CONST||(LA28_5 >= DEFINED_OP && LA28_5 <= DIGIT_STR)||LA28_5==FALSE||LA28_5==HEX_CONST||LA28_5==LBRACKET||LA28_5==LPAREN||LA28_5==M_REAL_CONST||LA28_5==OCT_CONST||LA28_5==TRUE) ) {
										alt28=1;
									}
									}
									break;
								case RPAREN:
									{
									int LA28_6 = input.LA(4);
									if ( (LA28_6==CHARACTER||LA28_6==CLASS||LA28_6==COLON_COLON||LA28_6==COMPLEX||LA28_6==DIGIT_STR||(LA28_6 >= DOUBLE && LA28_6 <= DOUBLEPRECISION)||LA28_6==ELEMENTAL||LA28_6==FUNCTION||LA28_6==IDENT||LA28_6==IMPURE||LA28_6==INTEGER||(LA28_6 >= LOGICAL && LA28_6 <= LPAREN)||LA28_6==MODULE||LA28_6==NON_RECURSIVE||LA28_6==PURE||(LA28_6 >= REAL && LA28_6 <= RECURSIVE)||LA28_6==RPAREN||LA28_6==SUBROUTINE||LA28_6==TYPE) ) {
										alt28=1;
									}
									else if ( (LA28_6==COMMA) ) {
										int LA28_8 = input.LA(5);
										if ( (LA28_8==ALLOCATABLE||LA28_8==ASYNCHRONOUS||LA28_8==BIND||LA28_8==CODIMENSION||LA28_8==CONTIGUOUS||LA28_8==DIMENSION||LA28_8==EXTERNAL||LA28_8==INTENT||LA28_8==INTRINSIC||LA28_8==NO_LANG_EXT||LA28_8==OPTIONAL||LA28_8==PARAMETER||LA28_8==POINTER||LA28_8==PRIVATE||(LA28_8 >= PROTECTED && LA28_8 <= PUBLIC)||LA28_8==SAVE||LA28_8==TARGET||(LA28_8 >= VALUE && LA28_8 <= VOLATILE)) ) {
											alt28=1;
										}
									}
									}
									break;
							}
						}
					}
					else if ( (LA28_0==ASTERISK) ) {
						alt28=1;
					}
					switch (alt28) {
						case 1 :
							// MFortranParser2018.g:504:16: kind_selector
							{
							pushFollow(FOLLOW_kind_selector_in_intrinsic_type_spec2128);
							kind_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasKS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.intrinsic_type_spec(
					            LOGICAL34, null, 
					            MFPUtils.TYPE_BOOL, hasKS);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "intrinsic_type_spec"



	// $ANTLR start "kind_selector"
	// MFortranParser2018.g:513:1: kind_selector : ( LPAREN (tk0= KIND tk1= EQUALS )? expr RPAREN |tk0= ASTERISK tk1= DIGIT_STR );
	public final void kind_selector() throws RecognitionException {
		Token tk0=null;
		Token tk1=null;


		  boolean hasKSExpr = false;

		try {
			// MFortranParser2018.g:520:5: ( LPAREN (tk0= KIND tk1= EQUALS )? expr RPAREN |tk0= ASTERISK tk1= DIGIT_STR )
			int alt31=2;
			int LA31_0 = input.LA(1);
			if ( (LA31_0==LPAREN) ) {
				alt31=1;
			}
			else if ( (LA31_0==ASTERISK) ) {
				alt31=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 31, 0, input);
				throw nvae;
			}

			switch (alt31) {
				case 1 :
					// MFortranParser2018.g:520:7: LPAREN (tk0= KIND tk1= EQUALS )? expr RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_kind_selector2169); if (state.failed) return;
					// MFortranParser2018.g:520:14: (tk0= KIND tk1= EQUALS )?
					int alt30=2;
					int LA30_0 = input.LA(1);
					if ( (LA30_0==KIND) ) {
						alt30=1;
					}
					switch (alt30) {
						case 1 :
							// MFortranParser2018.g:520:15: tk0= KIND tk1= EQUALS
							{
							tk0=(Token)match(input,KIND,FOLLOW_KIND_in_kind_selector2174); if (state.failed) return;
							tk1=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_kind_selector2178); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_expr_in_kind_selector2182);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_kind_selector2184); if (state.failed) return;
					if ( state.backtracking==0 ) {hasKSExpr = true;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:522:7: tk0= ASTERISK tk1= DIGIT_STR
					{
					tk0=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_kind_selector2204); if (state.failed) return;
					tk1=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_kind_selector2208); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.kind_selector(tk0, tk1, hasKSExpr);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "kind_selector"



	// $ANTLR start "signed_int_literal_constant"
	// MFortranParser2018.g:530:1: signed_int_literal_constant : (sign= PLUS |sign= MINUS )? int_literal_constant ;
	public final void signed_int_literal_constant() throws RecognitionException {
		Token sign=null;

		try {
			// MFortranParser2018.g:534:5: ( (sign= PLUS |sign= MINUS )? int_literal_constant )
			// MFortranParser2018.g:534:7: (sign= PLUS |sign= MINUS )? int_literal_constant
			{
			// MFortranParser2018.g:534:7: (sign= PLUS |sign= MINUS )?
			int alt32=3;
			int LA32_0 = input.LA(1);
			if ( (LA32_0==PLUS) ) {
				alt32=1;
			}
			else if ( (LA32_0==MINUS) ) {
				alt32=2;
			}
			switch (alt32) {
				case 1 :
					// MFortranParser2018.g:534:8: sign= PLUS
					{
					sign=(Token)match(input,PLUS,FOLLOW_PLUS_in_signed_int_literal_constant2235); if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:534:20: sign= MINUS
					{
					sign=(Token)match(input,MINUS,FOLLOW_MINUS_in_signed_int_literal_constant2241); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_int_literal_constant_in_signed_int_literal_constant2251);
			int_literal_constant();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.signed_int_literal_constant(sign);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "signed_int_literal_constant"



	// $ANTLR start "int_literal_constant"
	// MFortranParser2018.g:541:1: int_literal_constant : DIGIT_STR ( UNDERSCORE kind= kind_param )? ;
	public final void int_literal_constant() throws RecognitionException {
		Token DIGIT_STR35=null;
		Token kind =null;

		try {
			// MFortranParser2018.g:542:5: ( DIGIT_STR ( UNDERSCORE kind= kind_param )? )
			// MFortranParser2018.g:542:7: DIGIT_STR ( UNDERSCORE kind= kind_param )?
			{
			DIGIT_STR35=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_int_literal_constant2270); if (state.failed) return;
			// MFortranParser2018.g:542:17: ( UNDERSCORE kind= kind_param )?
			int alt33=2;
			int LA33_0 = input.LA(1);
			if ( (LA33_0==UNDERSCORE) ) {
				alt33=1;
			}
			switch (alt33) {
				case 1 :
					// MFortranParser2018.g:542:18: UNDERSCORE kind= kind_param
					{
					match(input,UNDERSCORE,FOLLOW_UNDERSCORE_in_int_literal_constant2273); if (state.failed) return;
					pushFollow(FOLLOW_kind_param_in_int_literal_constant2277);
					kind=kind_param();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.int_literal_constant(DIGIT_STR35, kind); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "int_literal_constant"



	// $ANTLR start "kind_param"
	// MFortranParser2018.g:550:1: kind_param returns [Token t] : ( DIGIT_STR | IDENT );
	public final Token kind_param() throws RecognitionException {
		Token t = null;


		Token DIGIT_STR36=null;
		Token IDENT37=null;

		try {
			// MFortranParser2018.g:554:5: ( DIGIT_STR | IDENT )
			int alt34=2;
			int LA34_0 = input.LA(1);
			if ( (LA34_0==DIGIT_STR) ) {
				alt34=1;
			}
			else if ( (LA34_0==IDENT) ) {
				alt34=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 34, 0, input);
				throw nvae;
			}

			switch (alt34) {
				case 1 :
					// MFortranParser2018.g:554:7: DIGIT_STR
					{
					DIGIT_STR36=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_kind_param2316); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = DIGIT_STR36; }
					}
					break;
				case 2 :
					// MFortranParser2018.g:555:7: IDENT
					{
					IDENT37=(Token)match(input,IDENT,FOLLOW_IDENT_in_kind_param2326); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = IDENT37; }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.kind_param(t);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "kind_param"



	// $ANTLR start "signed_real_literal_constant"
	// MFortranParser2018.g:567:1: signed_real_literal_constant : (sign= PLUS |sign= MINUS )? real_literal_constant ;
	public final void signed_real_literal_constant() throws RecognitionException {
		Token sign=null;

		try {
			// MFortranParser2018.g:571:5: ( (sign= PLUS |sign= MINUS )? real_literal_constant )
			// MFortranParser2018.g:571:7: (sign= PLUS |sign= MINUS )? real_literal_constant
			{
			// MFortranParser2018.g:571:7: (sign= PLUS |sign= MINUS )?
			int alt35=3;
			int LA35_0 = input.LA(1);
			if ( (LA35_0==PLUS) ) {
				alt35=1;
			}
			else if ( (LA35_0==MINUS) ) {
				alt35=2;
			}
			switch (alt35) {
				case 1 :
					// MFortranParser2018.g:571:8: sign= PLUS
					{
					sign=(Token)match(input,PLUS,FOLLOW_PLUS_in_signed_real_literal_constant2358); if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:571:20: sign= MINUS
					{
					sign=(Token)match(input,MINUS,FOLLOW_MINUS_in_signed_real_literal_constant2364); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_real_literal_constant_in_signed_real_literal_constant2374);
			real_literal_constant();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.signed_real_literal_constant(sign);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "signed_real_literal_constant"



	// $ANTLR start "real_literal_constant"
	// MFortranParser2018.g:583:1: real_literal_constant : M_REAL_CONST ( UNDERSCORE kind= kind_param )? ;
	public final void real_literal_constant() throws RecognitionException {
		Token M_REAL_CONST38=null;
		Token kind =null;

		try {
			// MFortranParser2018.g:584:5: ( M_REAL_CONST ( UNDERSCORE kind= kind_param )? )
			// MFortranParser2018.g:584:7: M_REAL_CONST ( UNDERSCORE kind= kind_param )?
			{
			M_REAL_CONST38=(Token)match(input,M_REAL_CONST,FOLLOW_M_REAL_CONST_in_real_literal_constant2393); if (state.failed) return;
			// MFortranParser2018.g:584:20: ( UNDERSCORE kind= kind_param )?
			int alt36=2;
			int LA36_0 = input.LA(1);
			if ( (LA36_0==UNDERSCORE) ) {
				alt36=1;
			}
			switch (alt36) {
				case 1 :
					// MFortranParser2018.g:584:21: UNDERSCORE kind= kind_param
					{
					match(input,UNDERSCORE,FOLLOW_UNDERSCORE_in_real_literal_constant2396); if (state.failed) return;
					pushFollow(FOLLOW_kind_param_in_real_literal_constant2400);
					kind=kind_param();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.real_literal_constant(M_REAL_CONST38, kind); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "real_literal_constant"



	// $ANTLR start "complex_literal_constant"
	// MFortranParser2018.g:601:1: complex_literal_constant : LPAREN real_part COMMA imag_part RPAREN ;
	public final void complex_literal_constant() throws RecognitionException {
		try {
			// MFortranParser2018.g:605:5: ( LPAREN real_part COMMA imag_part RPAREN )
			// MFortranParser2018.g:605:7: LPAREN real_part COMMA imag_part RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_complex_literal_constant2440); if (state.failed) return;
			pushFollow(FOLLOW_real_part_in_complex_literal_constant2442);
			real_part();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_complex_literal_constant2444); if (state.failed) return;
			pushFollow(FOLLOW_imag_part_in_complex_literal_constant2446);
			imag_part();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_complex_literal_constant2448); if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			    MFPA.complex_literal_constant();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "complex_literal_constant"



	// $ANTLR start "real_part"
	// MFortranParser2018.g:612:1: real_part : ( signed_int_literal_constant | signed_real_literal_constant | IDENT );
	public final void real_part() throws RecognitionException {
		Token IDENT39=null;

		try {
			// MFortranParser2018.g:613:5: ( signed_int_literal_constant | signed_real_literal_constant | IDENT )
			int alt37=3;
			switch ( input.LA(1) ) {
			case PLUS:
				{
				int LA37_1 = input.LA(2);
				if ( (LA37_1==DIGIT_STR) ) {
					alt37=1;
				}
				else if ( (LA37_1==M_REAL_CONST) ) {
					alt37=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 37, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case MINUS:
				{
				int LA37_2 = input.LA(2);
				if ( (LA37_2==DIGIT_STR) ) {
					alt37=1;
				}
				else if ( (LA37_2==M_REAL_CONST) ) {
					alt37=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 37, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIGIT_STR:
				{
				alt37=1;
				}
				break;
			case M_REAL_CONST:
				{
				alt37=2;
				}
				break;
			case IDENT:
				{
				alt37=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 37, 0, input);
				throw nvae;
			}
			switch (alt37) {
				case 1 :
					// MFortranParser2018.g:613:7: signed_int_literal_constant
					{
					pushFollow(FOLLOW_signed_int_literal_constant_in_real_part2467);
					signed_int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.real_part(null, 
					            MFPUtils.CPLXP.INT); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:616:7: signed_real_literal_constant
					{
					pushFollow(FOLLOW_signed_real_literal_constant_in_real_part2485);
					signed_real_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.real_part(null, 
					            MFPUtils.CPLXP.REAL); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:619:7: IDENT
					{
					IDENT39=(Token)match(input,IDENT,FOLLOW_IDENT_in_real_part2504); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.real_part(IDENT39, 
					            MFPUtils.CPLXP.IDENT); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "real_part"



	// $ANTLR start "imag_part"
	// MFortranParser2018.g:628:1: imag_part : ( signed_int_literal_constant | signed_real_literal_constant | IDENT );
	public final void imag_part() throws RecognitionException {
		Token IDENT40=null;

		try {
			// MFortranParser2018.g:629:5: ( signed_int_literal_constant | signed_real_literal_constant | IDENT )
			int alt38=3;
			switch ( input.LA(1) ) {
			case PLUS:
				{
				int LA38_1 = input.LA(2);
				if ( (LA38_1==DIGIT_STR) ) {
					alt38=1;
				}
				else if ( (LA38_1==M_REAL_CONST) ) {
					alt38=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 38, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case MINUS:
				{
				int LA38_2 = input.LA(2);
				if ( (LA38_2==DIGIT_STR) ) {
					alt38=1;
				}
				else if ( (LA38_2==M_REAL_CONST) ) {
					alt38=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 38, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIGIT_STR:
				{
				alt38=1;
				}
				break;
			case M_REAL_CONST:
				{
				alt38=2;
				}
				break;
			case IDENT:
				{
				alt38=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 38, 0, input);
				throw nvae;
			}
			switch (alt38) {
				case 1 :
					// MFortranParser2018.g:629:7: signed_int_literal_constant
					{
					pushFollow(FOLLOW_signed_int_literal_constant_in_imag_part2533);
					signed_int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.imag_part(null, 
					            MFPUtils.CPLXP.INT); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:632:7: signed_real_literal_constant
					{
					pushFollow(FOLLOW_signed_real_literal_constant_in_imag_part2551);
					signed_real_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.imag_part(null, 
					            MFPUtils.CPLXP.REAL); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:635:7: IDENT
					{
					IDENT40=(Token)match(input,IDENT,FOLLOW_IDENT_in_imag_part2569); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.imag_part(IDENT40, 
					            MFPUtils.CPLXP.IDENT); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "imag_part"



	// $ANTLR start "char_selector"
	// MFortranParser2018.g:646:1: char_selector : ( ASTERISK char_length ( COMMA )? | LPAREN type_param_value ( COMMA (kind= KIND EQUALS )? expr )? RPAREN | LPAREN len= LEN EQUALS type_param_value ( COMMA kind= KIND EQUALS expr )? RPAREN | LPAREN kind= KIND EQUALS expr ( COMMA (len= LEN EQUALS )? type_param_value )? RPAREN );
	public final void char_selector() throws RecognitionException {
		Token kind=null;
		Token len=null;


		  int pos0 = MFPUtils.CHAR_SELECTOR_NONE;
		  int pos1 = MFPUtils.CHAR_SELECTOR_NONE;

		try {
			// MFortranParser2018.g:654:5: ( ASTERISK char_length ( COMMA )? | LPAREN type_param_value ( COMMA (kind= KIND EQUALS )? expr )? RPAREN | LPAREN len= LEN EQUALS type_param_value ( COMMA kind= KIND EQUALS expr )? RPAREN | LPAREN kind= KIND EQUALS expr ( COMMA (len= LEN EQUALS )? type_param_value )? RPAREN )
			int alt45=4;
			int LA45_0 = input.LA(1);
			if ( (LA45_0==ASTERISK) ) {
				alt45=1;
			}
			else if ( (LA45_0==LPAREN) ) {
				switch ( input.LA(2) ) {
				case LEN:
					{
					alt45=3;
					}
					break;
				case KIND:
					{
					alt45=4;
					}
					break;
				case ASTERISK:
				case BIN_CONST:
				case CHAR_CONST:
				case COLON:
				case DEFINED_OP:
				case DIGIT_STR:
				case FALSE:
				case HEX_CONST:
				case IDENT:
				case LBRACKET:
				case LPAREN:
				case MINUS:
				case M_REAL_CONST:
				case NOT:
				case OCT_CONST:
				case PLUS:
				case TRUE:
					{
					alt45=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 45, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 45, 0, input);
				throw nvae;
			}

			switch (alt45) {
				case 1 :
					// MFortranParser2018.g:654:7: ASTERISK char_length ( COMMA )?
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_char_selector2607); if (state.failed) return;
					pushFollow(FOLLOW_char_length_in_char_selector2609);
					char_length();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:654:28: ( COMMA )?
					int alt39=2;
					int LA39_0 = input.LA(1);
					if ( (LA39_0==COMMA) ) {
						int LA39_1 = input.LA(2);
						if ( (LA39_1==CHARACTER||LA39_1==CLASS||(LA39_1 >= COLON_COLON && LA39_1 <= COMMA)||LA39_1==COMPLEX||LA39_1==DIGIT_STR||(LA39_1 >= DOUBLE && LA39_1 <= DOUBLEPRECISION)||LA39_1==ELEMENTAL||LA39_1==FUNCTION||LA39_1==IDENT||LA39_1==IMPURE||LA39_1==INTEGER||(LA39_1 >= LOGICAL && LA39_1 <= LPAREN)||LA39_1==MODULE||LA39_1==NON_RECURSIVE||LA39_1==PURE||(LA39_1 >= REAL && LA39_1 <= RECURSIVE)||LA39_1==RPAREN||LA39_1==SUBROUTINE||LA39_1==TYPE) ) {
							alt39=1;
						}
					}
					switch (alt39) {
						case 1 :
							// MFortranParser2018.g:654:29: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_char_selector2612); if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) { pos0 = MFPUtils.CHAR_SELECTOR_CHARLEN; }
					}
					break;
				case 2 :
					// MFortranParser2018.g:656:7: LPAREN type_param_value ( COMMA (kind= KIND EQUALS )? expr )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_char_selector2632); if (state.failed) return;
					pushFollow(FOLLOW_type_param_value_in_char_selector2634);
					type_param_value();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:657:7: ( COMMA (kind= KIND EQUALS )? expr )?
					int alt41=2;
					int LA41_0 = input.LA(1);
					if ( (LA41_0==COMMA) ) {
						alt41=1;
					}
					switch (alt41) {
						case 1 :
							// MFortranParser2018.g:657:9: COMMA (kind= KIND EQUALS )? expr
							{
							match(input,COMMA,FOLLOW_COMMA_in_char_selector2644); if (state.failed) return;
							// MFortranParser2018.g:657:15: (kind= KIND EQUALS )?
							int alt40=2;
							int LA40_0 = input.LA(1);
							if ( (LA40_0==KIND) ) {
								alt40=1;
							}
							switch (alt40) {
								case 1 :
									// MFortranParser2018.g:657:16: kind= KIND EQUALS
									{
									kind=(Token)match(input,KIND,FOLLOW_KIND_in_char_selector2649); if (state.failed) return;
									match(input,EQUALS,FOLLOW_EQUALS_in_char_selector2651); if (state.failed) return;
									}
									break;

							}

							pushFollow(FOLLOW_expr_in_char_selector2655);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { pos1 = MFPUtils.CHAR_SELECTOR_KINDEXPR; }
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_char_selector2684); if (state.failed) return;
					if ( state.backtracking==0 ) { pos0 = MFPUtils.CHAR_SELECTOR_TYPEVAL; }
					}
					break;
				case 3 :
					// MFortranParser2018.g:662:7: LPAREN len= LEN EQUALS type_param_value ( COMMA kind= KIND EQUALS expr )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_char_selector2702); if (state.failed) return;
					len=(Token)match(input,LEN,FOLLOW_LEN_in_char_selector2706); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_char_selector2708); if (state.failed) return;
					pushFollow(FOLLOW_type_param_value_in_char_selector2710);
					type_param_value();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:663:7: ( COMMA kind= KIND EQUALS expr )?
					int alt42=2;
					int LA42_0 = input.LA(1);
					if ( (LA42_0==COMMA) ) {
						alt42=1;
					}
					switch (alt42) {
						case 1 :
							// MFortranParser2018.g:663:9: COMMA kind= KIND EQUALS expr
							{
							match(input,COMMA,FOLLOW_COMMA_in_char_selector2720); if (state.failed) return;
							kind=(Token)match(input,KIND,FOLLOW_KIND_in_char_selector2724); if (state.failed) return;
							match(input,EQUALS,FOLLOW_EQUALS_in_char_selector2726); if (state.failed) return;
							pushFollow(FOLLOW_expr_in_char_selector2728);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { pos1 = MFPUtils.CHAR_SELECTOR_KINDEXPR;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_char_selector2757); if (state.failed) return;
					if ( state.backtracking==0 ) { pos0 = MFPUtils.CHAR_SELECTOR_TYPEVAL;}
					}
					break;
				case 4 :
					// MFortranParser2018.g:668:7: LPAREN kind= KIND EQUALS expr ( COMMA (len= LEN EQUALS )? type_param_value )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_char_selector2775); if (state.failed) return;
					kind=(Token)match(input,KIND,FOLLOW_KIND_in_char_selector2779); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_char_selector2781); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_char_selector2783);
					expr();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:669:7: ( COMMA (len= LEN EQUALS )? type_param_value )?
					int alt44=2;
					int LA44_0 = input.LA(1);
					if ( (LA44_0==COMMA) ) {
						alt44=1;
					}
					switch (alt44) {
						case 1 :
							// MFortranParser2018.g:669:9: COMMA (len= LEN EQUALS )? type_param_value
							{
							match(input,COMMA,FOLLOW_COMMA_in_char_selector2793); if (state.failed) return;
							// MFortranParser2018.g:669:15: (len= LEN EQUALS )?
							int alt43=2;
							int LA43_0 = input.LA(1);
							if ( (LA43_0==LEN) ) {
								alt43=1;
							}
							switch (alt43) {
								case 1 :
									// MFortranParser2018.g:669:16: len= LEN EQUALS
									{
									len=(Token)match(input,LEN,FOLLOW_LEN_in_char_selector2798); if (state.failed) return;
									match(input,EQUALS,FOLLOW_EQUALS_in_char_selector2800); if (state.failed) return;
									}
									break;

							}

							pushFollow(FOLLOW_type_param_value_in_char_selector2804);
							type_param_value();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { pos1 = MFPUtils.CHAR_SELECTOR_TYPEVAL;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_char_selector2833); if (state.failed) return;
					if ( state.backtracking==0 ) { pos0 = MFPUtils.CHAR_SELECTOR_KINDEXPR; }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.char_selector(len, kind, pos0, pos1);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "char_selector"



	// $ANTLR start "length_selector"
	// MFortranParser2018.g:679:1: length_selector : ( LPAREN (len= LEN EQUALS )? type_param_value RPAREN | ASTERISK char_length ( COMMA )? );
	public final void length_selector() throws RecognitionException {
		Token len=null;

		try {
			// MFortranParser2018.g:680:5: ( LPAREN (len= LEN EQUALS )? type_param_value RPAREN | ASTERISK char_length ( COMMA )? )
			int alt48=2;
			int LA48_0 = input.LA(1);
			if ( (LA48_0==LPAREN) ) {
				alt48=1;
			}
			else if ( (LA48_0==ASTERISK) ) {
				alt48=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 48, 0, input);
				throw nvae;
			}

			switch (alt48) {
				case 1 :
					// MFortranParser2018.g:680:7: LPAREN (len= LEN EQUALS )? type_param_value RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_length_selector2862); if (state.failed) return;
					// MFortranParser2018.g:680:14: (len= LEN EQUALS )?
					int alt46=2;
					int LA46_0 = input.LA(1);
					if ( (LA46_0==LEN) ) {
						alt46=1;
					}
					switch (alt46) {
						case 1 :
							// MFortranParser2018.g:680:16: len= LEN EQUALS
							{
							len=(Token)match(input,LEN,FOLLOW_LEN_in_length_selector2868); if (state.failed) return;
							match(input,EQUALS,FOLLOW_EQUALS_in_length_selector2870); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_type_param_value_in_length_selector2875);
					type_param_value();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_length_selector2877); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.length_selector(len, MFPUtils.CHAR_SELECTOR_TYPEVAL); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:682:7: ASTERISK char_length ( COMMA )?
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_length_selector2895); if (state.failed) return;
					pushFollow(FOLLOW_char_length_in_length_selector2897);
					char_length();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:682:28: ( COMMA )?
					int alt47=2;
					int LA47_0 = input.LA(1);
					if ( (LA47_0==COMMA) ) {
						alt47=1;
					}
					switch (alt47) {
						case 1 :
							// MFortranParser2018.g:682:29: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_length_selector2900); if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.length_selector(len, MFPUtils.CHAR_SELECTOR_CHARLEN); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "length_selector"



	// $ANTLR start "char_length"
	// MFortranParser2018.g:689:1: char_length : ( LPAREN type_param_value RPAREN | int_literal_constant );
	public final void char_length() throws RecognitionException {
		try {
			// MFortranParser2018.g:690:5: ( LPAREN type_param_value RPAREN | int_literal_constant )
			int alt49=2;
			int LA49_0 = input.LA(1);
			if ( (LA49_0==LPAREN) ) {
				alt49=1;
			}
			else if ( (LA49_0==DIGIT_STR) ) {
				alt49=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 49, 0, input);
				throw nvae;
			}

			switch (alt49) {
				case 1 :
					// MFortranParser2018.g:690:7: LPAREN type_param_value RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_char_length2935); if (state.failed) return;
					pushFollow(FOLLOW_type_param_value_in_char_length2937);
					type_param_value();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_char_length2939); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.char_length(true); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:691:7: int_literal_constant
					{
					pushFollow(FOLLOW_int_literal_constant_in_char_length2949);
					int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.char_length(false); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "char_length"



	// $ANTLR start "char_literal_constant"
	// MFortranParser2018.g:699:1: char_literal_constant : ( DIGIT_STR UNDERSCORE CHAR_CONST | IDENT CHAR_CONST | CHAR_CONST );
	public final void char_literal_constant() throws RecognitionException {
		Token DIGIT_STR41=null;
		Token CHAR_CONST42=null;
		Token IDENT43=null;
		Token CHAR_CONST44=null;
		Token CHAR_CONST45=null;

		try {
			// MFortranParser2018.g:700:5: ( DIGIT_STR UNDERSCORE CHAR_CONST | IDENT CHAR_CONST | CHAR_CONST )
			int alt50=3;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				alt50=1;
				}
				break;
			case IDENT:
				{
				alt50=2;
				}
				break;
			case CHAR_CONST:
				{
				alt50=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 50, 0, input);
				throw nvae;
			}
			switch (alt50) {
				case 1 :
					// MFortranParser2018.g:700:7: DIGIT_STR UNDERSCORE CHAR_CONST
					{
					DIGIT_STR41=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_char_literal_constant2970); if (state.failed) return;
					match(input,UNDERSCORE,FOLLOW_UNDERSCORE_in_char_literal_constant2972); if (state.failed) return;
					CHAR_CONST42=(Token)match(input,CHAR_CONST,FOLLOW_CHAR_CONST_in_char_literal_constant2974); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.char_literal_constant(DIGIT_STR41, CHAR_CONST42); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:702:7: IDENT CHAR_CONST
					{
					IDENT43=(Token)match(input,IDENT,FOLLOW_IDENT_in_char_literal_constant2992); if (state.failed) return;
					CHAR_CONST44=(Token)match(input,CHAR_CONST,FOLLOW_CHAR_CONST_in_char_literal_constant2994); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.char_literal_constant(IDENT43, CHAR_CONST44); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:704:7: CHAR_CONST
					{
					CHAR_CONST45=(Token)match(input,CHAR_CONST,FOLLOW_CHAR_CONST_in_char_literal_constant3012); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.char_literal_constant(null, CHAR_CONST45); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "char_literal_constant"



	// $ANTLR start "logical_literal_constant"
	// MFortranParser2018.g:711:1: logical_literal_constant : ( TRUE ( UNDERSCORE kind= kind_param )? | FALSE ( UNDERSCORE kind= kind_param )? );
	public final void logical_literal_constant() throws RecognitionException {
		Token TRUE46=null;
		Token FALSE47=null;
		Token kind =null;

		try {
			// MFortranParser2018.g:712:5: ( TRUE ( UNDERSCORE kind= kind_param )? | FALSE ( UNDERSCORE kind= kind_param )? )
			int alt53=2;
			int LA53_0 = input.LA(1);
			if ( (LA53_0==TRUE) ) {
				alt53=1;
			}
			else if ( (LA53_0==FALSE) ) {
				alt53=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 53, 0, input);
				throw nvae;
			}

			switch (alt53) {
				case 1 :
					// MFortranParser2018.g:712:7: TRUE ( UNDERSCORE kind= kind_param )?
					{
					TRUE46=(Token)match(input,TRUE,FOLLOW_TRUE_in_logical_literal_constant3041); if (state.failed) return;
					// MFortranParser2018.g:712:13: ( UNDERSCORE kind= kind_param )?
					int alt51=2;
					int LA51_0 = input.LA(1);
					if ( (LA51_0==UNDERSCORE) ) {
						alt51=1;
					}
					switch (alt51) {
						case 1 :
							// MFortranParser2018.g:712:15: UNDERSCORE kind= kind_param
							{
							match(input,UNDERSCORE,FOLLOW_UNDERSCORE_in_logical_literal_constant3046); if (state.failed) return;
							pushFollow(FOLLOW_kind_param_in_logical_literal_constant3050);
							kind=kind_param();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.logical_literal_constant(TRUE46, kind);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:714:7: FALSE ( UNDERSCORE kind= kind_param )?
					{
					FALSE47=(Token)match(input,FALSE,FOLLOW_FALSE_in_logical_literal_constant3070); if (state.failed) return;
					// MFortranParser2018.g:714:13: ( UNDERSCORE kind= kind_param )?
					int alt52=2;
					int LA52_0 = input.LA(1);
					if ( (LA52_0==UNDERSCORE) ) {
						alt52=1;
					}
					switch (alt52) {
						case 1 :
							// MFortranParser2018.g:714:15: UNDERSCORE kind= kind_param
							{
							match(input,UNDERSCORE,FOLLOW_UNDERSCORE_in_logical_literal_constant3074); if (state.failed) return;
							pushFollow(FOLLOW_kind_param_in_logical_literal_constant3078);
							kind=kind_param();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.logical_literal_constant(FALSE47, kind);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "logical_literal_constant"



	// $ANTLR start "derived_type_def"
	// MFortranParser2018.g:723:1: derived_type_def : derived_type_stmt ( type_param_or_comp_def_stmt_list )? ( private_or_sequence )* ( component_def_stmt )* ( type_bound_procedure_part )? end_type_stmt ;
	public final void derived_type_def() throws RecognitionException {
		try {
			// MFortranParser2018.g:727:5: ( derived_type_stmt ( type_param_or_comp_def_stmt_list )? ( private_or_sequence )* ( component_def_stmt )* ( type_bound_procedure_part )? end_type_stmt )
			// MFortranParser2018.g:727:7: derived_type_stmt ( type_param_or_comp_def_stmt_list )? ( private_or_sequence )* ( component_def_stmt )* ( type_bound_procedure_part )? end_type_stmt
			{
			pushFollow(FOLLOW_derived_type_stmt_in_derived_type_def3113);
			derived_type_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:729:7: ( type_param_or_comp_def_stmt_list )?
			int alt54=2;
			int LA54_0 = input.LA(1);
			if ( (LA54_0==ALLOCATABLE||LA54_0==CODIMENSION||LA54_0==CONTIGUOUS||LA54_0==DIMENSION||LA54_0==KIND||LA54_0==LEN||LA54_0==NO_LANG_EXT||LA54_0==POINTER||LA54_0==PUBLIC) ) {
				alt54=1;
			}
			else if ( (LA54_0==PRIVATE) ) {
				int LA54_2 = input.LA(2);
				if ( ((LA54_2 >= COLON_COLON && LA54_2 <= COMMA)) ) {
					alt54=1;
				}
			}
			switch (alt54) {
				case 1 :
					// MFortranParser2018.g:729:9: type_param_or_comp_def_stmt_list
					{
					pushFollow(FOLLOW_type_param_or_comp_def_stmt_list_in_derived_type_def3124);
					type_param_or_comp_def_stmt_list();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:730:7: ( private_or_sequence )*
			loop55:
			while (true) {
				int alt55=2;
				int LA55_0 = input.LA(1);
				if ( (LA55_0==DIGIT_STR) ) {
					int LA55_1 = input.LA(2);
					if ( (LA55_1==PRIVATE||LA55_1==SEQUENCE) ) {
						alt55=1;
					}

				}
				else if ( (LA55_0==PRIVATE||LA55_0==SEQUENCE) ) {
					alt55=1;
				}

				switch (alt55) {
				case 1 :
					// MFortranParser2018.g:730:9: private_or_sequence
					{
					pushFollow(FOLLOW_private_or_sequence_in_derived_type_def3137);
					private_or_sequence();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop55;
				}
			}

			if ( state.backtracking==0 ) { /* OFP:
			             * if private_or_sequence present, component_def_stmt in 
			             * type_param_or_comp_def_stmt_list is an error
			             */
			          }
			// MFortranParser2018.g:736:7: ( component_def_stmt )*
			loop56:
			while (true) {
				int alt56=2;
				int LA56_0 = input.LA(1);
				if ( (LA56_0==DIGIT_STR) ) {
					int LA56_1 = input.LA(2);
					if ( (LA56_1==CHARACTER||LA56_1==CLASS||LA56_1==COMPLEX||(LA56_1 >= DOUBLE && LA56_1 <= DOUBLEPRECISION)||LA56_1==INTEGER||LA56_1==LOGICAL||LA56_1==PROCEDURE||LA56_1==REAL||LA56_1==TYPE) ) {
						alt56=1;
					}

				}
				else if ( (LA56_0==CHARACTER||LA56_0==CLASS||LA56_0==COMPLEX||(LA56_0 >= DOUBLE && LA56_0 <= DOUBLEPRECISION)||LA56_0==INTEGER||LA56_0==LOGICAL||LA56_0==PROCEDURE||LA56_0==REAL||LA56_0==TYPE) ) {
					alt56=1;
				}

				switch (alt56) {
				case 1 :
					// MFortranParser2018.g:736:9: component_def_stmt
					{
					pushFollow(FOLLOW_component_def_stmt_in_derived_type_def3162);
					component_def_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop56;
				}
			}

			// MFortranParser2018.g:737:7: ( type_bound_procedure_part )?
			int alt57=2;
			int LA57_0 = input.LA(1);
			if ( (LA57_0==DIGIT_STR) ) {
				int LA57_1 = input.LA(2);
				if ( (LA57_1==CONTAINS) ) {
					alt57=1;
				}
			}
			else if ( (LA57_0==CONTAINS) ) {
				alt57=1;
			}
			switch (alt57) {
				case 1 :
					// MFortranParser2018.g:737:9: type_bound_procedure_part
					{
					pushFollow(FOLLOW_type_bound_procedure_part_in_derived_type_def3175);
					type_bound_procedure_part();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_type_stmt_in_derived_type_def3186);
			end_type_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.derived_type_def();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "derived_type_def"



	// $ANTLR start "derived_type_stmt"
	// MFortranParser2018.g:745:1: derived_type_stmt : (lbl= label )? TYPE ( ( COMMA type_attr_spec_list )? COLON_COLON )? IDENT ( LPAREN generic_name_list RPAREN )? end_of_stmt ;
	public final void derived_type_stmt() throws RecognitionException {
		Token TYPE48=null;
		Token IDENT49=null;
		Token lbl =null;
		Token end_of_stmt50 =null;


		  boolean hasASList = false; 
		  boolean hasPNList = false;

		try {
			// MFortranParser2018.g:753:5: ( (lbl= label )? TYPE ( ( COMMA type_attr_spec_list )? COLON_COLON )? IDENT ( LPAREN generic_name_list RPAREN )? end_of_stmt )
			// MFortranParser2018.g:753:7: (lbl= label )? TYPE ( ( COMMA type_attr_spec_list )? COLON_COLON )? IDENT ( LPAREN generic_name_list RPAREN )? end_of_stmt
			{
			// MFortranParser2018.g:753:7: (lbl= label )?
			int alt58=2;
			int LA58_0 = input.LA(1);
			if ( (LA58_0==DIGIT_STR) ) {
				alt58=1;
			}
			switch (alt58) {
				case 1 :
					// MFortranParser2018.g:753:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_derived_type_stmt3217);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			TYPE48=(Token)match(input,TYPE,FOLLOW_TYPE_in_derived_type_stmt3222); if (state.failed) return;
			// MFortranParser2018.g:754:7: ( ( COMMA type_attr_spec_list )? COLON_COLON )?
			int alt60=2;
			int LA60_0 = input.LA(1);
			if ( ((LA60_0 >= COLON_COLON && LA60_0 <= COMMA)) ) {
				alt60=1;
			}
			switch (alt60) {
				case 1 :
					// MFortranParser2018.g:754:9: ( COMMA type_attr_spec_list )? COLON_COLON
					{
					// MFortranParser2018.g:754:9: ( COMMA type_attr_spec_list )?
					int alt59=2;
					int LA59_0 = input.LA(1);
					if ( (LA59_0==COMMA) ) {
						alt59=1;
					}
					switch (alt59) {
						case 1 :
							// MFortranParser2018.g:754:11: COMMA type_attr_spec_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_derived_type_stmt3234); if (state.failed) return;
							pushFollow(FOLLOW_type_attr_spec_list_in_derived_type_stmt3236);
							type_attr_spec_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasASList=true;}
							}
							break;

					}

					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_derived_type_stmt3243); if (state.failed) return;
					}
					break;

			}

			IDENT49=(Token)match(input,IDENT,FOLLOW_IDENT_in_derived_type_stmt3255); if (state.failed) return;
			// MFortranParser2018.g:756:7: ( LPAREN generic_name_list RPAREN )?
			int alt61=2;
			int LA61_0 = input.LA(1);
			if ( (LA61_0==LPAREN) ) {
				alt61=1;
			}
			switch (alt61) {
				case 1 :
					// MFortranParser2018.g:756:9: LPAREN generic_name_list RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_derived_type_stmt3265); if (state.failed) return;
					pushFollow(FOLLOW_generic_name_list_in_derived_type_stmt3267);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_derived_type_stmt3269); if (state.failed) return;
					if ( state.backtracking==0 ) {hasPNList=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_derived_type_stmt3282);
			end_of_stmt50=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.derived_type_stmt(
			              lbl, TYPE48, IDENT49, end_of_stmt50,
			              hasASList, hasPNList);
			        }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "derived_type_stmt"



	// $ANTLR start "generic_name_list"
	// MFortranParser2018.g:764:1: generic_name_list : ident= IDENT ( COMMA ident= IDENT )* ;
	public final void generic_name_list() throws RecognitionException {
		Token ident=null;


		  int numGN = 1;

		try {
			// MFortranParser2018.g:771:5: (ident= IDENT ( COMMA ident= IDENT )* )
			// MFortranParser2018.g:771:7: ident= IDENT ( COMMA ident= IDENT )*
			{
			ident=(Token)match(input,IDENT,FOLLOW_IDENT_in_generic_name_list3319); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.generic_name(ident); }
			// MFortranParser2018.g:773:7: ( COMMA ident= IDENT )*
			loop62:
			while (true) {
				int alt62=2;
				int LA62_0 = input.LA(1);
				if ( (LA62_0==COMMA) ) {
					alt62=1;
				}

				switch (alt62) {
				case 1 :
					// MFortranParser2018.g:773:9: COMMA ident= IDENT
					{
					match(input,COMMA,FOLLOW_COMMA_in_generic_name_list3340); if (state.failed) return;
					ident=(Token)match(input,IDENT,FOLLOW_IDENT_in_generic_name_list3344); if (state.failed) return;
					if ( state.backtracking==0 ) { numGN++;
					            MFPA.generic_name(ident);
					          }
					}
					break;

				default :
					break loop62;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.generic_name_list(numGN);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "generic_name_list"



	// $ANTLR start "type_attr_spec"
	// MFortranParser2018.g:784:1: type_attr_spec : ( access_spec | EXTENDS LPAREN IDENT RPAREN | ABSTRACT | BIND LPAREN IDENT RPAREN );
	public final void type_attr_spec() throws RecognitionException {
		Token EXTENDS51=null;
		Token IDENT52=null;
		Token ABSTRACT53=null;
		Token BIND54=null;
		Token IDENT55=null;

		try {
			// MFortranParser2018.g:785:5: ( access_spec | EXTENDS LPAREN IDENT RPAREN | ABSTRACT | BIND LPAREN IDENT RPAREN )
			int alt63=4;
			switch ( input.LA(1) ) {
			case PRIVATE:
			case PUBLIC:
				{
				alt63=1;
				}
				break;
			case EXTENDS:
				{
				alt63=2;
				}
				break;
			case ABSTRACT:
				{
				alt63=3;
				}
				break;
			case BIND:
				{
				alt63=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 63, 0, input);
				throw nvae;
			}
			switch (alt63) {
				case 1 :
					// MFortranParser2018.g:785:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_type_attr_spec3386);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_attr_spec(null, null, 
					            MFPUtils.ATTR_ACCESS);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:788:7: EXTENDS LPAREN IDENT RPAREN
					{
					EXTENDS51=(Token)match(input,EXTENDS,FOLLOW_EXTENDS_in_type_attr_spec3404); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_type_attr_spec3406); if (state.failed) return;
					IDENT52=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_attr_spec3408); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_type_attr_spec3410); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_attr_spec(EXTENDS51, IDENT52,
					            MFPUtils.ATTR_EXTENDS);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:791:7: ABSTRACT
					{
					ABSTRACT53=(Token)match(input,ABSTRACT,FOLLOW_ABSTRACT_in_type_attr_spec3428); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_attr_spec(ABSTRACT53, null,
					            MFPUtils.ATTR_ABSTRACT);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:795:7: BIND LPAREN IDENT RPAREN
					{
					BIND54=(Token)match(input,BIND,FOLLOW_BIND_in_type_attr_spec3448); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_type_attr_spec3450); if (state.failed) return;
					IDENT55=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_attr_spec3452); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_type_attr_spec3454); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_attr_spec(BIND54, IDENT55, 
					            MFPUtils.ATTR_BIND_C);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_attr_spec"



	// $ANTLR start "type_attr_spec_list"
	// MFortranParser2018.g:800:1: type_attr_spec_list : type_attr_spec ( COMMA type_attr_spec )* ;
	public final void type_attr_spec_list() throws RecognitionException {

		  int numTAS = 1;

		try {
			// MFortranParser2018.g:807:5: ( type_attr_spec ( COMMA type_attr_spec )* )
			// MFortranParser2018.g:807:7: type_attr_spec ( COMMA type_attr_spec )*
			{
			pushFollow(FOLLOW_type_attr_spec_in_type_attr_spec_list3489);
			type_attr_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:807:22: ( COMMA type_attr_spec )*
			loop64:
			while (true) {
				int alt64=2;
				int LA64_0 = input.LA(1);
				if ( (LA64_0==COMMA) ) {
					alt64=1;
				}

				switch (alt64) {
				case 1 :
					// MFortranParser2018.g:807:24: COMMA type_attr_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_type_attr_spec_list3493); if (state.failed) return;
					pushFollow(FOLLOW_type_attr_spec_in_type_attr_spec_list3495);
					type_attr_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTAS++;}
					}
					break;

				default :
					break loop64;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_attr_spec_list(numTAS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_attr_spec_list"



	// $ANTLR start "private_or_sequence"
	// MFortranParser2018.g:813:1: private_or_sequence : ( private_components_stmt | sequence_stmt );
	public final void private_or_sequence() throws RecognitionException {
		try {
			// MFortranParser2018.g:817:5: ( private_components_stmt | sequence_stmt )
			int alt65=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA65_1 = input.LA(2);
				if ( (LA65_1==PRIVATE) ) {
					alt65=1;
				}
				else if ( (LA65_1==SEQUENCE) ) {
					alt65=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 65, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case PRIVATE:
				{
				alt65=1;
				}
				break;
			case SEQUENCE:
				{
				alt65=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 65, 0, input);
				throw nvae;
			}
			switch (alt65) {
				case 1 :
					// MFortranParser2018.g:817:7: private_components_stmt
					{
					pushFollow(FOLLOW_private_components_stmt_in_private_or_sequence3524);
					private_components_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:818:7: sequence_stmt
					{
					pushFollow(FOLLOW_sequence_stmt_in_private_or_sequence3532);
					sequence_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.private_or_sequence();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "private_or_sequence"



	// $ANTLR start "end_type_stmt"
	// MFortranParser2018.g:824:1: end_type_stmt : (lbl= label )? END TYPE (id= IDENT )? end_of_stmt ;
	public final void end_type_stmt() throws RecognitionException {
		Token id=null;
		Token END56=null;
		Token TYPE57=null;
		Token lbl =null;
		Token end_of_stmt58 =null;

		try {
			// MFortranParser2018.g:828:5: ( (lbl= label )? END TYPE (id= IDENT )? end_of_stmt )
			// MFortranParser2018.g:828:7: (lbl= label )? END TYPE (id= IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:828:7: (lbl= label )?
			int alt66=2;
			int LA66_0 = input.LA(1);
			if ( (LA66_0==DIGIT_STR) ) {
				alt66=1;
			}
			switch (alt66) {
				case 1 :
					// MFortranParser2018.g:828:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_type_stmt3558);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END56=(Token)match(input,END,FOLLOW_END_in_end_type_stmt3563); if (state.failed) return;
			TYPE57=(Token)match(input,TYPE,FOLLOW_TYPE_in_end_type_stmt3565); if (state.failed) return;
			// MFortranParser2018.g:829:7: (id= IDENT )?
			int alt67=2;
			int LA67_0 = input.LA(1);
			if ( (LA67_0==IDENT) ) {
				alt67=1;
			}
			switch (alt67) {
				case 1 :
					// MFortranParser2018.g:829:8: id= IDENT
					{
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_type_stmt3577); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_type_stmt3581);
			end_of_stmt58=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_type_stmt(lbl, END56, TYPE57, id, end_of_stmt58);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_type_stmt"



	// $ANTLR start "sequence_stmt"
	// MFortranParser2018.g:836:1: sequence_stmt : (lbl= label )? SEQUENCE end_of_stmt ;
	public final void sequence_stmt() throws RecognitionException {
		Token SEQUENCE59=null;
		Token lbl =null;
		Token end_of_stmt60 =null;

		try {
			// MFortranParser2018.g:840:5: ( (lbl= label )? SEQUENCE end_of_stmt )
			// MFortranParser2018.g:840:7: (lbl= label )? SEQUENCE end_of_stmt
			{
			// MFortranParser2018.g:840:7: (lbl= label )?
			int alt68=2;
			int LA68_0 = input.LA(1);
			if ( (LA68_0==DIGIT_STR) ) {
				alt68=1;
			}
			switch (alt68) {
				case 1 :
					// MFortranParser2018.g:840:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_sequence_stmt3617);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			SEQUENCE59=(Token)match(input,SEQUENCE,FOLLOW_SEQUENCE_in_sequence_stmt3622); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_sequence_stmt3624);
			end_of_stmt60=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.sequence_stmt(lbl, SEQUENCE59, end_of_stmt60);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sequence_stmt"



	// $ANTLR start "type_param_or_comp_def_stmt"
	// MFortranParser2018.g:851:1: type_param_or_comp_def_stmt : ( type_param_attr_spec COLON_COLON type_param_decl_list end_of_stmt | component_attr_spec_list COLON_COLON component_decl_list end_of_stmt );
	public final void type_param_or_comp_def_stmt() throws RecognitionException {
		Token end_of_stmt61 =null;
		Token end_of_stmt62 =null;

		try {
			// MFortranParser2018.g:852:5: ( type_param_attr_spec COLON_COLON type_param_decl_list end_of_stmt | component_attr_spec_list COLON_COLON component_decl_list end_of_stmt )
			int alt69=2;
			int LA69_0 = input.LA(1);
			if ( (LA69_0==KIND||LA69_0==LEN) ) {
				alt69=1;
			}
			else if ( (LA69_0==ALLOCATABLE||LA69_0==CODIMENSION||LA69_0==CONTIGUOUS||LA69_0==DIMENSION||LA69_0==NO_LANG_EXT||LA69_0==POINTER||LA69_0==PRIVATE||LA69_0==PUBLIC) ) {
				alt69=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 69, 0, input);
				throw nvae;
			}

			switch (alt69) {
				case 1 :
					// MFortranParser2018.g:852:7: type_param_attr_spec COLON_COLON type_param_decl_list end_of_stmt
					{
					pushFollow(FOLLOW_type_param_attr_spec_in_type_param_or_comp_def_stmt3653);
					type_param_attr_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_type_param_or_comp_def_stmt3655); if (state.failed) return;
					pushFollow(FOLLOW_type_param_decl_list_in_type_param_or_comp_def_stmt3657);
					type_param_decl_list();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_type_param_or_comp_def_stmt3659);
					end_of_stmt61=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_or_comp_def_stmt( end_of_stmt61,
					            MFPUtils.TPD_OR_CD.TYPE_PARAM_DEF);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:855:7: component_attr_spec_list COLON_COLON component_decl_list end_of_stmt
					{
					pushFollow(FOLLOW_component_attr_spec_list_in_type_param_or_comp_def_stmt3676);
					component_attr_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_type_param_or_comp_def_stmt3678); if (state.failed) return;
					pushFollow(FOLLOW_component_decl_list_in_type_param_or_comp_def_stmt3680);
					component_decl_list();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_type_param_or_comp_def_stmt3682);
					end_of_stmt62=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_or_comp_def_stmt( end_of_stmt62,
					            MFPUtils.TPD_OR_CD.COMP_DEF);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_or_comp_def_stmt"



	// $ANTLR start "type_param_or_comp_def_stmt_list"
	// MFortranParser2018.g:860:1: type_param_or_comp_def_stmt_list : type_param_or_comp_def_stmt ( type_param_or_comp_def_stmt )* ;
	public final void type_param_or_comp_def_stmt_list() throws RecognitionException {

		  int numTPCD = 1;

		try {
			// MFortranParser2018.g:867:5: ( type_param_or_comp_def_stmt ( type_param_or_comp_def_stmt )* )
			// MFortranParser2018.g:867:7: type_param_or_comp_def_stmt ( type_param_or_comp_def_stmt )*
			{
			pushFollow(FOLLOW_type_param_or_comp_def_stmt_in_type_param_or_comp_def_stmt_list3716);
			type_param_or_comp_def_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:867:35: ( type_param_or_comp_def_stmt )*
			loop70:
			while (true) {
				int alt70=2;
				int LA70_0 = input.LA(1);
				if ( (LA70_0==PRIVATE) ) {
					int LA70_2 = input.LA(2);
					if ( ((LA70_2 >= COLON_COLON && LA70_2 <= COMMA)) ) {
						alt70=1;
					}

				}
				else if ( (LA70_0==ALLOCATABLE||LA70_0==CODIMENSION||LA70_0==CONTIGUOUS||LA70_0==DIMENSION||LA70_0==KIND||LA70_0==LEN||LA70_0==NO_LANG_EXT||LA70_0==POINTER||LA70_0==PUBLIC) ) {
					alt70=1;
				}

				switch (alt70) {
				case 1 :
					// MFortranParser2018.g:867:37: type_param_or_comp_def_stmt
					{
					pushFollow(FOLLOW_type_param_or_comp_def_stmt_in_type_param_or_comp_def_stmt_list3720);
					type_param_or_comp_def_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTPCD++;}
					}
					break;

				default :
					break loop70;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_param_or_comp_def_stmt_list();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_or_comp_def_stmt_list"



	// $ANTLR start "type_param_decl"
	// MFortranParser2018.g:875:1: type_param_decl : IDENT ( EQUALS expr )? ;
	public final void type_param_decl() throws RecognitionException {
		Token IDENT63=null;


		  boolean hasInit=false;

		try {
			// MFortranParser2018.g:879:5: ( IDENT ( EQUALS expr )? )
			// MFortranParser2018.g:879:7: IDENT ( EQUALS expr )?
			{
			IDENT63=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_param_decl3748); if (state.failed) return;
			// MFortranParser2018.g:879:13: ( EQUALS expr )?
			int alt71=2;
			int LA71_0 = input.LA(1);
			if ( (LA71_0==EQUALS) ) {
				alt71=1;
			}
			switch (alt71) {
				case 1 :
					// MFortranParser2018.g:879:15: EQUALS expr
					{
					match(input,EQUALS,FOLLOW_EQUALS_in_type_param_decl3752); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_type_param_decl3754);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasInit=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.type_param_decl(IDENT63, hasInit); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_decl"



	// $ANTLR start "type_param_decl_list"
	// MFortranParser2018.g:883:1: type_param_decl_list : type_param_decl ( COMMA type_param_decl )* ;
	public final void type_param_decl_list() throws RecognitionException {

		  int numTPD = 1;

		try {
			// MFortranParser2018.g:890:5: ( type_param_decl ( COMMA type_param_decl )* )
			// MFortranParser2018.g:890:7: type_param_decl ( COMMA type_param_decl )*
			{
			pushFollow(FOLLOW_type_param_decl_in_type_param_decl_list3792);
			type_param_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:890:23: ( COMMA type_param_decl )*
			loop72:
			while (true) {
				int alt72=2;
				int LA72_0 = input.LA(1);
				if ( (LA72_0==COMMA) ) {
					alt72=1;
				}

				switch (alt72) {
				case 1 :
					// MFortranParser2018.g:890:25: COMMA type_param_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_type_param_decl_list3796); if (state.failed) return;
					pushFollow(FOLLOW_type_param_decl_in_type_param_decl_list3798);
					type_param_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTPD++;}
					}
					break;

				default :
					break loop72;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_param_decl_list(numTPD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_decl_list"



	// $ANTLR start "type_param_attr_spec"
	// MFortranParser2018.g:896:1: type_param_attr_spec : ( KIND | LEN );
	public final void type_param_attr_spec() throws RecognitionException {
		Token KIND64=null;
		Token LEN65=null;

		try {
			// MFortranParser2018.g:897:5: ( KIND | LEN )
			int alt73=2;
			int LA73_0 = input.LA(1);
			if ( (LA73_0==KIND) ) {
				alt73=1;
			}
			else if ( (LA73_0==LEN) ) {
				alt73=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 73, 0, input);
				throw nvae;
			}

			switch (alt73) {
				case 1 :
					// MFortranParser2018.g:897:7: KIND
					{
					KIND64=(Token)match(input,KIND,FOLLOW_KIND_in_type_param_attr_spec3822); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_attr_spec(KIND64, 
					            MFPUtils.ATTR_KIND); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:900:7: LEN
					{
					LEN65=(Token)match(input,LEN,FOLLOW_LEN_in_type_param_attr_spec3841); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_param_attr_spec(LEN65,  
					            MFPUtils.ATTR_LEN); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_attr_spec"



	// $ANTLR start "component_def_stmt"
	// MFortranParser2018.g:913:1: component_def_stmt : ( data_component_def_stmt | proc_component_def_stmt );
	public final void component_def_stmt() throws RecognitionException {
		try {
			// MFortranParser2018.g:917:5: ( data_component_def_stmt | proc_component_def_stmt )
			int alt74=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA74_1 = input.LA(2);
				if ( (LA74_1==CHARACTER||LA74_1==CLASS||LA74_1==COMPLEX||(LA74_1 >= DOUBLE && LA74_1 <= DOUBLEPRECISION)||LA74_1==INTEGER||LA74_1==LOGICAL||LA74_1==REAL||LA74_1==TYPE) ) {
					alt74=1;
				}
				else if ( (LA74_1==PROCEDURE) ) {
					alt74=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 74, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CHARACTER:
			case CLASS:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case INTEGER:
			case LOGICAL:
			case REAL:
			case TYPE:
				{
				alt74=1;
				}
				break;
			case PROCEDURE:
				{
				alt74=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 74, 0, input);
				throw nvae;
			}
			switch (alt74) {
				case 1 :
					// MFortranParser2018.g:917:7: data_component_def_stmt
					{
					pushFollow(FOLLOW_data_component_def_stmt_in_component_def_stmt3879);
					data_component_def_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:918:7: proc_component_def_stmt
					{
					pushFollow(FOLLOW_proc_component_def_stmt_in_component_def_stmt3887);
					proc_component_def_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_def_stmt"



	// $ANTLR start "data_component_def_stmt"
	// MFortranParser2018.g:924:1: data_component_def_stmt : (lbl= label )? declaration_type_spec ( ( COMMA component_attr_spec_list )? COLON_COLON )? component_decl_list end_of_stmt ;
	public final void data_component_def_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt66 =null;


		  boolean hasSpec=false; 

		try {
			// MFortranParser2018.g:931:5: ( (lbl= label )? declaration_type_spec ( ( COMMA component_attr_spec_list )? COLON_COLON )? component_decl_list end_of_stmt )
			// MFortranParser2018.g:931:7: (lbl= label )? declaration_type_spec ( ( COMMA component_attr_spec_list )? COLON_COLON )? component_decl_list end_of_stmt
			{
			// MFortranParser2018.g:931:7: (lbl= label )?
			int alt75=2;
			int LA75_0 = input.LA(1);
			if ( (LA75_0==DIGIT_STR) ) {
				alt75=1;
			}
			switch (alt75) {
				case 1 :
					// MFortranParser2018.g:931:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_data_component_def_stmt3918);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_declaration_type_spec_in_data_component_def_stmt3930);
			declaration_type_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:933:7: ( ( COMMA component_attr_spec_list )? COLON_COLON )?
			int alt77=2;
			int LA77_0 = input.LA(1);
			if ( ((LA77_0 >= COLON_COLON && LA77_0 <= COMMA)) ) {
				alt77=1;
			}
			switch (alt77) {
				case 1 :
					// MFortranParser2018.g:933:9: ( COMMA component_attr_spec_list )? COLON_COLON
					{
					// MFortranParser2018.g:933:9: ( COMMA component_attr_spec_list )?
					int alt76=2;
					int LA76_0 = input.LA(1);
					if ( (LA76_0==COMMA) ) {
						alt76=1;
					}
					switch (alt76) {
						case 1 :
							// MFortranParser2018.g:933:11: COMMA component_attr_spec_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_data_component_def_stmt3943); if (state.failed) return;
							pushFollow(FOLLOW_component_attr_spec_list_in_data_component_def_stmt3945);
							component_attr_spec_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSpec=true;}
							}
							break;

					}

					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_data_component_def_stmt3961); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_component_decl_list_in_data_component_def_stmt3973);
			component_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_data_component_def_stmt3975);
			end_of_stmt66=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.data_component_def_stmt(lbl, end_of_stmt66, hasSpec); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_component_def_stmt"



	// $ANTLR start "component_attr_spec"
	// MFortranParser2018.g:943:1: component_attr_spec : ( access_spec | ALLOCATABLE | CODIMENSION LBRACKET coarray_spec RBRACKET | CONTIGUOUS | DIMENSION LPAREN component_array_spec RPAREN | POINTER | component_attr_spec_extension );
	public final void component_attr_spec() throws RecognitionException {
		Token ALLOCATABLE67=null;
		Token CODIMENSION68=null;
		Token CONTIGUOUS69=null;
		Token DIMENSION70=null;
		Token POINTER71=null;

		try {
			// MFortranParser2018.g:944:5: ( access_spec | ALLOCATABLE | CODIMENSION LBRACKET coarray_spec RBRACKET | CONTIGUOUS | DIMENSION LPAREN component_array_spec RPAREN | POINTER | component_attr_spec_extension )
			int alt78=7;
			switch ( input.LA(1) ) {
			case PRIVATE:
			case PUBLIC:
				{
				alt78=1;
				}
				break;
			case ALLOCATABLE:
				{
				alt78=2;
				}
				break;
			case CODIMENSION:
				{
				alt78=3;
				}
				break;
			case CONTIGUOUS:
				{
				alt78=4;
				}
				break;
			case DIMENSION:
				{
				alt78=5;
				}
				break;
			case POINTER:
				{
				alt78=6;
				}
				break;
			case NO_LANG_EXT:
				{
				alt78=7;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 78, 0, input);
				throw nvae;
			}
			switch (alt78) {
				case 1 :
					// MFortranParser2018.g:944:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_component_attr_spec4003);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.component_attr_spec(null, 
					            MFPUtils.ATTR_ACCESS);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:947:7: ALLOCATABLE
					{
					ALLOCATABLE67=(Token)match(input,ALLOCATABLE,FOLLOW_ALLOCATABLE_in_component_attr_spec4021); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.component_attr_spec(ALLOCATABLE67, 
					            MFPUtils.ATTR_ALLOCATABLE);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:950:7: CODIMENSION LBRACKET coarray_spec RBRACKET
					{
					CODIMENSION68=(Token)match(input,CODIMENSION,FOLLOW_CODIMENSION_in_component_attr_spec4039); if (state.failed) return;
					match(input,LBRACKET,FOLLOW_LBRACKET_in_component_attr_spec4041); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_component_attr_spec4043);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_component_attr_spec4045); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.component_attr_spec(CODIMENSION68, 
					            MFPUtils.ATTR_CODIMENSION);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:953:7: CONTIGUOUS
					{
					CONTIGUOUS69=(Token)match(input,CONTIGUOUS,FOLLOW_CONTIGUOUS_in_component_attr_spec4063); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.component_attr_spec(CONTIGUOUS69, 
					            MFPUtils.ATTR_CONTIGUOUS);}
					}
					break;
				case 5 :
					// MFortranParser2018.g:956:7: DIMENSION LPAREN component_array_spec RPAREN
					{
					DIMENSION70=(Token)match(input,DIMENSION,FOLLOW_DIMENSION_in_component_attr_spec4081); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_component_attr_spec4083); if (state.failed) return;
					pushFollow(FOLLOW_component_array_spec_in_component_attr_spec4085);
					component_array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_component_attr_spec4087); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.component_attr_spec(DIMENSION70, 
					            MFPUtils.ATTR_DIMENSION);}
					}
					break;
				case 6 :
					// MFortranParser2018.g:959:7: POINTER
					{
					POINTER71=(Token)match(input,POINTER,FOLLOW_POINTER_in_component_attr_spec4105); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.component_attr_spec(POINTER71, 
					            MFPUtils.ATTR_POINTER);}
					}
					break;
				case 7 :
					// MFortranParser2018.g:962:7: component_attr_spec_extension
					{
					pushFollow(FOLLOW_component_attr_spec_extension_in_component_attr_spec4123);
					component_attr_spec_extension();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_attr_spec"



	// $ANTLR start "component_attr_spec_extension"
	// MFortranParser2018.g:965:1: component_attr_spec_extension : NO_LANG_EXT ;
	public final void component_attr_spec_extension() throws RecognitionException {
		try {
			// MFortranParser2018.g:966:5: ( NO_LANG_EXT )
			// MFortranParser2018.g:966:7: NO_LANG_EXT
			{
			match(input,NO_LANG_EXT,FOLLOW_NO_LANG_EXT_in_component_attr_spec_extension4140); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_attr_spec_extension"



	// $ANTLR start "component_attr_spec_list"
	// MFortranParser2018.g:969:1: component_attr_spec_list : component_attr_spec ( COMMA component_attr_spec )* ;
	public final void component_attr_spec_list() throws RecognitionException {

		  int numCAS = 1;

		try {
			// MFortranParser2018.g:976:5: ( component_attr_spec ( COMMA component_attr_spec )* )
			// MFortranParser2018.g:976:7: component_attr_spec ( COMMA component_attr_spec )*
			{
			pushFollow(FOLLOW_component_attr_spec_in_component_attr_spec_list4165);
			component_attr_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:976:27: ( COMMA component_attr_spec )*
			loop79:
			while (true) {
				int alt79=2;
				int LA79_0 = input.LA(1);
				if ( (LA79_0==COMMA) ) {
					alt79=1;
				}

				switch (alt79) {
				case 1 :
					// MFortranParser2018.g:976:29: COMMA component_attr_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_component_attr_spec_list4169); if (state.failed) return;
					pushFollow(FOLLOW_component_attr_spec_in_component_attr_spec_list4171);
					component_attr_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCAS++;}
					}
					break;

				default :
					break loop79;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.component_attr_spec_list(numCAS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_attr_spec_list"



	// $ANTLR start "component_decl"
	// MFortranParser2018.g:982:1: component_decl : IDENT ( LPAREN component_array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( component_initialization )? ;
	public final void component_decl() throws RecognitionException {
		Token IDENT72=null;

		 
		  boolean hasCAS = false; 
		  boolean hasCS = false;
		  boolean hasCL = false;
		  boolean hasCI = false;

		try {
			// MFortranParser2018.g:989:5: ( IDENT ( LPAREN component_array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( component_initialization )? )
			// MFortranParser2018.g:989:7: IDENT ( LPAREN component_array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( component_initialization )?
			{
			IDENT72=(Token)match(input,IDENT,FOLLOW_IDENT_in_component_decl4200); if (state.failed) return;
			// MFortranParser2018.g:990:7: ( LPAREN component_array_spec RPAREN )?
			int alt80=2;
			int LA80_0 = input.LA(1);
			if ( (LA80_0==LPAREN) ) {
				alt80=1;
			}
			switch (alt80) {
				case 1 :
					// MFortranParser2018.g:990:8: LPAREN component_array_spec RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_component_decl4210); if (state.failed) return;
					pushFollow(FOLLOW_component_array_spec_in_component_decl4212);
					component_array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_component_decl4214); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCAS=true;}
					}
					break;

			}

			// MFortranParser2018.g:991:7: ( LBRACKET coarray_spec RBRACKET )?
			int alt81=2;
			int LA81_0 = input.LA(1);
			if ( (LA81_0==LBRACKET) ) {
				alt81=1;
			}
			switch (alt81) {
				case 1 :
					// MFortranParser2018.g:991:8: LBRACKET coarray_spec RBRACKET
					{
					match(input,LBRACKET,FOLLOW_LBRACKET_in_component_decl4227); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_component_decl4229);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_component_decl4231); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCS=true;}
					}
					break;

			}

			// MFortranParser2018.g:992:7: ( ASTERISK char_length )?
			int alt82=2;
			int LA82_0 = input.LA(1);
			if ( (LA82_0==ASTERISK) ) {
				alt82=1;
			}
			switch (alt82) {
				case 1 :
					// MFortranParser2018.g:992:8: ASTERISK char_length
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_component_decl4244); if (state.failed) return;
					pushFollow(FOLLOW_char_length_in_component_decl4246);
					char_length();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasCL=true;}
					}
					break;

			}

			// MFortranParser2018.g:993:7: ( component_initialization )?
			int alt83=2;
			int LA83_0 = input.LA(1);
			if ( (LA83_0==EQUALS||LA83_0==EQ_GT) ) {
				alt83=1;
			}
			switch (alt83) {
				case 1 :
					// MFortranParser2018.g:993:8: component_initialization
					{
					pushFollow(FOLLOW_component_initialization_in_component_decl4259);
					component_initialization();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasCI =true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.component_decl(IDENT72, 
			              hasCAS, hasCS, hasCL, hasCI);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_decl"



	// $ANTLR start "component_decl_list"
	// MFortranParser2018.g:998:1: component_decl_list : component_decl ( COMMA component_decl )* ;
	public final void component_decl_list() throws RecognitionException {

		  int numCD = 1;

		try {
			// MFortranParser2018.g:1005:5: ( component_decl ( COMMA component_decl )* )
			// MFortranParser2018.g:1005:7: component_decl ( COMMA component_decl )*
			{
			pushFollow(FOLLOW_component_decl_in_component_decl_list4301);
			component_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1005:22: ( COMMA component_decl )*
			loop84:
			while (true) {
				int alt84=2;
				int LA84_0 = input.LA(1);
				if ( (LA84_0==COMMA) ) {
					alt84=1;
				}

				switch (alt84) {
				case 1 :
					// MFortranParser2018.g:1005:24: COMMA component_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_component_decl_list4305); if (state.failed) return;
					pushFollow(FOLLOW_component_decl_in_component_decl_list4307);
					component_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCD++;}
					}
					break;

				default :
					break loop84;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.component_decl_list(numCD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_decl_list"



	// $ANTLR start "component_array_spec"
	// MFortranParser2018.g:1011:1: component_array_spec : ( explicit_shape_spec_list | deferred_shape_spec_list );
	public final void component_array_spec() throws RecognitionException {
		try {
			// MFortranParser2018.g:1012:5: ( explicit_shape_spec_list | deferred_shape_spec_list )
			int alt85=2;
			int LA85_0 = input.LA(1);
			if ( (LA85_0==BIN_CONST||LA85_0==CHAR_CONST||(LA85_0 >= DEFINED_OP && LA85_0 <= DIGIT_STR)||LA85_0==FALSE||(LA85_0 >= HEX_CONST && LA85_0 <= IDENT)||LA85_0==LBRACKET||LA85_0==LPAREN||LA85_0==MINUS||LA85_0==M_REAL_CONST||LA85_0==NOT||LA85_0==OCT_CONST||LA85_0==PLUS||LA85_0==TRUE) ) {
				alt85=1;
			}
			else if ( (LA85_0==COLON) ) {
				alt85=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 85, 0, input);
				throw nvae;
			}

			switch (alt85) {
				case 1 :
					// MFortranParser2018.g:1012:7: explicit_shape_spec_list
					{
					pushFollow(FOLLOW_explicit_shape_spec_list_in_component_array_spec4331);
					explicit_shape_spec_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.component_array_spec(true);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:1014:7: deferred_shape_spec_list
					{
					pushFollow(FOLLOW_deferred_shape_spec_list_in_component_array_spec4349);
					deferred_shape_spec_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.component_array_spec(false);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_array_spec"



	// $ANTLR start "proc_component_def_stmt"
	// MFortranParser2018.g:1021:1: proc_component_def_stmt : (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN COMMA proc_component_attr_spec_list COLON_COLON proc_decl_list end_of_stmt ;
	public final void proc_component_def_stmt() throws RecognitionException {
		Token PROCEDURE73=null;
		Token lbl =null;
		Token end_of_stmt74 =null;


		  boolean hasItf = false;

		try {
			// MFortranParser2018.g:1028:5: ( (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN COMMA proc_component_attr_spec_list COLON_COLON proc_decl_list end_of_stmt )
			// MFortranParser2018.g:1028:7: (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN COMMA proc_component_attr_spec_list COLON_COLON proc_decl_list end_of_stmt
			{
			// MFortranParser2018.g:1028:7: (lbl= label )?
			int alt86=2;
			int LA86_0 = input.LA(1);
			if ( (LA86_0==DIGIT_STR) ) {
				alt86=1;
			}
			switch (alt86) {
				case 1 :
					// MFortranParser2018.g:1028:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_proc_component_def_stmt4389);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PROCEDURE73=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_proc_component_def_stmt4401); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_proc_component_def_stmt4403); if (state.failed) return;
			// MFortranParser2018.g:1029:24: ( proc_interface )?
			int alt87=2;
			int LA87_0 = input.LA(1);
			if ( (LA87_0==CHARACTER||LA87_0==CLASS||LA87_0==COMPLEX||(LA87_0 >= DOUBLE && LA87_0 <= DOUBLEPRECISION)||LA87_0==IDENT||LA87_0==INTEGER||LA87_0==LOGICAL||LA87_0==REAL||LA87_0==TYPE) ) {
				alt87=1;
			}
			switch (alt87) {
				case 1 :
					// MFortranParser2018.g:1029:26: proc_interface
					{
					pushFollow(FOLLOW_proc_interface_in_proc_component_def_stmt4407);
					proc_interface();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasItf=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_proc_component_def_stmt4413); if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_proc_component_def_stmt4415); if (state.failed) return;
			pushFollow(FOLLOW_proc_component_attr_spec_list_in_proc_component_def_stmt4423);
			proc_component_attr_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,COLON_COLON,FOLLOW_COLON_COLON_in_proc_component_def_stmt4425); if (state.failed) return;
			pushFollow(FOLLOW_proc_decl_list_in_proc_component_def_stmt4427);
			proc_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_proc_component_def_stmt4429);
			end_of_stmt74=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.proc_component_def_stmt(lbl, PROCEDURE73, end_of_stmt74, hasItf);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_component_def_stmt"



	// $ANTLR start "proc_component_attr_spec"
	// MFortranParser2018.g:1037:1: proc_component_attr_spec : ( POINTER | PASS ( LPAREN id= IDENT RPAREN )? | NOPASS | access_spec );
	public final void proc_component_attr_spec() throws RecognitionException {
		Token id=null;
		Token POINTER75=null;
		Token PASS76=null;
		Token NOPASS77=null;

		try {
			// MFortranParser2018.g:1038:5: ( POINTER | PASS ( LPAREN id= IDENT RPAREN )? | NOPASS | access_spec )
			int alt89=4;
			switch ( input.LA(1) ) {
			case POINTER:
				{
				alt89=1;
				}
				break;
			case PASS:
				{
				alt89=2;
				}
				break;
			case NOPASS:
				{
				alt89=3;
				}
				break;
			case PRIVATE:
			case PUBLIC:
				{
				alt89=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 89, 0, input);
				throw nvae;
			}
			switch (alt89) {
				case 1 :
					// MFortranParser2018.g:1038:7: POINTER
					{
					POINTER75=(Token)match(input,POINTER,FOLLOW_POINTER_in_proc_component_attr_spec4458); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.proc_component_attr_spec(POINTER75, id, 
					            MFPUtils.ATTR_POINTER);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:1041:7: PASS ( LPAREN id= IDENT RPAREN )?
					{
					PASS76=(Token)match(input,PASS,FOLLOW_PASS_in_proc_component_attr_spec4476); if (state.failed) return;
					// MFortranParser2018.g:1041:12: ( LPAREN id= IDENT RPAREN )?
					int alt88=2;
					int LA88_0 = input.LA(1);
					if ( (LA88_0==LPAREN) ) {
						alt88=1;
					}
					switch (alt88) {
						case 1 :
							// MFortranParser2018.g:1041:14: LPAREN id= IDENT RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_proc_component_attr_spec4480); if (state.failed) return;
							id=(Token)match(input,IDENT,FOLLOW_IDENT_in_proc_component_attr_spec4484); if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_proc_component_attr_spec4486); if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) {MFPA.proc_component_attr_spec(PASS76, id, 
					            MFPUtils.ATTR_PASS);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:1044:7: NOPASS
					{
					NOPASS77=(Token)match(input,NOPASS,FOLLOW_NOPASS_in_proc_component_attr_spec4507); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.proc_component_attr_spec(NOPASS77, id, 
					            MFPUtils.ATTR_NOPASS);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:1047:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_proc_component_attr_spec4525);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.proc_component_attr_spec(null, id, 
					            MFPUtils.ATTR_ACCESS);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_component_attr_spec"



	// $ANTLR start "proc_component_attr_spec_list"
	// MFortranParser2018.g:1052:1: proc_component_attr_spec_list : proc_component_attr_spec ( COMMA proc_component_attr_spec )* ;
	public final void proc_component_attr_spec_list() throws RecognitionException {

		  int numCAS = 1;

		try {
			// MFortranParser2018.g:1059:5: ( proc_component_attr_spec ( COMMA proc_component_attr_spec )* )
			// MFortranParser2018.g:1059:7: proc_component_attr_spec ( COMMA proc_component_attr_spec )*
			{
			pushFollow(FOLLOW_proc_component_attr_spec_in_proc_component_attr_spec_list4560);
			proc_component_attr_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1060:7: ( COMMA proc_component_attr_spec )*
			loop90:
			while (true) {
				int alt90=2;
				int LA90_0 = input.LA(1);
				if ( (LA90_0==COMMA) ) {
					alt90=1;
				}

				switch (alt90) {
				case 1 :
					// MFortranParser2018.g:1060:9: COMMA proc_component_attr_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_proc_component_attr_spec_list4571); if (state.failed) return;
					pushFollow(FOLLOW_proc_component_attr_spec_in_proc_component_attr_spec_list4573);
					proc_component_attr_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCAS++;}
					}
					break;

				default :
					break loop90;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.proc_component_attr_spec_list(numCAS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_component_attr_spec_list"



	// $ANTLR start "component_initialization"
	// MFortranParser2018.g:1071:1: component_initialization : ( EQUALS expr | EQ_GT null_init );
	public final void component_initialization() throws RecognitionException {
		try {
			// MFortranParser2018.g:1075:5: ( EQUALS expr | EQ_GT null_init )
			int alt91=2;
			int LA91_0 = input.LA(1);
			if ( (LA91_0==EQUALS) ) {
				alt91=1;
			}
			else if ( (LA91_0==EQ_GT) ) {
				alt91=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 91, 0, input);
				throw nvae;
			}

			switch (alt91) {
				case 1 :
					// MFortranParser2018.g:1075:7: EQUALS expr
					{
					match(input,EQUALS,FOLLOW_EQUALS_in_component_initialization4602); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_component_initialization4604);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:1076:7: EQ_GT null_init
					{
					match(input,EQ_GT,FOLLOW_EQ_GT_in_component_initialization4612); if (state.failed) return;
					pushFollow(FOLLOW_null_init_in_component_initialization4614);
					null_init();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.component_initialization();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_initialization"



	// $ANTLR start "private_components_stmt"
	// MFortranParser2018.g:1082:1: private_components_stmt : (lbl= label )? PRIVATE end_of_stmt ;
	public final void private_components_stmt() throws RecognitionException {
		Token PRIVATE78=null;
		Token lbl =null;
		Token end_of_stmt79 =null;



		try {
			// MFortranParser2018.g:1088:5: ( (lbl= label )? PRIVATE end_of_stmt )
			// MFortranParser2018.g:1088:7: (lbl= label )? PRIVATE end_of_stmt
			{
			// MFortranParser2018.g:1088:7: (lbl= label )?
			int alt92=2;
			int LA92_0 = input.LA(1);
			if ( (LA92_0==DIGIT_STR) ) {
				alt92=1;
			}
			switch (alt92) {
				case 1 :
					// MFortranParser2018.g:1088:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_private_components_stmt4645);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PRIVATE78=(Token)match(input,PRIVATE,FOLLOW_PRIVATE_in_private_components_stmt4657); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_private_components_stmt4659);
			end_of_stmt79=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.private_components_stmt(lbl, PRIVATE78, end_of_stmt79);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "private_components_stmt"



	// $ANTLR start "type_bound_procedure_part"
	// MFortranParser2018.g:1096:1: type_bound_procedure_part : contains_stmt ( binding_private_stmt )? type_bound_proc_binding ( type_bound_proc_binding )* ;
	public final void type_bound_procedure_part() throws RecognitionException {

		  int numTBPB = 1; 
		  boolean hasBPS = false;

		try {
			// MFortranParser2018.g:1101:5: ( contains_stmt ( binding_private_stmt )? type_bound_proc_binding ( type_bound_proc_binding )* )
			// MFortranParser2018.g:1101:7: contains_stmt ( binding_private_stmt )? type_bound_proc_binding ( type_bound_proc_binding )*
			{
			pushFollow(FOLLOW_contains_stmt_in_type_bound_procedure_part4692);
			contains_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1101:21: ( binding_private_stmt )?
			int alt93=2;
			int LA93_0 = input.LA(1);
			if ( (LA93_0==DIGIT_STR) ) {
				int LA93_1 = input.LA(2);
				if ( (LA93_1==PRIVATE) ) {
					alt93=1;
				}
			}
			else if ( (LA93_0==PRIVATE) ) {
				alt93=1;
			}
			switch (alt93) {
				case 1 :
					// MFortranParser2018.g:1101:23: binding_private_stmt
					{
					pushFollow(FOLLOW_binding_private_stmt_in_type_bound_procedure_part4696);
					binding_private_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasBPS=true;}
					}
					break;

			}

			pushFollow(FOLLOW_type_bound_proc_binding_in_type_bound_procedure_part4709);
			type_bound_proc_binding();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1102:31: ( type_bound_proc_binding )*
			loop94:
			while (true) {
				int alt94=2;
				int LA94_0 = input.LA(1);
				if ( (LA94_0==DIGIT_STR) ) {
					int LA94_1 = input.LA(2);
					if ( (LA94_1==FINAL||LA94_1==GENERIC||LA94_1==PROCEDURE) ) {
						alt94=1;
					}

				}
				else if ( (LA94_0==FINAL||LA94_0==GENERIC||LA94_0==PROCEDURE) ) {
					alt94=1;
				}

				switch (alt94) {
				case 1 :
					// MFortranParser2018.g:1102:33: type_bound_proc_binding
					{
					pushFollow(FOLLOW_type_bound_proc_binding_in_type_bound_procedure_part4713);
					type_bound_proc_binding();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTBPB++;}
					}
					break;

				default :
					break loop94;
				}
			}

			if ( state.backtracking==0 ) { MFPA.type_bound_procedure_part(numTBPB, hasBPS); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_procedure_part"



	// $ANTLR start "binding_private_stmt"
	// MFortranParser2018.g:1109:1: binding_private_stmt : (lbl= label )? PRIVATE end_of_stmt ;
	public final void binding_private_stmt() throws RecognitionException {
		Token PRIVATE80=null;
		Token lbl =null;
		Token end_of_stmt81 =null;



		try {
			// MFortranParser2018.g:1115:5: ( (lbl= label )? PRIVATE end_of_stmt )
			// MFortranParser2018.g:1115:7: (lbl= label )? PRIVATE end_of_stmt
			{
			// MFortranParser2018.g:1115:7: (lbl= label )?
			int alt95=2;
			int LA95_0 = input.LA(1);
			if ( (LA95_0==DIGIT_STR) ) {
				alt95=1;
			}
			switch (alt95) {
				case 1 :
					// MFortranParser2018.g:1115:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_binding_private_stmt4761);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PRIVATE80=(Token)match(input,PRIVATE,FOLLOW_PRIVATE_in_binding_private_stmt4773); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_binding_private_stmt4775);
			end_of_stmt81=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.binding_private_stmt(lbl, PRIVATE80, end_of_stmt81);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "binding_private_stmt"



	// $ANTLR start "type_bound_proc_binding"
	// MFortranParser2018.g:1123:1: type_bound_proc_binding : ( (lbl= label )? type_bound_procedure_stmt end_of_stmt | (lbl= label )? type_bound_generic_stmt end_of_stmt | (lbl= label )? final_procedure_stmt end_of_stmt );
	public final void type_bound_proc_binding() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt82 =null;
		Token end_of_stmt83 =null;
		Token end_of_stmt84 =null;



		try {
			// MFortranParser2018.g:1129:5: ( (lbl= label )? type_bound_procedure_stmt end_of_stmt | (lbl= label )? type_bound_generic_stmt end_of_stmt | (lbl= label )? final_procedure_stmt end_of_stmt )
			int alt99=3;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case PROCEDURE:
					{
					alt99=1;
					}
					break;
				case GENERIC:
					{
					alt99=2;
					}
					break;
				case FINAL:
					{
					alt99=3;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 99, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case PROCEDURE:
				{
				alt99=1;
				}
				break;
			case GENERIC:
				{
				alt99=2;
				}
				break;
			case FINAL:
				{
				alt99=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 99, 0, input);
				throw nvae;
			}
			switch (alt99) {
				case 1 :
					// MFortranParser2018.g:1129:7: (lbl= label )? type_bound_procedure_stmt end_of_stmt
					{
					// MFortranParser2018.g:1129:7: (lbl= label )?
					int alt96=2;
					int LA96_0 = input.LA(1);
					if ( (LA96_0==DIGIT_STR) ) {
						alt96=1;
					}
					switch (alt96) {
						case 1 :
							// MFortranParser2018.g:1129:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_bound_proc_binding4815);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_type_bound_procedure_stmt_in_type_bound_proc_binding4820);
					type_bound_procedure_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_type_bound_proc_binding4822);
					end_of_stmt82=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_bound_proc_binding(lbl, 
					           MFPUtils.TBPB.PROCEDURE, end_of_stmt82);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:1132:7: (lbl= label )? type_bound_generic_stmt end_of_stmt
					{
					// MFortranParser2018.g:1132:7: (lbl= label )?
					int alt97=2;
					int LA97_0 = input.LA(1);
					if ( (LA97_0==DIGIT_STR) ) {
						alt97=1;
					}
					switch (alt97) {
						case 1 :
							// MFortranParser2018.g:1132:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_bound_proc_binding4843);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_type_bound_generic_stmt_in_type_bound_proc_binding4848);
					type_bound_generic_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_type_bound_proc_binding4850);
					end_of_stmt83=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_bound_proc_binding(lbl,
					           MFPUtils.TBPB.GENERIC, end_of_stmt83);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:1135:7: (lbl= label )? final_procedure_stmt end_of_stmt
					{
					// MFortranParser2018.g:1135:7: (lbl= label )?
					int alt98=2;
					int LA98_0 = input.LA(1);
					if ( (LA98_0==DIGIT_STR) ) {
						alt98=1;
					}
					switch (alt98) {
						case 1 :
							// MFortranParser2018.g:1135:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_bound_proc_binding4871);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_final_procedure_stmt_in_type_bound_proc_binding4876);
					final_procedure_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_type_bound_proc_binding4878);
					end_of_stmt84=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.type_bound_proc_binding(lbl,
					           MFPUtils.TBPB.FINAL, end_of_stmt84);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_proc_binding"



	// $ANTLR start "type_bound_procedure_stmt"
	// MFortranParser2018.g:1145:1: type_bound_procedure_stmt : proc= PROCEDURE ( LPAREN tIN= IDENT RPAREN )? ( ( COMMA binding_attr_list )? COLON_COLON )? type_bound_proc_decl_list ;
	public final void type_bound_procedure_stmt() throws RecognitionException {
		Token proc=null;
		Token tIN=null;


		  boolean hasBAL = false;
		  boolean hasCC = false;
		  boolean hasPN = false;

		try {
			// MFortranParser2018.g:1155:5: (proc= PROCEDURE ( LPAREN tIN= IDENT RPAREN )? ( ( COMMA binding_attr_list )? COLON_COLON )? type_bound_proc_decl_list )
			// MFortranParser2018.g:1155:7: proc= PROCEDURE ( LPAREN tIN= IDENT RPAREN )? ( ( COMMA binding_attr_list )? COLON_COLON )? type_bound_proc_decl_list
			{
			proc=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_type_bound_procedure_stmt4917); if (state.failed) return;
			// MFortranParser2018.g:1156:7: ( LPAREN tIN= IDENT RPAREN )?
			int alt100=2;
			int LA100_0 = input.LA(1);
			if ( (LA100_0==LPAREN) ) {
				alt100=1;
			}
			switch (alt100) {
				case 1 :
					// MFortranParser2018.g:1156:9: LPAREN tIN= IDENT RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_type_bound_procedure_stmt4927); if (state.failed) return;
					tIN=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_bound_procedure_stmt4931); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_type_bound_procedure_stmt4933); if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:1157:7: ( ( COMMA binding_attr_list )? COLON_COLON )?
			int alt102=2;
			int LA102_0 = input.LA(1);
			if ( ((LA102_0 >= COLON_COLON && LA102_0 <= COMMA)) ) {
				alt102=1;
			}
			switch (alt102) {
				case 1 :
					// MFortranParser2018.g:1157:9: ( COMMA binding_attr_list )? COLON_COLON
					{
					// MFortranParser2018.g:1157:9: ( COMMA binding_attr_list )?
					int alt101=2;
					int LA101_0 = input.LA(1);
					if ( (LA101_0==COMMA) ) {
						alt101=1;
					}
					switch (alt101) {
						case 1 :
							// MFortranParser2018.g:1157:10: COMMA binding_attr_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_type_bound_procedure_stmt4946); if (state.failed) return;
							pushFollow(FOLLOW_binding_attr_list_in_type_bound_procedure_stmt4948);
							binding_attr_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasBAL=true;}
							}
							break;

					}

					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_type_bound_procedure_stmt4963); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCC=true;}
					}
					break;

			}

			pushFollow(FOLLOW_type_bound_proc_decl_list_in_type_bound_procedure_stmt4982);
			type_bound_proc_decl_list();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.type_bound_procedure_stmt(
			      proc, tIN, hasBAL, hasCC);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_procedure_stmt"



	// $ANTLR start "type_bound_proc_decl"
	// MFortranParser2018.g:1170:1: type_bound_proc_decl : tBN= IDENT ( EQ_GT tPN= IDENT )? ;
	public final void type_bound_proc_decl() throws RecognitionException {
		Token tBN=null;
		Token tPN=null;

		try {
			// MFortranParser2018.g:1174:5: (tBN= IDENT ( EQ_GT tPN= IDENT )? )
			// MFortranParser2018.g:1174:7: tBN= IDENT ( EQ_GT tPN= IDENT )?
			{
			tBN=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_bound_proc_decl5012); if (state.failed) return;
			// MFortranParser2018.g:1175:7: ( EQ_GT tPN= IDENT )?
			int alt103=2;
			int LA103_0 = input.LA(1);
			if ( (LA103_0==EQ_GT) ) {
				alt103=1;
			}
			switch (alt103) {
				case 1 :
					// MFortranParser2018.g:1175:9: EQ_GT tPN= IDENT
					{
					match(input,EQ_GT,FOLLOW_EQ_GT_in_type_bound_proc_decl5022); if (state.failed) return;
					tPN=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_bound_proc_decl5026); if (state.failed) return;
					}
					break;

			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_bound_proc_decl(tBN, tPN);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_proc_decl"



	// $ANTLR start "type_bound_proc_decl_list"
	// MFortranParser2018.g:1178:1: type_bound_proc_decl_list : type_bound_proc_decl ( COMMA type_bound_proc_decl )* ;
	public final void type_bound_proc_decl_list() throws RecognitionException {

		  int numPD = 1;

		try {
			// MFortranParser2018.g:1185:5: ( type_bound_proc_decl ( COMMA type_bound_proc_decl )* )
			// MFortranParser2018.g:1185:7: type_bound_proc_decl ( COMMA type_bound_proc_decl )*
			{
			pushFollow(FOLLOW_type_bound_proc_decl_in_type_bound_proc_decl_list5057);
			type_bound_proc_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1186:7: ( COMMA type_bound_proc_decl )*
			loop104:
			while (true) {
				int alt104=2;
				int LA104_0 = input.LA(1);
				if ( (LA104_0==COMMA) ) {
					alt104=1;
				}

				switch (alt104) {
				case 1 :
					// MFortranParser2018.g:1186:8: COMMA type_bound_proc_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_type_bound_proc_decl_list5067); if (state.failed) return;
					pushFollow(FOLLOW_type_bound_proc_decl_in_type_bound_proc_decl_list5069);
					type_bound_proc_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPD++;}
					}
					break;

				default :
					break loop104;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_bound_proc_decl_list(numPD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_proc_decl_list"



	// $ANTLR start "type_bound_generic_stmt"
	// MFortranParser2018.g:1193:1: type_bound_generic_stmt : GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list ;
	public final void type_bound_generic_stmt() throws RecognitionException {
		Token GENERIC85=null;


		  boolean hasAS = false;

		try {
			// MFortranParser2018.g:1197:5: ( GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list )
			// MFortranParser2018.g:1197:7: GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list
			{
			GENERIC85=(Token)match(input,GENERIC,FOLLOW_GENERIC_in_type_bound_generic_stmt5096); if (state.failed) return;
			// MFortranParser2018.g:1197:15: ( COMMA access_spec )?
			int alt105=2;
			int LA105_0 = input.LA(1);
			if ( (LA105_0==COMMA) ) {
				alt105=1;
			}
			switch (alt105) {
				case 1 :
					// MFortranParser2018.g:1197:17: COMMA access_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_type_bound_generic_stmt5100); if (state.failed) return;
					pushFollow(FOLLOW_access_spec_in_type_bound_generic_stmt5102);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					}
					break;

			}

			match(input,COLON_COLON,FOLLOW_COLON_COLON_in_type_bound_generic_stmt5114); if (state.failed) return;
			pushFollow(FOLLOW_generic_spec_in_type_bound_generic_stmt5116);
			generic_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,EQ_GT,FOLLOW_EQ_GT_in_type_bound_generic_stmt5118); if (state.failed) return;
			pushFollow(FOLLOW_generic_name_list_in_type_bound_generic_stmt5120);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.type_bound_generic_stmt(GENERIC85, hasAS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_bound_generic_stmt"



	// $ANTLR start "binding_attr"
	// MFortranParser2018.g:1206:1: binding_attr : ( PASS ( LPAREN IDENT RPAREN )? | NOPASS | NON_OVERRIDABLE | DEFERRED | access_spec );
	public final void binding_attr() throws RecognitionException {
		Token IDENT86=null;
		Token PASS87=null;
		Token NOPASS88=null;
		Token NON_OVERRIDABLE89=null;
		Token DEFERRED90=null;


		  Token id = null;

		try {
			// MFortranParser2018.g:1210:5: ( PASS ( LPAREN IDENT RPAREN )? | NOPASS | NON_OVERRIDABLE | DEFERRED | access_spec )
			int alt107=5;
			switch ( input.LA(1) ) {
			case PASS:
				{
				alt107=1;
				}
				break;
			case NOPASS:
				{
				alt107=2;
				}
				break;
			case NON_OVERRIDABLE:
				{
				alt107=3;
				}
				break;
			case DEFERRED:
				{
				alt107=4;
				}
				break;
			case PRIVATE:
			case PUBLIC:
				{
				alt107=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 107, 0, input);
				throw nvae;
			}
			switch (alt107) {
				case 1 :
					// MFortranParser2018.g:1210:7: PASS ( LPAREN IDENT RPAREN )?
					{
					PASS87=(Token)match(input,PASS,FOLLOW_PASS_in_binding_attr5153); if (state.failed) return;
					// MFortranParser2018.g:1210:12: ( LPAREN IDENT RPAREN )?
					int alt106=2;
					int LA106_0 = input.LA(1);
					if ( (LA106_0==LPAREN) ) {
						alt106=1;
					}
					switch (alt106) {
						case 1 :
							// MFortranParser2018.g:1210:14: LPAREN IDENT RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_binding_attr5157); if (state.failed) return;
							IDENT86=(Token)match(input,IDENT,FOLLOW_IDENT_in_binding_attr5159); if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_binding_attr5161); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT86;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.binding_attr(PASS87, 
					            MFPUtils.ATTR_PASS, id); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1213:7: NOPASS
					{
					NOPASS88=(Token)match(input,NOPASS,FOLLOW_NOPASS_in_binding_attr5183); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.binding_attr(NOPASS88, 
					            MFPUtils.ATTR_NOPASS, id); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:1216:7: NON_OVERRIDABLE
					{
					NON_OVERRIDABLE89=(Token)match(input,NON_OVERRIDABLE,FOLLOW_NON_OVERRIDABLE_in_binding_attr5201); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.binding_attr(NON_OVERRIDABLE89, 
					            MFPUtils.ATTR_NON_OVERRIDABLE, id); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:1219:7: DEFERRED
					{
					DEFERRED90=(Token)match(input,DEFERRED,FOLLOW_DEFERRED_in_binding_attr5219); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.binding_attr(DEFERRED90, 
					            MFPUtils.ATTR_DEFERRED, id); }
					}
					break;
				case 5 :
					// MFortranParser2018.g:1222:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_binding_attr5237);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.binding_attr(null, 
					            MFPUtils.ATTR_ACCESS, id); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "binding_attr"



	// $ANTLR start "binding_attr_list"
	// MFortranParser2018.g:1227:1: binding_attr_list : binding_attr ( COMMA binding_attr )* ;
	public final void binding_attr_list() throws RecognitionException {

		  int numBA = 1;

		try {
			// MFortranParser2018.g:1234:5: ( binding_attr ( COMMA binding_attr )* )
			// MFortranParser2018.g:1234:7: binding_attr ( COMMA binding_attr )*
			{
			pushFollow(FOLLOW_binding_attr_in_binding_attr_list5272);
			binding_attr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1235:7: ( COMMA binding_attr )*
			loop108:
			while (true) {
				int alt108=2;
				int LA108_0 = input.LA(1);
				if ( (LA108_0==COMMA) ) {
					alt108=1;
				}

				switch (alt108) {
				case 1 :
					// MFortranParser2018.g:1235:9: COMMA binding_attr
					{
					match(input,COMMA,FOLLOW_COMMA_in_binding_attr_list5283); if (state.failed) return;
					pushFollow(FOLLOW_binding_attr_in_binding_attr_list5285);
					binding_attr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numBA++;}
					}
					break;

				default :
					break loop108;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.binding_attr_list(numBA);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "binding_attr_list"



	// $ANTLR start "final_procedure_stmt"
	// MFortranParser2018.g:1242:1: final_procedure_stmt : FINAL ( COLON_COLON )? generic_name_list ;
	public final void final_procedure_stmt() throws RecognitionException {
		Token FINAL91=null;

		try {
			// MFortranParser2018.g:1243:5: ( FINAL ( COLON_COLON )? generic_name_list )
			// MFortranParser2018.g:1243:7: FINAL ( COLON_COLON )? generic_name_list
			{
			FINAL91=(Token)match(input,FINAL,FOLLOW_FINAL_in_final_procedure_stmt5309); if (state.failed) return;
			// MFortranParser2018.g:1243:13: ( COLON_COLON )?
			int alt109=2;
			int LA109_0 = input.LA(1);
			if ( (LA109_0==COLON_COLON) ) {
				alt109=1;
			}
			switch (alt109) {
				case 1 :
					// MFortranParser2018.g:1243:15: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_final_procedure_stmt5313); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_final_procedure_stmt5318);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.final_procedure_stmt(FINAL91); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "final_procedure_stmt"



	// $ANTLR start "derived_type_spec"
	// MFortranParser2018.g:1250:1: derived_type_spec : IDENT ( LPAREN type_param_spec_list RPAREN )? ;
	public final void derived_type_spec() throws RecognitionException {
		Token IDENT92=null;


		  boolean hasList = false;

		try {
			// MFortranParser2018.g:1254:5: ( IDENT ( LPAREN type_param_spec_list RPAREN )? )
			// MFortranParser2018.g:1254:7: IDENT ( LPAREN type_param_spec_list RPAREN )?
			{
			IDENT92=(Token)match(input,IDENT,FOLLOW_IDENT_in_derived_type_spec5352); if (state.failed) return;
			// MFortranParser2018.g:1254:13: ( LPAREN type_param_spec_list RPAREN )?
			int alt110=2;
			int LA110_0 = input.LA(1);
			if ( (LA110_0==LPAREN) ) {
				alt110=1;
			}
			switch (alt110) {
				case 1 :
					// MFortranParser2018.g:1254:15: LPAREN type_param_spec_list RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_derived_type_spec5356); if (state.failed) return;
					pushFollow(FOLLOW_type_param_spec_list_in_derived_type_spec5358);
					type_param_spec_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasList=true;}
					match(input,RPAREN,FOLLOW_RPAREN_in_derived_type_spec5362); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.derived_type_spec(IDENT92, hasList); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "derived_type_spec"



	// $ANTLR start "type_param_spec"
	// MFortranParser2018.g:1261:1: type_param_spec : ( keyword EQUALS )? type_param_value ;
	public final void type_param_spec() throws RecognitionException {
		Token keyword93 =null;


		  Token keyWord=null;

		try {
			// MFortranParser2018.g:1265:5: ( ( keyword EQUALS )? type_param_value )
			// MFortranParser2018.g:1265:7: ( keyword EQUALS )? type_param_value
			{
			// MFortranParser2018.g:1265:7: ( keyword EQUALS )?
			int alt111=2;
			int LA111_0 = input.LA(1);
			if ( (LA111_0==IDENT) ) {
				int LA111_1 = input.LA(2);
				if ( (LA111_1==EQUALS) ) {
					alt111=1;
				}
			}
			switch (alt111) {
				case 1 :
					// MFortranParser2018.g:1265:9: keyword EQUALS
					{
					pushFollow(FOLLOW_keyword_in_type_param_spec5400);
					keyword93=keyword();
					state._fsp--;
					if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_type_param_spec5402); if (state.failed) return;
					if ( state.backtracking==0 ) {keyWord=keyword93;}
					}
					break;

			}

			pushFollow(FOLLOW_type_param_value_in_type_param_spec5408);
			type_param_value();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.type_param_spec(keyWord);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_spec"



	// $ANTLR start "type_param_spec_list"
	// MFortranParser2018.g:1269:1: type_param_spec_list : type_param_spec ( COMMA type_param_spec )* ;
	public final void type_param_spec_list() throws RecognitionException {

		  int numTPS = 1;

		try {
			// MFortranParser2018.g:1276:5: ( type_param_spec ( COMMA type_param_spec )* )
			// MFortranParser2018.g:1276:7: type_param_spec ( COMMA type_param_spec )*
			{
			pushFollow(FOLLOW_type_param_spec_in_type_param_spec_list5443);
			type_param_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1277:7: ( COMMA type_param_spec )*
			loop112:
			while (true) {
				int alt112=2;
				int LA112_0 = input.LA(1);
				if ( (LA112_0==COMMA) ) {
					alt112=1;
				}

				switch (alt112) {
				case 1 :
					// MFortranParser2018.g:1277:9: COMMA type_param_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_type_param_spec_list5454); if (state.failed) return;
					pushFollow(FOLLOW_type_param_spec_in_type_param_spec_list5456);
					type_param_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTPS++;}
					}
					break;

				default :
					break loop112;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.type_param_spec_list(numTPS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_param_spec_list"



	// $ANTLR start "structure_constructor"
	// MFortranParser2018.g:1290:1: structure_constructor : IDENT LPAREN type_param_spec_list RPAREN ( LPAREN ( component_spec_list )? RPAREN )? ;
	public final void structure_constructor() throws RecognitionException {
		Token IDENT94=null;

		try {
			// MFortranParser2018.g:1291:5: ( IDENT LPAREN type_param_spec_list RPAREN ( LPAREN ( component_spec_list )? RPAREN )? )
			// MFortranParser2018.g:1291:7: IDENT LPAREN type_param_spec_list RPAREN ( LPAREN ( component_spec_list )? RPAREN )?
			{
			IDENT94=(Token)match(input,IDENT,FOLLOW_IDENT_in_structure_constructor5479); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_structure_constructor5481); if (state.failed) return;
			pushFollow(FOLLOW_type_param_spec_list_in_structure_constructor5483);
			type_param_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_structure_constructor5485); if (state.failed) return;
			// MFortranParser2018.g:1292:7: ( LPAREN ( component_spec_list )? RPAREN )?
			int alt114=2;
			int LA114_0 = input.LA(1);
			if ( (LA114_0==LPAREN) ) {
				alt114=1;
			}
			switch (alt114) {
				case 1 :
					// MFortranParser2018.g:1292:8: LPAREN ( component_spec_list )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_structure_constructor5494); if (state.failed) return;
					// MFortranParser2018.g:1292:15: ( component_spec_list )?
					int alt113=2;
					int LA113_0 = input.LA(1);
					if ( (LA113_0==BIN_CONST||LA113_0==CHAR_CONST||(LA113_0 >= DEFINED_OP && LA113_0 <= DIGIT_STR)||LA113_0==FALSE||(LA113_0 >= HEX_CONST && LA113_0 <= IDENT)||LA113_0==LBRACKET||LA113_0==LPAREN||LA113_0==MINUS||LA113_0==M_REAL_CONST||LA113_0==NOT||LA113_0==OCT_CONST||LA113_0==PLUS||LA113_0==TRUE) ) {
						alt113=1;
					}
					switch (alt113) {
						case 1 :
							// MFortranParser2018.g:1292:17: component_spec_list
							{
							pushFollow(FOLLOW_component_spec_list_in_structure_constructor5498);
							component_spec_list();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_structure_constructor5503); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.structure_constructor(IDENT94); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "structure_constructor"



	// $ANTLR start "component_spec"
	// MFortranParser2018.g:1299:1: component_spec : ( keyword EQUALS )? component_data_source ;
	public final void component_spec() throws RecognitionException {
		Token keyword95 =null;


		  Token keyWord = null;

		try {
			// MFortranParser2018.g:1303:5: ( ( keyword EQUALS )? component_data_source )
			// MFortranParser2018.g:1303:7: ( keyword EQUALS )? component_data_source
			{
			// MFortranParser2018.g:1303:7: ( keyword EQUALS )?
			int alt115=2;
			int LA115_0 = input.LA(1);
			if ( (LA115_0==IDENT) ) {
				int LA115_1 = input.LA(2);
				if ( (LA115_1==EQUALS) ) {
					alt115=1;
				}
			}
			switch (alt115) {
				case 1 :
					// MFortranParser2018.g:1303:9: keyword EQUALS
					{
					pushFollow(FOLLOW_keyword_in_component_spec5540);
					keyword95=keyword();
					state._fsp--;
					if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_component_spec5542); if (state.failed) return;
					if ( state.backtracking==0 ) { keyWord=keyword95; }
					}
					break;

			}

			pushFollow(FOLLOW_component_data_source_in_component_spec5548);
			component_data_source();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.component_spec(keyWord); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_spec"



	// $ANTLR start "component_spec_list"
	// MFortranParser2018.g:1307:1: component_spec_list : component_spec ( COMMA component_spec )* ;
	public final void component_spec_list() throws RecognitionException {

		  int numCS = 1;

		try {
			// MFortranParser2018.g:1314:5: ( component_spec ( COMMA component_spec )* )
			// MFortranParser2018.g:1314:7: component_spec ( COMMA component_spec )*
			{
			pushFollow(FOLLOW_component_spec_in_component_spec_list5583);
			component_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1315:7: ( COMMA component_spec )*
			loop116:
			while (true) {
				int alt116=2;
				int LA116_0 = input.LA(1);
				if ( (LA116_0==COMMA) ) {
					alt116=1;
				}

				switch (alt116) {
				case 1 :
					// MFortranParser2018.g:1315:9: COMMA component_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_component_spec_list5594); if (state.failed) return;
					pushFollow(FOLLOW_component_spec_in_component_spec_list5596);
					component_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCS++;}
					}
					break;

				default :
					break loop116;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.component_spec_list(numCS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_spec_list"



	// $ANTLR start "component_data_source"
	// MFortranParser2018.g:1323:1: component_data_source : expr ;
	public final void component_data_source() throws RecognitionException {
		try {
			// MFortranParser2018.g:1324:5: ( expr )
			// MFortranParser2018.g:1324:7: expr
			{
			pushFollow(FOLLOW_expr_in_component_data_source5619);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.component_data_source(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "component_data_source"



	// $ANTLR start "enum_def"
	// MFortranParser2018.g:1330:1: enum_def : enum_def_stmt enumerator_def_stmt ( enumerator_def_stmt )* end_enum_stmt ;
	public final void enum_def() throws RecognitionException {

		 int numEDS = 1;

		try {
			// MFortranParser2018.g:1337:5: ( enum_def_stmt enumerator_def_stmt ( enumerator_def_stmt )* end_enum_stmt )
			// MFortranParser2018.g:1337:7: enum_def_stmt enumerator_def_stmt ( enumerator_def_stmt )* end_enum_stmt
			{
			pushFollow(FOLLOW_enum_def_stmt_in_enum_def5648);
			enum_def_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_enumerator_def_stmt_in_enum_def5657);
			enumerator_def_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1339:7: ( enumerator_def_stmt )*
			loop117:
			while (true) {
				int alt117=2;
				int LA117_0 = input.LA(1);
				if ( (LA117_0==DIGIT_STR) ) {
					int LA117_1 = input.LA(2);
					if ( (LA117_1==ENUMERATOR) ) {
						alt117=1;
					}

				}
				else if ( (LA117_0==ENUMERATOR) ) {
					alt117=1;
				}

				switch (alt117) {
				case 1 :
					// MFortranParser2018.g:1339:9: enumerator_def_stmt
					{
					pushFollow(FOLLOW_enumerator_def_stmt_in_enum_def5667);
					enumerator_def_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numEDS++;}
					}
					break;

				default :
					break loop117;
				}
			}

			pushFollow(FOLLOW_end_enum_stmt_in_enum_def5680);
			end_enum_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.enum_def(numEDS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "enum_def"



	// $ANTLR start "enum_def_stmt"
	// MFortranParser2018.g:1346:1: enum_def_stmt : (lbl= label )? ENUM COMMA BIND LPAREN IDENT RPAREN end_of_stmt ;
	public final void enum_def_stmt() throws RecognitionException {
		Token ENUM96=null;
		Token BIND97=null;
		Token IDENT98=null;
		Token lbl =null;
		Token end_of_stmt99 =null;



		try {
			// MFortranParser2018.g:1352:5: ( (lbl= label )? ENUM COMMA BIND LPAREN IDENT RPAREN end_of_stmt )
			// MFortranParser2018.g:1352:7: (lbl= label )? ENUM COMMA BIND LPAREN IDENT RPAREN end_of_stmt
			{
			// MFortranParser2018.g:1352:7: (lbl= label )?
			int alt118=2;
			int LA118_0 = input.LA(1);
			if ( (LA118_0==DIGIT_STR) ) {
				alt118=1;
			}
			switch (alt118) {
				case 1 :
					// MFortranParser2018.g:1352:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_enum_def_stmt5711);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ENUM96=(Token)match(input,ENUM,FOLLOW_ENUM_in_enum_def_stmt5730); if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_enum_def_stmt5732); if (state.failed) return;
			BIND97=(Token)match(input,BIND,FOLLOW_BIND_in_enum_def_stmt5734); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_enum_def_stmt5736); if (state.failed) return;
			IDENT98=(Token)match(input,IDENT,FOLLOW_IDENT_in_enum_def_stmt5738); if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_enum_def_stmt5740); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_enum_def_stmt5742);
			end_of_stmt99=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.enum_def_stmt(
			            lbl, ENUM96, BIND97, IDENT98, end_of_stmt99);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "enum_def_stmt"



	// $ANTLR start "enumerator_def_stmt"
	// MFortranParser2018.g:1362:1: enumerator_def_stmt : (lbl= label )? ENUMERATOR ( COLON_COLON )? enumerator_list end_of_stmt ;
	public final void enumerator_def_stmt() throws RecognitionException {
		Token ENUMERATOR100=null;
		Token lbl =null;
		Token end_of_stmt101 =null;



		try {
			// MFortranParser2018.g:1368:5: ( (lbl= label )? ENUMERATOR ( COLON_COLON )? enumerator_list end_of_stmt )
			// MFortranParser2018.g:1368:7: (lbl= label )? ENUMERATOR ( COLON_COLON )? enumerator_list end_of_stmt
			{
			// MFortranParser2018.g:1368:7: (lbl= label )?
			int alt119=2;
			int LA119_0 = input.LA(1);
			if ( (LA119_0==DIGIT_STR) ) {
				alt119=1;
			}
			switch (alt119) {
				case 1 :
					// MFortranParser2018.g:1368:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_enumerator_def_stmt5783);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ENUMERATOR100=(Token)match(input,ENUMERATOR,FOLLOW_ENUMERATOR_in_enumerator_def_stmt5795); if (state.failed) return;
			// MFortranParser2018.g:1369:18: ( COLON_COLON )?
			int alt120=2;
			int LA120_0 = input.LA(1);
			if ( (LA120_0==COLON_COLON) ) {
				alt120=1;
			}
			switch (alt120) {
				case 1 :
					// MFortranParser2018.g:1369:20: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_enumerator_def_stmt5799); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_enumerator_list_in_enumerator_def_stmt5804);
			enumerator_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_enumerator_def_stmt5806);
			end_of_stmt101=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.enumerator_def_stmt(
			            lbl, ENUMERATOR100, end_of_stmt101); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "enumerator_def_stmt"



	// $ANTLR start "enumerator"
	// MFortranParser2018.g:1379:1: enumerator : IDENT ( EQUALS expr )? ;
	public final void enumerator() throws RecognitionException {
		Token IDENT102=null;


		  boolean hasExpr = false;

		try {
			// MFortranParser2018.g:1383:5: ( IDENT ( EQUALS expr )? )
			// MFortranParser2018.g:1383:7: IDENT ( EQUALS expr )?
			{
			IDENT102=(Token)match(input,IDENT,FOLLOW_IDENT_in_enumerator5839); if (state.failed) return;
			// MFortranParser2018.g:1383:13: ( EQUALS expr )?
			int alt121=2;
			int LA121_0 = input.LA(1);
			if ( (LA121_0==EQUALS) ) {
				alt121=1;
			}
			switch (alt121) {
				case 1 :
					// MFortranParser2018.g:1383:15: EQUALS expr
					{
					match(input,EQUALS,FOLLOW_EQUALS_in_enumerator5843); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_enumerator5845);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasExpr = true; }
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.enumerator(IDENT102, hasExpr); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "enumerator"



	// $ANTLR start "enumerator_list"
	// MFortranParser2018.g:1387:1: enumerator_list : enumerator ( COMMA enumerator )* ;
	public final void enumerator_list() throws RecognitionException {

		  int numE = 1;

		try {
			// MFortranParser2018.g:1394:5: ( enumerator ( COMMA enumerator )* )
			// MFortranParser2018.g:1394:7: enumerator ( COMMA enumerator )*
			{
			pushFollow(FOLLOW_enumerator_in_enumerator_list5883);
			enumerator();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1395:7: ( COMMA enumerator )*
			loop122:
			while (true) {
				int alt122=2;
				int LA122_0 = input.LA(1);
				if ( (LA122_0==COMMA) ) {
					alt122=1;
				}

				switch (alt122) {
				case 1 :
					// MFortranParser2018.g:1395:9: COMMA enumerator
					{
					match(input,COMMA,FOLLOW_COMMA_in_enumerator_list5893); if (state.failed) return;
					pushFollow(FOLLOW_enumerator_in_enumerator_list5895);
					enumerator();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numE++;}
					}
					break;

				default :
					break loop122;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.enumerator_list(numE);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "enumerator_list"



	// $ANTLR start "end_enum_stmt"
	// MFortranParser2018.g:1401:1: end_enum_stmt : (lbl= label )? END ENUM end_of_stmt ;
	public final void end_enum_stmt() throws RecognitionException {
		Token END103=null;
		Token ENUM104=null;
		Token lbl =null;
		Token end_of_stmt105 =null;



		try {
			// MFortranParser2018.g:1407:5: ( (lbl= label )? END ENUM end_of_stmt )
			// MFortranParser2018.g:1407:7: (lbl= label )? END ENUM end_of_stmt
			{
			// MFortranParser2018.g:1407:7: (lbl= label )?
			int alt123=2;
			int LA123_0 = input.LA(1);
			if ( (LA123_0==DIGIT_STR) ) {
				alt123=1;
			}
			switch (alt123) {
				case 1 :
					// MFortranParser2018.g:1407:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_enum_stmt5929);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END103=(Token)match(input,END,FOLLOW_END_in_end_enum_stmt5941); if (state.failed) return;
			ENUM104=(Token)match(input,ENUM,FOLLOW_ENUM_in_end_enum_stmt5943); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_end_enum_stmt5945);
			end_of_stmt105=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_enum_stmt(lbl, END103, ENUM104, end_of_stmt105); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_enum_stmt"



	// $ANTLR start "boz_literal_constant"
	// MFortranParser2018.g:1415:1: boz_literal_constant : ( BIN_CONST | OCT_CONST | HEX_CONST );
	public final void boz_literal_constant() throws RecognitionException {
		Token BIN_CONST106=null;
		Token OCT_CONST107=null;
		Token HEX_CONST108=null;

		try {
			// MFortranParser2018.g:1416:5: ( BIN_CONST | OCT_CONST | HEX_CONST )
			int alt124=3;
			switch ( input.LA(1) ) {
			case BIN_CONST:
				{
				alt124=1;
				}
				break;
			case OCT_CONST:
				{
				alt124=2;
				}
				break;
			case HEX_CONST:
				{
				alt124=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 124, 0, input);
				throw nvae;
			}
			switch (alt124) {
				case 1 :
					// MFortranParser2018.g:1416:7: BIN_CONST
					{
					BIN_CONST106=(Token)match(input,BIN_CONST,FOLLOW_BIN_CONST_in_boz_literal_constant5973); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.boz_literal_constant(BIN_CONST106); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1417:7: OCT_CONST
					{
					OCT_CONST107=(Token)match(input,OCT_CONST,FOLLOW_OCT_CONST_in_boz_literal_constant5983); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.boz_literal_constant(OCT_CONST107); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:1418:7: HEX_CONST
					{
					HEX_CONST108=(Token)match(input,HEX_CONST,FOLLOW_HEX_CONST_in_boz_literal_constant5994); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.boz_literal_constant(HEX_CONST108); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "boz_literal_constant"



	// $ANTLR start "array_constructor"
	// MFortranParser2018.g:1433:1: array_constructor : ( LPAREN SLASH ac_spec SLASH RPAREN | LBRACKET ac_spec RBRACKET );
	public final void array_constructor() throws RecognitionException {
		try {
			// MFortranParser2018.g:1437:5: ( LPAREN SLASH ac_spec SLASH RPAREN | LBRACKET ac_spec RBRACKET )
			int alt125=2;
			int LA125_0 = input.LA(1);
			if ( (LA125_0==LPAREN) ) {
				alt125=1;
			}
			else if ( (LA125_0==LBRACKET) ) {
				alt125=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 125, 0, input);
				throw nvae;
			}

			switch (alt125) {
				case 1 :
					// MFortranParser2018.g:1437:7: LPAREN SLASH ac_spec SLASH RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_array_constructor6025); if (state.failed) return;
					match(input,SLASH,FOLLOW_SLASH_in_array_constructor6027); if (state.failed) return;
					pushFollow(FOLLOW_ac_spec_in_array_constructor6029);
					ac_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,SLASH,FOLLOW_SLASH_in_array_constructor6031); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_array_constructor6033); if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:1438:7: LBRACKET ac_spec RBRACKET
					{
					match(input,LBRACKET,FOLLOW_LBRACKET_in_array_constructor6041); if (state.failed) return;
					pushFollow(FOLLOW_ac_spec_in_array_constructor6043);
					ac_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_array_constructor6045); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.array_constructor();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "array_constructor"



	// $ANTLR start "ac_spec"
	// MFortranParser2018.g:1444:1: ac_spec options {backtrack=true; } : ( type_spec COLON_COLON ( ac_value_list )? | ac_value_list );
	public final void ac_spec() throws RecognitionException {

		  boolean hsACVal = false;
		  boolean hasTypeSpec = false;

		try {
			// MFortranParser2018.g:1453:5: ( type_spec COLON_COLON ( ac_value_list )? | ac_value_list )
			int alt127=2;
			switch ( input.LA(1) ) {
			case CHARACTER:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case INTEGER:
			case LOGICAL:
			case REAL:
				{
				alt127=1;
				}
				break;
			case IDENT:
				{
				int LA127_9 = input.LA(2);
				if ( (synpred6_MFortranParser2018()) ) {
					alt127=1;
				}
				else if ( (true) ) {
					alt127=2;
				}

				}
				break;
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt127=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 127, 0, input);
				throw nvae;
			}
			switch (alt127) {
				case 1 :
					// MFortranParser2018.g:1453:7: type_spec COLON_COLON ( ac_value_list )?
					{
					pushFollow(FOLLOW_type_spec_in_ac_spec6080);
					type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_ac_spec6082); if (state.failed) return;
					// MFortranParser2018.g:1454:6: ( ac_value_list )?
					int alt126=2;
					int LA126_0 = input.LA(1);
					if ( (LA126_0==BIN_CONST||LA126_0==CHAR_CONST||(LA126_0 >= DEFINED_OP && LA126_0 <= DIGIT_STR)||LA126_0==FALSE||(LA126_0 >= HEX_CONST && LA126_0 <= IDENT)||LA126_0==LBRACKET||LA126_0==LPAREN||LA126_0==MINUS||LA126_0==M_REAL_CONST||LA126_0==NOT||LA126_0==OCT_CONST||LA126_0==PLUS||LA126_0==TRUE) ) {
						alt126=1;
					}
					switch (alt126) {
						case 1 :
							// MFortranParser2018.g:1454:7: ac_value_list
							{
							pushFollow(FOLLOW_ac_value_list_in_ac_spec6091);
							ac_value_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hsACVal = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) {hasTypeSpec = true;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:1456:7: ac_value_list
					{
					pushFollow(FOLLOW_ac_value_list_in_ac_spec6111);
					ac_value_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hsACVal = true;}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			    MFPA.ac_spec(hasTypeSpec, hsACVal);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ac_spec"



	// $ANTLR start "ac_value"
	// MFortranParser2018.g:1468:1: ac_value options {backtrack=true; } : ( expr | ac_implied_do );
	public final void ac_value() throws RecognitionException {
		try {
			// MFortranParser2018.g:1473:5: ( expr | ac_implied_do )
			int alt128=2;
			int LA128_0 = input.LA(1);
			if ( (LA128_0==BIN_CONST||LA128_0==CHAR_CONST||(LA128_0 >= DEFINED_OP && LA128_0 <= DIGIT_STR)||LA128_0==FALSE||(LA128_0 >= HEX_CONST && LA128_0 <= IDENT)||LA128_0==LBRACKET||LA128_0==MINUS||LA128_0==M_REAL_CONST||LA128_0==NOT||LA128_0==OCT_CONST||LA128_0==PLUS||LA128_0==TRUE) ) {
				alt128=1;
			}
			else if ( (LA128_0==LPAREN) ) {
				int LA128_9 = input.LA(2);
				if ( (synpred7_MFortranParser2018()) ) {
					alt128=1;
				}
				else if ( (true) ) {
					alt128=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 128, 0, input);
				throw nvae;
			}

			switch (alt128) {
				case 1 :
					// MFortranParser2018.g:1473:7: expr
					{
					pushFollow(FOLLOW_expr_in_ac_value6147);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:1474:7: ac_implied_do
					{
					pushFollow(FOLLOW_ac_implied_do_in_ac_value6155);
					ac_implied_do();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			    MFPA.ac_value();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ac_value"



	// $ANTLR start "ac_value_list"
	// MFortranParser2018.g:1477:1: ac_value_list : ac_value ( COMMA ac_value )* ;
	public final void ac_value_list() throws RecognitionException {

		  int numAV = 1;

		try {
			// MFortranParser2018.g:1484:5: ( ac_value ( COMMA ac_value )* )
			// MFortranParser2018.g:1484:7: ac_value ( COMMA ac_value )*
			{
			pushFollow(FOLLOW_ac_value_in_ac_value_list6180);
			ac_value();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1485:7: ( COMMA ac_value )*
			loop129:
			while (true) {
				int alt129=2;
				int LA129_0 = input.LA(1);
				if ( (LA129_0==COMMA) ) {
					int LA129_2 = input.LA(2);
					if ( (LA129_2==IDENT) ) {
						int LA129_3 = input.LA(3);
						if ( (LA129_3==EOF||LA129_3==AND||LA129_3==ASTERISK||LA129_3==CHAR_CONST||LA129_3==COMMA||LA129_3==DEFINED_OP||LA129_3==EQ||(LA129_3 >= EQV && LA129_3 <= EQ_EQ)||LA129_3==GE||(LA129_3 >= GREATERTHAN && LA129_3 <= GT)||(LA129_3 >= LBRACKET && LA129_3 <= LE)||(LA129_3 >= LESSTHAN && LA129_3 <= LESSTHAN_EQ)||(LA129_3 >= LPAREN && LA129_3 <= LT)||LA129_3==MINUS||(LA129_3 >= NE && LA129_3 <= NEQV)||LA129_3==OR||LA129_3==PERCENT||LA129_3==PLUS||LA129_3==POWER||LA129_3==RBRACKET||(LA129_3 >= SLASH && LA129_3 <= SLASH_SLASH)) ) {
							alt129=1;
						}

					}
					else if ( (LA129_2==BIN_CONST||LA129_2==CHAR_CONST||(LA129_2 >= DEFINED_OP && LA129_2 <= DIGIT_STR)||LA129_2==FALSE||LA129_2==HEX_CONST||LA129_2==LBRACKET||LA129_2==LPAREN||LA129_2==MINUS||LA129_2==M_REAL_CONST||LA129_2==NOT||LA129_2==OCT_CONST||LA129_2==PLUS||LA129_2==TRUE) ) {
						alt129=1;
					}

				}

				switch (alt129) {
				case 1 :
					// MFortranParser2018.g:1485:9: COMMA ac_value
					{
					match(input,COMMA,FOLLOW_COMMA_in_ac_value_list6191); if (state.failed) return;
					pushFollow(FOLLOW_ac_value_in_ac_value_list6193);
					ac_value();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAV++;}
					}
					break;

				default :
					break loop129;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.ac_value_list(numAV);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ac_value_list"



	// $ANTLR start "ac_implied_do"
	// MFortranParser2018.g:1491:1: ac_implied_do : LPAREN ac_value_list COMMA ac_implied_do_control RPAREN ;
	public final void ac_implied_do() throws RecognitionException {
		try {
			// MFortranParser2018.g:1492:5: ( LPAREN ac_value_list COMMA ac_implied_do_control RPAREN )
			// MFortranParser2018.g:1492:7: LPAREN ac_value_list COMMA ac_implied_do_control RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_ac_implied_do6216); if (state.failed) return;
			pushFollow(FOLLOW_ac_value_list_in_ac_implied_do6218);
			ac_value_list();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_ac_implied_do6220); if (state.failed) return;
			pushFollow(FOLLOW_ac_implied_do_control_in_ac_implied_do6222);
			ac_implied_do_control();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_ac_implied_do6224); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.ac_implied_do();}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ac_implied_do"



	// $ANTLR start "ac_implied_do_control"
	// MFortranParser2018.g:1502:1: ac_implied_do_control : IDENT EQUALS expr COMMA expr ( COMMA expr )? ;
	public final void ac_implied_do_control() throws RecognitionException {
		Token IDENT109=null;


		  boolean hasStrd=false;

		try {
			// MFortranParser2018.g:1506:5: ( IDENT EQUALS expr COMMA expr ( COMMA expr )? )
			// MFortranParser2018.g:1506:7: IDENT EQUALS expr COMMA expr ( COMMA expr )?
			{
			IDENT109=(Token)match(input,IDENT,FOLLOW_IDENT_in_ac_implied_do_control6257); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_ac_implied_do_control6259); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_ac_implied_do_control6261);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_ac_implied_do_control6263); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_ac_implied_do_control6265);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1507:7: ( COMMA expr )?
			int alt130=2;
			int LA130_0 = input.LA(1);
			if ( (LA130_0==COMMA) ) {
				alt130=1;
			}
			switch (alt130) {
				case 1 :
					// MFortranParser2018.g:1507:9: COMMA expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_ac_implied_do_control6276); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_ac_implied_do_control6278);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasStrd=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.ac_implied_do_control(IDENT109, hasStrd); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "ac_implied_do_control"



	// $ANTLR start "type_declaration_stmt"
	// MFortranParser2018.g:1514:1: type_declaration_stmt : (lbl= label )? declaration_type_spec ( ( COMMA attr_spec )* COLON_COLON )? entity_decl_list end_of_stmt ;
	public final void type_declaration_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt110 =null;


		  int numAS = 0;

		try {
			// MFortranParser2018.g:1521:5: ( (lbl= label )? declaration_type_spec ( ( COMMA attr_spec )* COLON_COLON )? entity_decl_list end_of_stmt )
			// MFortranParser2018.g:1521:7: (lbl= label )? declaration_type_spec ( ( COMMA attr_spec )* COLON_COLON )? entity_decl_list end_of_stmt
			{
			// MFortranParser2018.g:1521:7: (lbl= label )?
			int alt131=2;
			int LA131_0 = input.LA(1);
			if ( (LA131_0==DIGIT_STR) ) {
				alt131=1;
			}
			switch (alt131) {
				case 1 :
					// MFortranParser2018.g:1521:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_type_declaration_stmt6324);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_declaration_type_spec_in_type_declaration_stmt6336);
			declaration_type_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1523:7: ( ( COMMA attr_spec )* COLON_COLON )?
			int alt133=2;
			int LA133_0 = input.LA(1);
			if ( ((LA133_0 >= COLON_COLON && LA133_0 <= COMMA)) ) {
				alt133=1;
			}
			switch (alt133) {
				case 1 :
					// MFortranParser2018.g:1523:9: ( COMMA attr_spec )* COLON_COLON
					{
					// MFortranParser2018.g:1523:9: ( COMMA attr_spec )*
					loop132:
					while (true) {
						int alt132=2;
						int LA132_0 = input.LA(1);
						if ( (LA132_0==COMMA) ) {
							alt132=1;
						}

						switch (alt132) {
						case 1 :
							// MFortranParser2018.g:1523:10: COMMA attr_spec
							{
							match(input,COMMA,FOLLOW_COMMA_in_type_declaration_stmt6347); if (state.failed) return;
							pushFollow(FOLLOW_attr_spec_in_type_declaration_stmt6349);
							attr_spec();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {numAS ++;}
							}
							break;

						default :
							break loop132;
						}
					}

					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_type_declaration_stmt6355); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_entity_decl_list_in_type_declaration_stmt6366);
			entity_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_type_declaration_stmt6368);
			end_of_stmt110=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.type_declaration_stmt(lbl, numAS, end_of_stmt110); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_declaration_stmt"



	// $ANTLR start "attr_spec"
	// MFortranParser2018.g:1531:1: attr_spec : ( access_spec | ALLOCATABLE | ASYNCHRONOUS | CODIMENSION LBRACKET coarray_spec RBRACKET | CONTIGUOUS | DIMENSION LPAREN array_spec RPAREN | EXTERNAL | INTENT LPAREN intent_spec RPAREN | INTRINSIC | language_binding_spec | OPTIONAL | PARAMETER | POINTER | PROTECTED | SAVE | TARGET | VALUE | VOLATILE | attr_spec_extension );
	public final void attr_spec() throws RecognitionException {
		Token ALLOCATABLE111=null;
		Token ASYNCHRONOUS112=null;
		Token CODIMENSION113=null;
		Token CONTIGUOUS114=null;
		Token DIMENSION115=null;
		Token EXTERNAL116=null;
		Token INTENT117=null;
		Token INTRINSIC118=null;
		Token OPTIONAL119=null;
		Token PARAMETER120=null;
		Token POINTER121=null;
		Token PROTECTED122=null;
		Token SAVE123=null;
		Token TARGET124=null;
		Token VALUE125=null;
		Token VOLATILE126=null;

		try {
			// MFortranParser2018.g:1532:5: ( access_spec | ALLOCATABLE | ASYNCHRONOUS | CODIMENSION LBRACKET coarray_spec RBRACKET | CONTIGUOUS | DIMENSION LPAREN array_spec RPAREN | EXTERNAL | INTENT LPAREN intent_spec RPAREN | INTRINSIC | language_binding_spec | OPTIONAL | PARAMETER | POINTER | PROTECTED | SAVE | TARGET | VALUE | VOLATILE | attr_spec_extension )
			int alt134=19;
			switch ( input.LA(1) ) {
			case PRIVATE:
			case PUBLIC:
				{
				alt134=1;
				}
				break;
			case ALLOCATABLE:
				{
				alt134=2;
				}
				break;
			case ASYNCHRONOUS:
				{
				alt134=3;
				}
				break;
			case CODIMENSION:
				{
				alt134=4;
				}
				break;
			case CONTIGUOUS:
				{
				alt134=5;
				}
				break;
			case DIMENSION:
				{
				alt134=6;
				}
				break;
			case EXTERNAL:
				{
				alt134=7;
				}
				break;
			case INTENT:
				{
				alt134=8;
				}
				break;
			case INTRINSIC:
				{
				alt134=9;
				}
				break;
			case BIND:
				{
				alt134=10;
				}
				break;
			case OPTIONAL:
				{
				alt134=11;
				}
				break;
			case PARAMETER:
				{
				alt134=12;
				}
				break;
			case POINTER:
				{
				alt134=13;
				}
				break;
			case PROTECTED:
				{
				alt134=14;
				}
				break;
			case SAVE:
				{
				alt134=15;
				}
				break;
			case TARGET:
				{
				alt134=16;
				}
				break;
			case VALUE:
				{
				alt134=17;
				}
				break;
			case VOLATILE:
				{
				alt134=18;
				}
				break;
			case NO_LANG_EXT:
				{
				alt134=19;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 134, 0, input);
				throw nvae;
			}
			switch (alt134) {
				case 1 :
					// MFortranParser2018.g:1532:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_attr_spec6397);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.attr_spec(null, 
					            MFPUtils.ATTR_ACCESS); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1535:7: ALLOCATABLE
					{
					ALLOCATABLE111=(Token)match(input,ALLOCATABLE,FOLLOW_ALLOCATABLE_in_attr_spec6415); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.attr_spec(ALLOCATABLE111, 
					            MFPUtils.ATTR_ALLOCATABLE);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:1538:7: ASYNCHRONOUS
					{
					ASYNCHRONOUS112=(Token)match(input,ASYNCHRONOUS,FOLLOW_ASYNCHRONOUS_in_attr_spec6433); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.attr_spec(ASYNCHRONOUS112, 
					            MFPUtils.ATTR_ASYNCHRONOUS);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:1541:7: CODIMENSION LBRACKET coarray_spec RBRACKET
					{
					CODIMENSION113=(Token)match(input,CODIMENSION,FOLLOW_CODIMENSION_in_attr_spec6451); if (state.failed) return;
					match(input,LBRACKET,FOLLOW_LBRACKET_in_attr_spec6453); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_attr_spec6455);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_attr_spec6457); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(CODIMENSION113, 
					            MFPUtils.ATTR_CODIMENSION);}
					}
					break;
				case 5 :
					// MFortranParser2018.g:1544:7: CONTIGUOUS
					{
					CONTIGUOUS114=(Token)match(input,CONTIGUOUS,FOLLOW_CONTIGUOUS_in_attr_spec6475); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(CONTIGUOUS114, 
					            MFPUtils.ATTR_CONTIGUOUS);}
					}
					break;
				case 6 :
					// MFortranParser2018.g:1547:7: DIMENSION LPAREN array_spec RPAREN
					{
					DIMENSION115=(Token)match(input,DIMENSION,FOLLOW_DIMENSION_in_attr_spec6493); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_attr_spec6495); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_in_attr_spec6497);
					array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_attr_spec6499); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(DIMENSION115, 
					            MFPUtils.ATTR_DIMENSION);}
					}
					break;
				case 7 :
					// MFortranParser2018.g:1550:7: EXTERNAL
					{
					EXTERNAL116=(Token)match(input,EXTERNAL,FOLLOW_EXTERNAL_in_attr_spec6517); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(EXTERNAL116, 
					            MFPUtils.ATTR_EXTERNAL);}
					}
					break;
				case 8 :
					// MFortranParser2018.g:1553:7: INTENT LPAREN intent_spec RPAREN
					{
					INTENT117=(Token)match(input,INTENT,FOLLOW_INTENT_in_attr_spec6535); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_attr_spec6537); if (state.failed) return;
					pushFollow(FOLLOW_intent_spec_in_attr_spec6539);
					intent_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_attr_spec6541); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(INTENT117, 
					            MFPUtils.ATTR_INTENT);}
					}
					break;
				case 9 :
					// MFortranParser2018.g:1556:7: INTRINSIC
					{
					INTRINSIC118=(Token)match(input,INTRINSIC,FOLLOW_INTRINSIC_in_attr_spec6559); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(INTRINSIC118, 
					            MFPUtils.ATTR_INTRINSIC);}
					}
					break;
				case 10 :
					// MFortranParser2018.g:1559:7: language_binding_spec
					{
					pushFollow(FOLLOW_language_binding_spec_in_attr_spec6577);
					language_binding_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(null, 
					            MFPUtils.ATTR_BIND);}
					}
					break;
				case 11 :
					// MFortranParser2018.g:1562:7: OPTIONAL
					{
					OPTIONAL119=(Token)match(input,OPTIONAL,FOLLOW_OPTIONAL_in_attr_spec6595); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(OPTIONAL119, 
					            MFPUtils.ATTR_OPTIONAL);}
					}
					break;
				case 12 :
					// MFortranParser2018.g:1565:7: PARAMETER
					{
					PARAMETER120=(Token)match(input,PARAMETER,FOLLOW_PARAMETER_in_attr_spec6613); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(PARAMETER120, 
					            MFPUtils.ATTR_PARAMETER);}
					}
					break;
				case 13 :
					// MFortranParser2018.g:1568:7: POINTER
					{
					POINTER121=(Token)match(input,POINTER,FOLLOW_POINTER_in_attr_spec6631); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(POINTER121, 
					            MFPUtils.ATTR_POINTER);}
					}
					break;
				case 14 :
					// MFortranParser2018.g:1571:7: PROTECTED
					{
					PROTECTED122=(Token)match(input,PROTECTED,FOLLOW_PROTECTED_in_attr_spec6649); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(PROTECTED122, 
					            MFPUtils.ATTR_PROTECTED);}
					}
					break;
				case 15 :
					// MFortranParser2018.g:1574:7: SAVE
					{
					SAVE123=(Token)match(input,SAVE,FOLLOW_SAVE_in_attr_spec6667); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(SAVE123, 
					            MFPUtils.ATTR_SAVE);}
					}
					break;
				case 16 :
					// MFortranParser2018.g:1577:7: TARGET
					{
					TARGET124=(Token)match(input,TARGET,FOLLOW_TARGET_in_attr_spec6685); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(TARGET124, 
					            MFPUtils.ATTR_TARGET);}
					}
					break;
				case 17 :
					// MFortranParser2018.g:1580:7: VALUE
					{
					VALUE125=(Token)match(input,VALUE,FOLLOW_VALUE_in_attr_spec6703); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(VALUE125, 
					            MFPUtils.ATTR_VALUE);}
					}
					break;
				case 18 :
					// MFortranParser2018.g:1583:7: VOLATILE
					{
					VOLATILE126=(Token)match(input,VOLATILE,FOLLOW_VOLATILE_in_attr_spec6721); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(VOLATILE126, 
					            MFPUtils.ATTR_VOLATILE);}
					}
					break;
				case 19 :
					// MFortranParser2018.g:1586:7: attr_spec_extension
					{
					pushFollow(FOLLOW_attr_spec_extension_in_attr_spec6739);
					attr_spec_extension();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.attr_spec(null, 
					            MFPUtils.ATTR_OTHER);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attr_spec"



	// $ANTLR start "attr_spec_extension"
	// MFortranParser2018.g:1591:1: attr_spec_extension : NO_LANG_EXT ;
	public final void attr_spec_extension() throws RecognitionException {
		Token NO_LANG_EXT127=null;

		try {
			// MFortranParser2018.g:1592:5: ( NO_LANG_EXT )
			// MFortranParser2018.g:1592:7: NO_LANG_EXT
			{
			NO_LANG_EXT127=(Token)match(input,NO_LANG_EXT,FOLLOW_NO_LANG_EXT_in_attr_spec_extension6766); if (state.failed) return;
			if ( state.backtracking==0 ) {MFPA.attr_spec_extension(NO_LANG_EXT127, 
			            MFPUtils.ATTR_EXT_NONE);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "attr_spec_extension"



	// $ANTLR start "entity_decl"
	// MFortranParser2018.g:1603:1: entity_decl : IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( initialization )? ;
	public final void entity_decl() throws RecognitionException {
		Token IDENT128=null;


		   boolean hasAS=false;
		   boolean hasCS=false;
		   boolean hasCL=false;
		   boolean hasInit=false;

		try {
			// MFortranParser2018.g:1610:5: ( IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( initialization )? )
			// MFortranParser2018.g:1610:7: IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ( ASTERISK char_length )? ( initialization )?
			{
			IDENT128=(Token)match(input,IDENT,FOLLOW_IDENT_in_entity_decl6799); if (state.failed) return;
			// MFortranParser2018.g:1611:7: ( LPAREN array_spec RPAREN )?
			int alt135=2;
			int LA135_0 = input.LA(1);
			if ( (LA135_0==LPAREN) ) {
				alt135=1;
			}
			switch (alt135) {
				case 1 :
					// MFortranParser2018.g:1611:9: LPAREN array_spec RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_entity_decl6810); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_in_entity_decl6812);
					array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_entity_decl6814); if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					}
					break;

			}

			// MFortranParser2018.g:1612:7: ( LBRACKET coarray_spec RBRACKET )?
			int alt136=2;
			int LA136_0 = input.LA(1);
			if ( (LA136_0==LBRACKET) ) {
				alt136=1;
			}
			switch (alt136) {
				case 1 :
					// MFortranParser2018.g:1612:9: LBRACKET coarray_spec RBRACKET
					{
					match(input,LBRACKET,FOLLOW_LBRACKET_in_entity_decl6830); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_entity_decl6832);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_entity_decl6834); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCS=true;}
					}
					break;

			}

			// MFortranParser2018.g:1613:7: ( ASTERISK char_length )?
			int alt137=2;
			int LA137_0 = input.LA(1);
			if ( (LA137_0==ASTERISK) ) {
				alt137=1;
			}
			switch (alt137) {
				case 1 :
					// MFortranParser2018.g:1613:9: ASTERISK char_length
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_entity_decl6850); if (state.failed) return;
					pushFollow(FOLLOW_char_length_in_entity_decl6852);
					char_length();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasCL=true;}
					}
					break;

			}

			// MFortranParser2018.g:1614:7: ( initialization )?
			int alt138=2;
			int LA138_0 = input.LA(1);
			if ( (LA138_0==EQUALS||LA138_0==EQ_GT) ) {
				alt138=1;
			}
			switch (alt138) {
				case 1 :
					// MFortranParser2018.g:1614:9: initialization
					{
					pushFollow(FOLLOW_initialization_in_entity_decl6868);
					initialization();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasInit=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.entity_decl(IDENT128, hasAS, hasCS, hasCL, hasInit); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "entity_decl"



	// $ANTLR start "entity_decl_list"
	// MFortranParser2018.g:1618:1: entity_decl_list : entity_decl ( COMMA entity_decl )* ;
	public final void entity_decl_list() throws RecognitionException {

		  int numED = 1;

		try {
			// MFortranParser2018.g:1625:5: ( entity_decl ( COMMA entity_decl )* )
			// MFortranParser2018.g:1625:7: entity_decl ( COMMA entity_decl )*
			{
			pushFollow(FOLLOW_entity_decl_in_entity_decl_list6908);
			entity_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1626:7: ( COMMA entity_decl )*
			loop139:
			while (true) {
				int alt139=2;
				int LA139_0 = input.LA(1);
				if ( (LA139_0==COMMA) ) {
					alt139=1;
				}

				switch (alt139) {
				case 1 :
					// MFortranParser2018.g:1626:9: COMMA entity_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_entity_decl_list6919); if (state.failed) return;
					pushFollow(FOLLOW_entity_decl_in_entity_decl_list6921);
					entity_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numED ++;}
					}
					break;

				default :
					break loop139;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.entity_decl_list(numED);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "entity_decl_list"



	// $ANTLR start "object_name"
	// MFortranParser2018.g:1632:1: object_name returns [Token t] : IDENT ;
	public final Token object_name() throws RecognitionException {
		Token t = null;


		Token IDENT129=null;

		try {
			// MFortranParser2018.g:1633:5: ( IDENT )
			// MFortranParser2018.g:1633:7: IDENT
			{
			IDENT129=(Token)match(input,IDENT,FOLLOW_IDENT_in_object_name6949); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = IDENT129;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "object_name"



	// $ANTLR start "initialization"
	// MFortranParser2018.g:1641:1: initialization : ( EQUALS expr | EQ_GT designator );
	public final void initialization() throws RecognitionException {
		try {
			// MFortranParser2018.g:1642:5: ( EQUALS expr | EQ_GT designator )
			int alt140=2;
			int LA140_0 = input.LA(1);
			if ( (LA140_0==EQUALS) ) {
				alt140=1;
			}
			else if ( (LA140_0==EQ_GT) ) {
				alt140=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 140, 0, input);
				throw nvae;
			}

			switch (alt140) {
				case 1 :
					// MFortranParser2018.g:1642:7: EQUALS expr
					{
					match(input,EQUALS,FOLLOW_EQUALS_in_initialization6970); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_initialization6972);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.initialization(MFPUtils.INIT_VAL); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1646:7: EQ_GT designator
					{
					match(input,EQ_GT,FOLLOW_EQ_GT_in_initialization6991); if (state.failed) return;
					pushFollow(FOLLOW_designator_in_initialization6993);
					designator();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.initialization(MFPUtils.INIT_NUL); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "initialization"



	// $ANTLR start "null_init"
	// MFortranParser2018.g:1654:1: null_init : IDENT LPAREN RPAREN ;
	public final void null_init() throws RecognitionException {
		Token IDENT130=null;

		try {
			// MFortranParser2018.g:1656:5: ( IDENT LPAREN RPAREN )
			// MFortranParser2018.g:1656:7: IDENT LPAREN RPAREN
			{
			IDENT130=(Token)match(input,IDENT,FOLLOW_IDENT_in_null_init7022); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_null_init7024); if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_null_init7026); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.null_init(IDENT130); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "null_init"



	// $ANTLR start "access_spec"
	// MFortranParser2018.g:1663:1: access_spec : ( PUBLIC | PRIVATE );
	public final void access_spec() throws RecognitionException {
		Token PUBLIC131=null;
		Token PRIVATE132=null;

		try {
			// MFortranParser2018.g:1664:5: ( PUBLIC | PRIVATE )
			int alt141=2;
			int LA141_0 = input.LA(1);
			if ( (LA141_0==PUBLIC) ) {
				alt141=1;
			}
			else if ( (LA141_0==PRIVATE) ) {
				alt141=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 141, 0, input);
				throw nvae;
			}

			switch (alt141) {
				case 1 :
					// MFortranParser2018.g:1664:7: PUBLIC
					{
					PUBLIC131=(Token)match(input,PUBLIC,FOLLOW_PUBLIC_in_access_spec7053); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.access_spec(PUBLIC131, MFPUtils.ATTR_PUBLIC);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:1666:7: PRIVATE
					{
					PRIVATE132=(Token)match(input,PRIVATE,FOLLOW_PRIVATE_in_access_spec7069); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.access_spec(PRIVATE132, MFPUtils.ATTR_PRIVATE);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "access_spec"



	// $ANTLR start "language_binding_spec"
	// MFortranParser2018.g:1674:1: language_binding_spec : BIND LPAREN IDENT ( COMMA name EQUALS expr )? RPAREN ;
	public final void language_binding_spec() throws RecognitionException {
		Token BIND133=null;
		Token IDENT134=null;


		  boolean hasName = false;

		try {
			// MFortranParser2018.g:1679:5: ( BIND LPAREN IDENT ( COMMA name EQUALS expr )? RPAREN )
			// MFortranParser2018.g:1679:7: BIND LPAREN IDENT ( COMMA name EQUALS expr )? RPAREN
			{
			BIND133=(Token)match(input,BIND,FOLLOW_BIND_in_language_binding_spec7101); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_language_binding_spec7103); if (state.failed) return;
			IDENT134=(Token)match(input,IDENT,FOLLOW_IDENT_in_language_binding_spec7105); if (state.failed) return;
			// MFortranParser2018.g:1680:7: ( COMMA name EQUALS expr )?
			int alt142=2;
			int LA142_0 = input.LA(1);
			if ( (LA142_0==COMMA) ) {
				alt142=1;
			}
			switch (alt142) {
				case 1 :
					// MFortranParser2018.g:1680:8: COMMA name EQUALS expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_language_binding_spec7115); if (state.failed) return;
					pushFollow(FOLLOW_name_in_language_binding_spec7117);
					name();
					state._fsp--;
					if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_language_binding_spec7119); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_language_binding_spec7121);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasName=true; }
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_language_binding_spec7127); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.language_binding_spec(BIND133, IDENT134, hasName); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "language_binding_spec"



	// $ANTLR start "coarray_spec"
	// MFortranParser2018.g:1698:1: coarray_spec : array_spec_element ( COMMA array_spec_element )* ;
	public final void coarray_spec() throws RecognitionException {

		  int numCS = 1;

		try {
			// MFortranParser2018.g:1702:4: ( array_spec_element ( COMMA array_spec_element )* )
			// MFortranParser2018.g:1702:6: array_spec_element ( COMMA array_spec_element )*
			{
			pushFollow(FOLLOW_array_spec_element_in_coarray_spec7159);
			array_spec_element();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1703:6: ( COMMA array_spec_element )*
			loop143:
			while (true) {
				int alt143=2;
				int LA143_0 = input.LA(1);
				if ( (LA143_0==COMMA) ) {
					alt143=1;
				}

				switch (alt143) {
				case 1 :
					// MFortranParser2018.g:1703:7: COMMA array_spec_element
					{
					match(input,COMMA,FOLLOW_COMMA_in_coarray_spec7168); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_element_in_coarray_spec7170);
					array_spec_element();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCS++;}
					}
					break;

				default :
					break loop143;
				}
			}

			if ( state.backtracking==0 ) { MFPA.coarray_spec(numCS); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "coarray_spec"



	// $ANTLR start "dimension_spec"
	// MFortranParser2018.g:1710:1: dimension_spec : DIMENSION LPAREN array_spec RPAREN ;
	public final void dimension_spec() throws RecognitionException {
		Token DIMENSION135=null;

		try {
			// MFortranParser2018.g:1711:5: ( DIMENSION LPAREN array_spec RPAREN )
			// MFortranParser2018.g:1711:7: DIMENSION LPAREN array_spec RPAREN
			{
			DIMENSION135=(Token)match(input,DIMENSION,FOLLOW_DIMENSION_in_dimension_spec7201); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_dimension_spec7203); if (state.failed) return;
			pushFollow(FOLLOW_array_spec_in_dimension_spec7205);
			array_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_dimension_spec7207); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.dimension_spec(DIMENSION135); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dimension_spec"



	// $ANTLR start "array_spec"
	// MFortranParser2018.g:1743:1: array_spec : array_spec_element ( COMMA array_spec_element )* ;
	public final void array_spec() throws RecognitionException {

		  int numAS = 1;

		try {
			// MFortranParser2018.g:1747:5: ( array_spec_element ( COMMA array_spec_element )* )
			// MFortranParser2018.g:1747:7: array_spec_element ( COMMA array_spec_element )*
			{
			pushFollow(FOLLOW_array_spec_element_in_array_spec7238);
			array_spec_element();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1748:7: ( COMMA array_spec_element )*
			loop144:
			while (true) {
				int alt144=2;
				int LA144_0 = input.LA(1);
				if ( (LA144_0==COMMA) ) {
					alt144=1;
				}

				switch (alt144) {
				case 1 :
					// MFortranParser2018.g:1748:8: COMMA array_spec_element
					{
					match(input,COMMA,FOLLOW_COMMA_in_array_spec7247); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_element_in_array_spec7249);
					array_spec_element();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAS++;}
					}
					break;

				default :
					break loop144;
				}
			}

			if ( state.backtracking==0 ) { MFPA.array_spec(numAS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "array_spec"



	// $ANTLR start "array_spec_element"
	// MFortranParser2018.g:1752:1: array_spec_element : ( expr ( COLON ( expr | ASTERISK )? )? | ASTERISK | COLON | DODOT );
	public final void array_spec_element() throws RecognitionException {

		  int type = MFPUtils.ASE_1U;

		try {
			// MFortranParser2018.g:1759:5: ( expr ( COLON ( expr | ASTERISK )? )? | ASTERISK | COLON | DODOT )
			int alt147=4;
			switch ( input.LA(1) ) {
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case IDENT:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt147=1;
				}
				break;
			case ASTERISK:
				{
				alt147=2;
				}
				break;
			case COLON:
				{
				alt147=3;
				}
				break;
			case DODOT:
				{
				alt147=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 147, 0, input);
				throw nvae;
			}
			switch (alt147) {
				case 1 :
					// MFortranParser2018.g:1759:7: expr ( COLON ( expr | ASTERISK )? )?
					{
					pushFollow(FOLLOW_expr_in_array_spec_element7288);
					expr();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:1759:12: ( COLON ( expr | ASTERISK )? )?
					int alt146=2;
					int LA146_0 = input.LA(1);
					if ( (LA146_0==COLON) ) {
						alt146=1;
					}
					switch (alt146) {
						case 1 :
							// MFortranParser2018.g:1759:14: COLON ( expr | ASTERISK )?
							{
							match(input,COLON,FOLLOW_COLON_in_array_spec_element7292); if (state.failed) return;
							if ( state.backtracking==0 ) {type=MFPUtils.ASE_LN;}
							// MFortranParser2018.g:1760:14: ( expr | ASTERISK )?
							int alt145=3;
							int LA145_0 = input.LA(1);
							if ( (LA145_0==BIN_CONST||LA145_0==CHAR_CONST||(LA145_0 >= DEFINED_OP && LA145_0 <= DIGIT_STR)||LA145_0==FALSE||(LA145_0 >= HEX_CONST && LA145_0 <= IDENT)||LA145_0==LBRACKET||LA145_0==LPAREN||LA145_0==MINUS||LA145_0==M_REAL_CONST||LA145_0==NOT||LA145_0==OCT_CONST||LA145_0==PLUS||LA145_0==TRUE) ) {
								alt145=1;
							}
							else if ( (LA145_0==ASTERISK) ) {
								alt145=2;
							}
							switch (alt145) {
								case 1 :
									// MFortranParser2018.g:1760:16: expr
									{
									pushFollow(FOLLOW_expr_in_array_spec_element7311);
									expr();
									state._fsp--;
									if (state.failed) return;
									if ( state.backtracking==0 ) {type=MFPUtils.ASE_LU;}
									}
									break;
								case 2 :
									// MFortranParser2018.g:1761:16: ASTERISK
									{
									match(input,ASTERISK,FOLLOW_ASTERISK_in_array_spec_element7330); if (state.failed) return;
									if ( state.backtracking==0 ) {type=MFPUtils.ASE_LX;}
									}
									break;

							}

							}
							break;

					}

					}
					break;
				case 2 :
					// MFortranParser2018.g:1764:7: ASTERISK
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_array_spec_element7371); if (state.failed) return;
					if ( state.backtracking==0 ) { type=MFPUtils.ASE_1X; }
					}
					break;
				case 3 :
					// MFortranParser2018.g:1765:7: COLON
					{
					match(input,COLON,FOLLOW_COLON_in_array_spec_element7381); if (state.failed) return;
					if ( state.backtracking==0 ) { type=MFPUtils.ASE_NN; }
					}
					break;
				case 4 :
					// MFortranParser2018.g:1766:7: DODOT
					{
					match(input,DODOT,FOLLOW_DODOT_in_array_spec_element7391); if (state.failed) return;
					if ( state.backtracking==0 ) { type=MFPUtils.ASE_RK; }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.array_spec_element(type);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "array_spec_element"



	// $ANTLR start "explicit_shape_spec"
	// MFortranParser2018.g:1774:1: explicit_shape_spec : expr ( COLON expr )? ;
	public final void explicit_shape_spec() throws RecognitionException {

		  boolean hasUB = false;

		try {
			// MFortranParser2018.g:1778:5: ( expr ( COLON expr )? )
			// MFortranParser2018.g:1778:7: expr ( COLON expr )?
			{
			pushFollow(FOLLOW_expr_in_explicit_shape_spec7417);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1778:12: ( COLON expr )?
			int alt148=2;
			int LA148_0 = input.LA(1);
			if ( (LA148_0==COLON) ) {
				alt148=1;
			}
			switch (alt148) {
				case 1 :
					// MFortranParser2018.g:1778:13: COLON expr
					{
					match(input,COLON,FOLLOW_COLON_in_explicit_shape_spec7420); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_explicit_shape_spec7422);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasUB=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.explicit_shape_spec(hasUB);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "explicit_shape_spec"



	// $ANTLR start "explicit_shape_spec_list"
	// MFortranParser2018.g:1782:1: explicit_shape_spec_list : explicit_shape_spec ( COMMA explicit_shape_spec )* ;
	public final void explicit_shape_spec_list() throws RecognitionException {

		  int numESS = 1;

		try {
			// MFortranParser2018.g:1786:5: ( explicit_shape_spec ( COMMA explicit_shape_spec )* )
			// MFortranParser2018.g:1786:7: explicit_shape_spec ( COMMA explicit_shape_spec )*
			{
			pushFollow(FOLLOW_explicit_shape_spec_in_explicit_shape_spec_list7457);
			explicit_shape_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1787:7: ( COMMA explicit_shape_spec )*
			loop149:
			while (true) {
				int alt149=2;
				int LA149_0 = input.LA(1);
				if ( (LA149_0==COMMA) ) {
					alt149=1;
				}

				switch (alt149) {
				case 1 :
					// MFortranParser2018.g:1787:9: COMMA explicit_shape_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_explicit_shape_spec_list7467); if (state.failed) return;
					pushFollow(FOLLOW_explicit_shape_spec_in_explicit_shape_spec_list7469);
					explicit_shape_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numESS++;}
					}
					break;

				default :
					break loop149;
				}
			}

			if ( state.backtracking==0 ) { MFPA.explicit_shape_spec_list(numESS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "explicit_shape_spec_list"



	// $ANTLR start "deferred_shape_spec_list"
	// MFortranParser2018.g:1801:1: deferred_shape_spec_list : COLON ( COMMA COLON )* ;
	public final void deferred_shape_spec_list() throws RecognitionException {

		  int numDSS = 1;

		try {
			// MFortranParser2018.g:1808:5: ( COLON ( COMMA COLON )* )
			// MFortranParser2018.g:1808:7: COLON ( COMMA COLON )*
			{
			match(input,COLON,FOLLOW_COLON_in_deferred_shape_spec_list7513); if (state.failed) return;
			// MFortranParser2018.g:1809:7: ( COMMA COLON )*
			loop150:
			while (true) {
				int alt150=2;
				int LA150_0 = input.LA(1);
				if ( (LA150_0==COMMA) ) {
					alt150=1;
				}

				switch (alt150) {
				case 1 :
					// MFortranParser2018.g:1809:9: COMMA COLON
					{
					match(input,COMMA,FOLLOW_COMMA_in_deferred_shape_spec_list7524); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_deferred_shape_spec_list7526); if (state.failed) return;
					if ( state.backtracking==0 ) {numDSS++;}
					}
					break;

				default :
					break loop150;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.deferred_shape_spec_list(numDSS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "deferred_shape_spec_list"



	// $ANTLR start "intent_spec"
	// MFortranParser2018.g:1815:1: intent_spec : ( IN | OUT | IN OUT | INOUT );
	public final void intent_spec() throws RecognitionException {
		Token IN136=null;
		Token OUT137=null;
		Token IN138=null;
		Token OUT139=null;
		Token INOUT140=null;

		try {
			// MFortranParser2018.g:1816:5: ( IN | OUT | IN OUT | INOUT )
			int alt151=4;
			switch ( input.LA(1) ) {
			case IN:
				{
				int LA151_1 = input.LA(2);
				if ( (LA151_1==OUT) ) {
					alt151=3;
				}
				else if ( (LA151_1==RPAREN) ) {
					alt151=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 151, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case OUT:
				{
				alt151=2;
				}
				break;
			case INOUT:
				{
				alt151=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 151, 0, input);
				throw nvae;
			}
			switch (alt151) {
				case 1 :
					// MFortranParser2018.g:1816:7: IN
					{
					IN136=(Token)match(input,IN,FOLLOW_IN_in_intent_spec7550); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intent_spec(
					                IN136, null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1818:7: OUT
					{
					OUT137=(Token)match(input,OUT,FOLLOW_OUT_in_intent_spec7560); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intent_spec(
					                null, OUT137); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:1820:7: IN OUT
					{
					IN138=(Token)match(input,IN,FOLLOW_IN_in_intent_spec7570); if (state.failed) return;
					OUT139=(Token)match(input,OUT,FOLLOW_OUT_in_intent_spec7572); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intent_spec(
					                IN138, OUT139); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:1822:7: INOUT
					{
					INOUT140=(Token)match(input,INOUT,FOLLOW_INOUT_in_intent_spec7582); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.intent_spec(
					                INOUT140, INOUT140); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "intent_spec"



	// $ANTLR start "access_stmt"
	// MFortranParser2018.g:1829:1: access_stmt : (lbl= label )? access_spec ( ( COLON_COLON )? access_id_list )? end_of_stmt ;
	public final void access_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt141 =null;


		  boolean hasList=false;

		try {
			// MFortranParser2018.g:1836:5: ( (lbl= label )? access_spec ( ( COLON_COLON )? access_id_list )? end_of_stmt )
			// MFortranParser2018.g:1836:7: (lbl= label )? access_spec ( ( COLON_COLON )? access_id_list )? end_of_stmt
			{
			// MFortranParser2018.g:1836:7: (lbl= label )?
			int alt152=2;
			int LA152_0 = input.LA(1);
			if ( (LA152_0==DIGIT_STR) ) {
				alt152=1;
			}
			switch (alt152) {
				case 1 :
					// MFortranParser2018.g:1836:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_access_stmt7615);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_access_spec_in_access_stmt7627);
			access_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1837:19: ( ( COLON_COLON )? access_id_list )?
			int alt154=2;
			int LA154_0 = input.LA(1);
			if ( (LA154_0==ASSIGNMENT||LA154_0==COLON_COLON||LA154_0==IDENT||LA154_0==OPERATOR||LA154_0==READ||LA154_0==WRITE) ) {
				alt154=1;
			}
			switch (alt154) {
				case 1 :
					// MFortranParser2018.g:1838:9: ( COLON_COLON )? access_id_list
					{
					// MFortranParser2018.g:1838:9: ( COLON_COLON )?
					int alt153=2;
					int LA153_0 = input.LA(1);
					if ( (LA153_0==COLON_COLON) ) {
						alt153=1;
					}
					switch (alt153) {
						case 1 :
							// MFortranParser2018.g:1838:11: COLON_COLON
							{
							match(input,COLON_COLON,FOLLOW_COLON_COLON_in_access_stmt7642); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_access_id_list_in_access_stmt7656);
					access_id_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasList=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_access_stmt7669);
			end_of_stmt141=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.access_stmt(lbl,end_of_stmt141,hasList); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "access_stmt"



	// $ANTLR start "access_id"
	// MFortranParser2018.g:1849:1: access_id : generic_spec ;
	public final void access_id() throws RecognitionException {
		try {
			// MFortranParser2018.g:1850:5: ( generic_spec )
			// MFortranParser2018.g:1850:7: generic_spec
			{
			pushFollow(FOLLOW_generic_spec_in_access_id7698);
			generic_spec();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.access_id(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "access_id"



	// $ANTLR start "access_id_list"
	// MFortranParser2018.g:1853:1: access_id_list : access_id ( COMMA access_id )* ;
	public final void access_id_list() throws RecognitionException {
		 
		  int numAI = 1;

		try {
			// MFortranParser2018.g:1860:5: ( access_id ( COMMA access_id )* )
			// MFortranParser2018.g:1860:7: access_id ( COMMA access_id )*
			{
			pushFollow(FOLLOW_access_id_in_access_id_list7725);
			access_id();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1861:7: ( COMMA access_id )*
			loop155:
			while (true) {
				int alt155=2;
				int LA155_0 = input.LA(1);
				if ( (LA155_0==COMMA) ) {
					alt155=1;
				}

				switch (alt155) {
				case 1 :
					// MFortranParser2018.g:1861:9: COMMA access_id
					{
					match(input,COMMA,FOLLOW_COMMA_in_access_id_list7736); if (state.failed) return;
					pushFollow(FOLLOW_access_id_in_access_id_list7738);
					access_id();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAI++;}
					}
					break;

				default :
					break loop155;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.access_id_list(numAI);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "access_id_list"



	// $ANTLR start "allocatable_stmt"
	// MFortranParser2018.g:1867:1: allocatable_stmt : (lbl= label )? ALLOCATABLE ( COLON_COLON )? allocatable_decl_list end_of_stmt ;
	public final void allocatable_stmt() throws RecognitionException {
		Token ALLOCATABLE142=null;
		Token lbl =null;
		Token end_of_stmt143 =null;



		try {
			// MFortranParser2018.g:1873:5: ( (lbl= label )? ALLOCATABLE ( COLON_COLON )? allocatable_decl_list end_of_stmt )
			// MFortranParser2018.g:1873:7: (lbl= label )? ALLOCATABLE ( COLON_COLON )? allocatable_decl_list end_of_stmt
			{
			// MFortranParser2018.g:1873:7: (lbl= label )?
			int alt156=2;
			int LA156_0 = input.LA(1);
			if ( (LA156_0==DIGIT_STR) ) {
				alt156=1;
			}
			switch (alt156) {
				case 1 :
					// MFortranParser2018.g:1873:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_allocatable_stmt7774);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ALLOCATABLE142=(Token)match(input,ALLOCATABLE,FOLLOW_ALLOCATABLE_in_allocatable_stmt7785); if (state.failed) return;
			// MFortranParser2018.g:1874:19: ( COLON_COLON )?
			int alt157=2;
			int LA157_0 = input.LA(1);
			if ( (LA157_0==COLON_COLON) ) {
				alt157=1;
			}
			switch (alt157) {
				case 1 :
					// MFortranParser2018.g:1874:21: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_allocatable_stmt7789); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_allocatable_decl_list_in_allocatable_stmt7794);
			allocatable_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_allocatable_stmt7796);
			end_of_stmt143=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {  MFPA.allocatable_stmt(lbl, ALLOCATABLE142, end_of_stmt143);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocatable_stmt"



	// $ANTLR start "allocatable_decl"
	// MFortranParser2018.g:1881:1: allocatable_decl : object_name ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ;
	public final void allocatable_decl() throws RecognitionException {
		Token object_name144 =null;


		  Token objName=null; 
		  boolean hasAS=false; 
		  boolean hasCS=false;

		try {
			// MFortranParser2018.g:1887:5: ( object_name ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? )
			// MFortranParser2018.g:1887:7: object_name ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )?
			{
			pushFollow(FOLLOW_object_name_in_allocatable_decl7832);
			object_name144=object_name();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {objName=object_name144;}
			// MFortranParser2018.g:1888:7: ( LPAREN array_spec RPAREN )?
			int alt158=2;
			int LA158_0 = input.LA(1);
			if ( (LA158_0==LPAREN) ) {
				alt158=1;
			}
			switch (alt158) {
				case 1 :
					// MFortranParser2018.g:1888:9: LPAREN array_spec RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_allocatable_decl7844); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_in_allocatable_decl7846);
					array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_allocatable_decl7848); if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					}
					break;

			}

			// MFortranParser2018.g:1889:7: ( LBRACKET coarray_spec RBRACKET )?
			int alt159=2;
			int LA159_0 = input.LA(1);
			if ( (LA159_0==LBRACKET) ) {
				alt159=1;
			}
			switch (alt159) {
				case 1 :
					// MFortranParser2018.g:1889:9: LBRACKET coarray_spec RBRACKET
					{
					match(input,LBRACKET,FOLLOW_LBRACKET_in_allocatable_decl7863); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_allocatable_decl7865);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_allocatable_decl7867); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCS=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.allocatable_decl(objName, hasAS, hasCS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocatable_decl"



	// $ANTLR start "allocatable_decl_list"
	// MFortranParser2018.g:1893:1: allocatable_decl_list : allocatable_decl ( COMMA allocatable_decl )* ;
	public final void allocatable_decl_list() throws RecognitionException {

		  int numAD = 1;

		try {
			// MFortranParser2018.g:1900:5: ( allocatable_decl ( COMMA allocatable_decl )* )
			// MFortranParser2018.g:1900:7: allocatable_decl ( COMMA allocatable_decl )*
			{
			pushFollow(FOLLOW_allocatable_decl_in_allocatable_decl_list7907);
			allocatable_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1901:7: ( COMMA allocatable_decl )*
			loop160:
			while (true) {
				int alt160=2;
				int LA160_0 = input.LA(1);
				if ( (LA160_0==COMMA) ) {
					alt160=1;
				}

				switch (alt160) {
				case 1 :
					// MFortranParser2018.g:1901:9: COMMA allocatable_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_allocatable_decl_list7918); if (state.failed) return;
					pushFollow(FOLLOW_allocatable_decl_in_allocatable_decl_list7920);
					allocatable_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAD++;}
					}
					break;

				default :
					break loop160;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.allocatable_decl_list(numAD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocatable_decl_list"



	// $ANTLR start "asynchronous_stmt"
	// MFortranParser2018.g:1908:1: asynchronous_stmt : (lbl= label )? ASYNCHRONOUS ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void asynchronous_stmt() throws RecognitionException {
		Token ASYNCHRONOUS145=null;
		Token lbl =null;
		Token end_of_stmt146 =null;



		try {
			// MFortranParser2018.g:1914:5: ( (lbl= label )? ASYNCHRONOUS ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:1914:7: (lbl= label )? ASYNCHRONOUS ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:1914:7: (lbl= label )?
			int alt161=2;
			int LA161_0 = input.LA(1);
			if ( (LA161_0==DIGIT_STR) ) {
				alt161=1;
			}
			switch (alt161) {
				case 1 :
					// MFortranParser2018.g:1914:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_asynchronous_stmt7956);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ASYNCHRONOUS145=(Token)match(input,ASYNCHRONOUS,FOLLOW_ASYNCHRONOUS_in_asynchronous_stmt7968); if (state.failed) return;
			// MFortranParser2018.g:1915:20: ( COLON_COLON )?
			int alt162=2;
			int LA162_0 = input.LA(1);
			if ( (LA162_0==COLON_COLON) ) {
				alt162=1;
			}
			switch (alt162) {
				case 1 :
					// MFortranParser2018.g:1915:22: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_asynchronous_stmt7972); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_asynchronous_stmt7977);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_asynchronous_stmt7986);
			end_of_stmt146=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.asynchronous_stmt(lbl,ASYNCHRONOUS145,end_of_stmt146); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "asynchronous_stmt"



	// $ANTLR start "bind_stmt"
	// MFortranParser2018.g:1923:1: bind_stmt : (lbl= label )? language_binding_spec ( COLON_COLON )? bind_entity_list end_of_stmt ;
	public final void bind_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt147 =null;



		try {
			// MFortranParser2018.g:1929:5: ( (lbl= label )? language_binding_spec ( COLON_COLON )? bind_entity_list end_of_stmt )
			// MFortranParser2018.g:1929:7: (lbl= label )? language_binding_spec ( COLON_COLON )? bind_entity_list end_of_stmt
			{
			// MFortranParser2018.g:1929:7: (lbl= label )?
			int alt163=2;
			int LA163_0 = input.LA(1);
			if ( (LA163_0==DIGIT_STR) ) {
				alt163=1;
			}
			switch (alt163) {
				case 1 :
					// MFortranParser2018.g:1929:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_bind_stmt8026);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_language_binding_spec_in_bind_stmt8038);
			language_binding_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1930:29: ( COLON_COLON )?
			int alt164=2;
			int LA164_0 = input.LA(1);
			if ( (LA164_0==COLON_COLON) ) {
				alt164=1;
			}
			switch (alt164) {
				case 1 :
					// MFortranParser2018.g:1930:31: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_bind_stmt8042); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_bind_entity_list_in_bind_stmt8047);
			bind_entity_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_bind_stmt8056);
			end_of_stmt147=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.bind_stmt(lbl, end_of_stmt147); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bind_stmt"



	// $ANTLR start "bind_entity"
	// MFortranParser2018.g:1940:1: bind_entity : ( IDENT | SLASH IDENT SLASH );
	public final void bind_entity() throws RecognitionException {
		Token IDENT148=null;
		Token IDENT149=null;

		try {
			// MFortranParser2018.g:1941:5: ( IDENT | SLASH IDENT SLASH )
			int alt165=2;
			int LA165_0 = input.LA(1);
			if ( (LA165_0==IDENT) ) {
				alt165=1;
			}
			else if ( (LA165_0==SLASH) ) {
				alt165=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 165, 0, input);
				throw nvae;
			}

			switch (alt165) {
				case 1 :
					// MFortranParser2018.g:1941:7: IDENT
					{
					IDENT148=(Token)match(input,IDENT,FOLLOW_IDENT_in_bind_entity8083); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.bind_entity(IDENT148, false); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:1943:7: SLASH IDENT SLASH
					{
					match(input,SLASH,FOLLOW_SLASH_in_bind_entity8100); if (state.failed) return;
					IDENT149=(Token)match(input,IDENT,FOLLOW_IDENT_in_bind_entity8102); if (state.failed) return;
					match(input,SLASH,FOLLOW_SLASH_in_bind_entity8104); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.bind_entity(IDENT149, true); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bind_entity"



	// $ANTLR start "bind_entity_list"
	// MFortranParser2018.g:1947:1: bind_entity_list : bind_entity ( COMMA bind_entity )* ;
	public final void bind_entity_list() throws RecognitionException {

		  int numBE = 1;

		try {
			// MFortranParser2018.g:1954:5: ( bind_entity ( COMMA bind_entity )* )
			// MFortranParser2018.g:1954:7: bind_entity ( COMMA bind_entity )*
			{
			pushFollow(FOLLOW_bind_entity_in_bind_entity_list8138);
			bind_entity();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1955:7: ( COMMA bind_entity )*
			loop166:
			while (true) {
				int alt166=2;
				int LA166_0 = input.LA(1);
				if ( (LA166_0==COMMA) ) {
					alt166=1;
				}

				switch (alt166) {
				case 1 :
					// MFortranParser2018.g:1955:9: COMMA bind_entity
					{
					match(input,COMMA,FOLLOW_COMMA_in_bind_entity_list8148); if (state.failed) return;
					pushFollow(FOLLOW_bind_entity_in_bind_entity_list8150);
					bind_entity();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numBE++;}
					}
					break;

				default :
					break loop166;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.bind_entity_list(numBE);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bind_entity_list"



	// $ANTLR start "codimension_stmt"
	// MFortranParser2018.g:1961:1: codimension_stmt : (lbl= label )? CODIMENSION ( COLON_COLON )? codimension_decl_list end_of_stmt ;
	public final void codimension_stmt() throws RecognitionException {
		Token CODIMENSION150=null;
		Token lbl =null;
		Token end_of_stmt151 =null;



		try {
			// MFortranParser2018.g:1967:5: ( (lbl= label )? CODIMENSION ( COLON_COLON )? codimension_decl_list end_of_stmt )
			// MFortranParser2018.g:1967:7: (lbl= label )? CODIMENSION ( COLON_COLON )? codimension_decl_list end_of_stmt
			{
			// MFortranParser2018.g:1967:7: (lbl= label )?
			int alt167=2;
			int LA167_0 = input.LA(1);
			if ( (LA167_0==DIGIT_STR) ) {
				alt167=1;
			}
			switch (alt167) {
				case 1 :
					// MFortranParser2018.g:1967:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_codimension_stmt8185);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CODIMENSION150=(Token)match(input,CODIMENSION,FOLLOW_CODIMENSION_in_codimension_stmt8196); if (state.failed) return;
			// MFortranParser2018.g:1968:19: ( COLON_COLON )?
			int alt168=2;
			int LA168_0 = input.LA(1);
			if ( (LA168_0==COLON_COLON) ) {
				alt168=1;
			}
			switch (alt168) {
				case 1 :
					// MFortranParser2018.g:1968:21: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_codimension_stmt8200); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_codimension_decl_list_in_codimension_stmt8205);
			codimension_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_codimension_stmt8214);
			end_of_stmt151=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.codimension_stmt(lbl, CODIMENSION150, end_of_stmt151); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "codimension_stmt"



	// $ANTLR start "codimension_decl"
	// MFortranParser2018.g:1976:1: codimension_decl : IDENT LBRACKET coarray_spec RBRACKET ;
	public final void codimension_decl() throws RecognitionException {
		Token IDENT152=null;
		Token LBRACKET153=null;
		Token RBRACKET154=null;

		try {
			// MFortranParser2018.g:1977:5: ( IDENT LBRACKET coarray_spec RBRACKET )
			// MFortranParser2018.g:1977:7: IDENT LBRACKET coarray_spec RBRACKET
			{
			IDENT152=(Token)match(input,IDENT,FOLLOW_IDENT_in_codimension_decl8241); if (state.failed) return;
			LBRACKET153=(Token)match(input,LBRACKET,FOLLOW_LBRACKET_in_codimension_decl8243); if (state.failed) return;
			pushFollow(FOLLOW_coarray_spec_in_codimension_decl8245);
			coarray_spec();
			state._fsp--;
			if (state.failed) return;
			RBRACKET154=(Token)match(input,RBRACKET,FOLLOW_RBRACKET_in_codimension_decl8247); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.codimension_decl(IDENT152, LBRACKET153, RBRACKET154);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "codimension_decl"



	// $ANTLR start "codimension_decl_list"
	// MFortranParser2018.g:1981:1: codimension_decl_list : codimension_decl ( COMMA codimension_decl )* ;
	public final void codimension_decl_list() throws RecognitionException {

		  int numCD = 1;

		try {
			// MFortranParser2018.g:1988:5: ( codimension_decl ( COMMA codimension_decl )* )
			// MFortranParser2018.g:1988:7: codimension_decl ( COMMA codimension_decl )*
			{
			pushFollow(FOLLOW_codimension_decl_in_codimension_decl_list8280);
			codimension_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:1989:7: ( COMMA codimension_decl )*
			loop169:
			while (true) {
				int alt169=2;
				int LA169_0 = input.LA(1);
				if ( (LA169_0==COMMA) ) {
					alt169=1;
				}

				switch (alt169) {
				case 1 :
					// MFortranParser2018.g:1989:9: COMMA codimension_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_codimension_decl_list8290); if (state.failed) return;
					pushFollow(FOLLOW_codimension_decl_in_codimension_decl_list8292);
					codimension_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCD++;}
					}
					break;

				default :
					break loop169;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.codimension_decl_list(numCD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "codimension_decl_list"



	// $ANTLR start "contiguous_stmt"
	// MFortranParser2018.g:1995:1: contiguous_stmt : (lbl= label )? CONTIGUOUS ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void contiguous_stmt() throws RecognitionException {
		Token CONTIGUOUS155=null;
		Token lbl =null;
		Token end_of_stmt156 =null;



		try {
			// MFortranParser2018.g:2001:5: ( (lbl= label )? CONTIGUOUS ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2001:7: (lbl= label )? CONTIGUOUS ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2001:7: (lbl= label )?
			int alt170=2;
			int LA170_0 = input.LA(1);
			if ( (LA170_0==DIGIT_STR) ) {
				alt170=1;
			}
			switch (alt170) {
				case 1 :
					// MFortranParser2018.g:2001:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_contiguous_stmt8327);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CONTIGUOUS155=(Token)match(input,CONTIGUOUS,FOLLOW_CONTIGUOUS_in_contiguous_stmt8338); if (state.failed) return;
			// MFortranParser2018.g:2002:18: ( COLON_COLON )?
			int alt171=2;
			int LA171_0 = input.LA(1);
			if ( (LA171_0==COLON_COLON) ) {
				alt171=1;
			}
			switch (alt171) {
				case 1 :
					// MFortranParser2018.g:2002:20: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_contiguous_stmt8342); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_contiguous_stmt8347);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_contiguous_stmt8356);
			end_of_stmt156=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.contiguous_stmt(lbl, CONTIGUOUS155, end_of_stmt156); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "contiguous_stmt"



	// $ANTLR start "data_stmt"
	// MFortranParser2018.g:2010:1: data_stmt : (lbl= label )? DATA data_stmt_set ( ( COMMA )? data_stmt_set )* end_of_stmt ;
	public final void data_stmt() throws RecognitionException {
		Token DATA157=null;
		Token lbl =null;
		Token end_of_stmt158 =null;


		  int numDSS = 1;

		try {
			// MFortranParser2018.g:2017:5: ( (lbl= label )? DATA data_stmt_set ( ( COMMA )? data_stmt_set )* end_of_stmt )
			// MFortranParser2018.g:2017:7: (lbl= label )? DATA data_stmt_set ( ( COMMA )? data_stmt_set )* end_of_stmt
			{
			// MFortranParser2018.g:2017:7: (lbl= label )?
			int alt172=2;
			int LA172_0 = input.LA(1);
			if ( (LA172_0==DIGIT_STR) ) {
				alt172=1;
			}
			switch (alt172) {
				case 1 :
					// MFortranParser2018.g:2017:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_data_stmt8396);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			DATA157=(Token)match(input,DATA,FOLLOW_DATA_in_data_stmt8408); if (state.failed) return;
			pushFollow(FOLLOW_data_stmt_set_in_data_stmt8410);
			data_stmt_set();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2019:7: ( ( COMMA )? data_stmt_set )*
			loop174:
			while (true) {
				int alt174=2;
				int LA174_0 = input.LA(1);
				if ( (LA174_0==CHAR_CONST||LA174_0==COMMA||LA174_0==DIGIT_STR||LA174_0==IDENT||LA174_0==LPAREN) ) {
					alt174=1;
				}

				switch (alt174) {
				case 1 :
					// MFortranParser2018.g:2019:9: ( COMMA )? data_stmt_set
					{
					// MFortranParser2018.g:2019:9: ( COMMA )?
					int alt173=2;
					int LA173_0 = input.LA(1);
					if ( (LA173_0==COMMA) ) {
						alt173=1;
					}
					switch (alt173) {
						case 1 :
							// MFortranParser2018.g:2019:11: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_data_stmt8423); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_data_stmt_set_in_data_stmt8428);
					data_stmt_set();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDSS++;}
					}
					break;

				default :
					break loop174;
				}
			}

			pushFollow(FOLLOW_end_of_stmt_in_data_stmt8441);
			end_of_stmt158=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.data_stmt(lbl, DATA157, end_of_stmt158, numDSS); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt"



	// $ANTLR start "data_stmt_set"
	// MFortranParser2018.g:2027:1: data_stmt_set : data_stmt_object_list SLASH data_stmt_value_list SLASH ;
	public final void data_stmt_set() throws RecognitionException {
		try {
			// MFortranParser2018.g:2028:5: ( data_stmt_object_list SLASH data_stmt_value_list SLASH )
			// MFortranParser2018.g:2028:7: data_stmt_object_list SLASH data_stmt_value_list SLASH
			{
			pushFollow(FOLLOW_data_stmt_object_list_in_data_stmt_set8468);
			data_stmt_object_list();
			state._fsp--;
			if (state.failed) return;
			match(input,SLASH,FOLLOW_SLASH_in_data_stmt_set8476); if (state.failed) return;
			pushFollow(FOLLOW_data_stmt_value_list_in_data_stmt_set8478);
			data_stmt_value_list();
			state._fsp--;
			if (state.failed) return;
			match(input,SLASH,FOLLOW_SLASH_in_data_stmt_set8480); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.data_stmt_set(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_set"



	// $ANTLR start "data_stmt_object"
	// MFortranParser2018.g:2036:1: data_stmt_object : ( variable | data_implied_do );
	public final void data_stmt_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:2040:5: ( variable | data_implied_do )
			int alt175=2;
			int LA175_0 = input.LA(1);
			if ( (LA175_0==CHAR_CONST||LA175_0==DIGIT_STR||LA175_0==IDENT) ) {
				alt175=1;
			}
			else if ( (LA175_0==LPAREN) ) {
				alt175=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 175, 0, input);
				throw nvae;
			}

			switch (alt175) {
				case 1 :
					// MFortranParser2018.g:2040:7: variable
					{
					pushFollow(FOLLOW_variable_in_data_stmt_object8512);
					variable();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:2041:7: data_implied_do
					{
					pushFollow(FOLLOW_data_implied_do_in_data_stmt_object8520);
					data_implied_do();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			    MFPA.data_stmt_object();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_object"



	// $ANTLR start "data_stmt_object_list"
	// MFortranParser2018.g:2044:1: data_stmt_object_list : data_stmt_object ( COMMA data_stmt_object )* ;
	public final void data_stmt_object_list() throws RecognitionException {

		  int numDSO = 1;

		try {
			// MFortranParser2018.g:2051:5: ( data_stmt_object ( COMMA data_stmt_object )* )
			// MFortranParser2018.g:2051:7: data_stmt_object ( COMMA data_stmt_object )*
			{
			pushFollow(FOLLOW_data_stmt_object_in_data_stmt_object_list8545);
			data_stmt_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2052:7: ( COMMA data_stmt_object )*
			loop176:
			while (true) {
				int alt176=2;
				int LA176_0 = input.LA(1);
				if ( (LA176_0==COMMA) ) {
					alt176=1;
				}

				switch (alt176) {
				case 1 :
					// MFortranParser2018.g:2052:9: COMMA data_stmt_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_data_stmt_object_list8555); if (state.failed) return;
					pushFollow(FOLLOW_data_stmt_object_in_data_stmt_object_list8557);
					data_stmt_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDSO++;}
					}
					break;

				default :
					break loop176;
				}
			}

			}

			if ( state.backtracking==0 ) { 
			  MFPA.data_stmt_object_list(numDSO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_object_list"



	// $ANTLR start "data_implied_do"
	// MFortranParser2018.g:2061:1: data_implied_do : LPAREN data_i_do_object_list COMMA IDENT EQUALS expr COMMA expr ( COMMA expr )? RPAREN ;
	public final void data_implied_do() throws RecognitionException {
		Token IDENT159=null;


		  boolean hasStrd = false;

		try {
			// MFortranParser2018.g:2065:5: ( LPAREN data_i_do_object_list COMMA IDENT EQUALS expr COMMA expr ( COMMA expr )? RPAREN )
			// MFortranParser2018.g:2065:7: LPAREN data_i_do_object_list COMMA IDENT EQUALS expr COMMA expr ( COMMA expr )? RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_data_implied_do8585); if (state.failed) return;
			pushFollow(FOLLOW_data_i_do_object_list_in_data_implied_do8587);
			data_i_do_object_list();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_data_implied_do8596); if (state.failed) return;
			IDENT159=(Token)match(input,IDENT,FOLLOW_IDENT_in_data_implied_do8598); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_data_implied_do8600); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_data_implied_do8602);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_data_implied_do8611); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_data_implied_do8613);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2068:7: ( COMMA expr )?
			int alt177=2;
			int LA177_0 = input.LA(1);
			if ( (LA177_0==COMMA) ) {
				alt177=1;
			}
			switch (alt177) {
				case 1 :
					// MFortranParser2018.g:2068:9: COMMA expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_data_implied_do8624); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_data_implied_do8626);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasStrd = true; }
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_data_implied_do8632); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.data_implied_do(IDENT159, hasStrd); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_implied_do"



	// $ANTLR start "data_i_do_object"
	// MFortranParser2018.g:2076:1: data_i_do_object : ( data_ref | data_implied_do );
	public final void data_i_do_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:2080:5: ( data_ref | data_implied_do )
			int alt178=2;
			int LA178_0 = input.LA(1);
			if ( (LA178_0==IDENT) ) {
				alt178=1;
			}
			else if ( (LA178_0==LPAREN) ) {
				alt178=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 178, 0, input);
				throw nvae;
			}

			switch (alt178) {
				case 1 :
					// MFortranParser2018.g:2080:7: data_ref
					{
					pushFollow(FOLLOW_data_ref_in_data_i_do_object8666);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:2081:7: data_implied_do
					{
					pushFollow(FOLLOW_data_implied_do_in_data_i_do_object8674);
					data_implied_do();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.data_i_do_object();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_i_do_object"



	// $ANTLR start "data_i_do_object_list"
	// MFortranParser2018.g:2084:1: data_i_do_object_list : data_i_do_object ( COMMA data_i_do_object )* ;
	public final void data_i_do_object_list() throws RecognitionException {

		  int numDIDO = 1;

		try {
			// MFortranParser2018.g:2091:5: ( data_i_do_object ( COMMA data_i_do_object )* )
			// MFortranParser2018.g:2091:7: data_i_do_object ( COMMA data_i_do_object )*
			{
			pushFollow(FOLLOW_data_i_do_object_in_data_i_do_object_list8699);
			data_i_do_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2092:7: ( COMMA data_i_do_object )*
			loop179:
			while (true) {
				int alt179=2;
				int LA179_0 = input.LA(1);
				if ( (LA179_0==COMMA) ) {
					int LA179_1 = input.LA(2);
					if ( (LA179_1==IDENT) ) {
						int LA179_2 = input.LA(3);
						if ( (LA179_2==COMMA||LA179_2==LBRACKET||LA179_2==LPAREN||LA179_2==PERCENT) ) {
							alt179=1;
						}

					}
					else if ( (LA179_1==LPAREN) ) {
						alt179=1;
					}

				}

				switch (alt179) {
				case 1 :
					// MFortranParser2018.g:2092:9: COMMA data_i_do_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_data_i_do_object_list8710); if (state.failed) return;
					pushFollow(FOLLOW_data_i_do_object_in_data_i_do_object_list8712);
					data_i_do_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDIDO++;}
					}
					break;

				default :
					break loop179;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.data_i_do_object_list(numDIDO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_i_do_object_list"



	// $ANTLR start "data_stmt_value"
	// MFortranParser2018.g:2110:1: data_stmt_value options {backtrack=true; k=3; } : ( designator ( ASTERISK data_stmt_constant )? | int_literal_constant ( ASTERISK data_stmt_constant )? | signed_int_literal_constant | signed_real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant | structure_constructor );
	public final void data_stmt_value() throws RecognitionException {
		Token ASTERISK160=null;
		Token ASTERISK161=null;


		  Token t = null;

		try {
			// MFortranParser2018.g:2118:5: ( designator ( ASTERISK data_stmt_constant )? | int_literal_constant ( ASTERISK data_stmt_constant )? | signed_int_literal_constant | signed_real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant | structure_constructor )
			int alt182=9;
			switch ( input.LA(1) ) {
			case IDENT:
				{
				switch ( input.LA(2) ) {
				case LPAREN:
					{
					switch ( input.LA(3) ) {
					case NOT:
						{
						int LA182_33 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case PLUS:
						{
						int LA182_34 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case MINUS:
						{
						int LA182_35 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case DEFINED_OP:
						{
						int LA182_36 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case IDENT:
						{
						int LA182_37 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case DIGIT_STR:
						{
						int LA182_38 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case CHAR_CONST:
						{
						int LA182_39 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case M_REAL_CONST:
						{
						int LA182_40 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case LPAREN:
						{
						int LA182_41 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case TRUE:
						{
						int LA182_42 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case FALSE:
						{
						int LA182_43 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case BIN_CONST:
						{
						int LA182_44 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case OCT_CONST:
						{
						int LA182_45 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case HEX_CONST:
						{
						int LA182_46 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case LBRACKET:
						{
						int LA182_47 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case COLON:
						{
						int LA182_48 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					case COLON_COLON:
					case COMMA:
					case RPAREN:
						{
						alt182=1;
						}
						break;
					case ASTERISK:
						{
						int LA182_50 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (true) ) {
							alt182=9;
						}

						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 182, 13, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
					}
					break;
				case CHAR_CONST:
					{
					int LA182_14 = input.LA(3);
					if ( (LA182_14==LPAREN) ) {
						alt182=1;
					}
					else if ( (LA182_14==COMMA||LA182_14==SLASH) ) {
						alt182=7;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 182, 14, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case ASTERISK:
				case COMMA:
				case LBRACKET:
				case PERCENT:
				case SLASH:
					{
					alt182=1;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 182, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case DIGIT_STR:
				{
				int LA182_2 = input.LA(2);
				if ( (LA182_2==UNDERSCORE) ) {
					int LA182_20 = input.LA(3);
					if ( (LA182_20==CHAR_CONST) ) {
						int LA182_56 = input.LA(4);
						if ( (synpred8_MFortranParser2018()) ) {
							alt182=1;
						}
						else if ( (synpred14_MFortranParser2018()) ) {
							alt182=7;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 182, 56, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 182, 20, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (synpred9_MFortranParser2018()) ) {
					alt182=2;
				}
				else if ( (synpred10_MFortranParser2018()) ) {
					alt182=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 182, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CHAR_CONST:
				{
				int LA182_3 = input.LA(2);
				if ( (LA182_3==LPAREN) ) {
					alt182=1;
				}
				else if ( (LA182_3==COMMA||LA182_3==SLASH) ) {
					alt182=7;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 182, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case PLUS:
				{
				int LA182_4 = input.LA(2);
				if ( (LA182_4==DIGIT_STR) ) {
					alt182=3;
				}
				else if ( (LA182_4==M_REAL_CONST) ) {
					alt182=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 182, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case MINUS:
				{
				int LA182_5 = input.LA(2);
				if ( (LA182_5==DIGIT_STR) ) {
					alt182=3;
				}
				else if ( (LA182_5==M_REAL_CONST) ) {
					alt182=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 182, 5, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_REAL_CONST:
				{
				alt182=4;
				}
				break;
			case LPAREN:
				{
				alt182=5;
				}
				break;
			case FALSE:
			case TRUE:
				{
				alt182=6;
				}
				break;
			case BIN_CONST:
			case HEX_CONST:
			case OCT_CONST:
				{
				alt182=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 182, 0, input);
				throw nvae;
			}
			switch (alt182) {
				case 1 :
					// MFortranParser2018.g:2118:7: designator ( ASTERISK data_stmt_constant )?
					{
					pushFollow(FOLLOW_designator_in_data_stmt_value8757);
					designator();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:2118:18: ( ASTERISK data_stmt_constant )?
					int alt180=2;
					int LA180_0 = input.LA(1);
					if ( (LA180_0==ASTERISK) ) {
						alt180=1;
					}
					switch (alt180) {
						case 1 :
							// MFortranParser2018.g:2118:19: ASTERISK data_stmt_constant
							{
							ASTERISK160=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_data_stmt_value8760); if (state.failed) return;
							pushFollow(FOLLOW_data_stmt_constant_in_data_stmt_value8762);
							data_stmt_constant();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {t=ASTERISK160;}
							}
							break;

					}

					}
					break;
				case 2 :
					// MFortranParser2018.g:2119:7: int_literal_constant ( ASTERISK data_stmt_constant )?
					{
					pushFollow(FOLLOW_int_literal_constant_in_data_stmt_value8774);
					int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:2119:28: ( ASTERISK data_stmt_constant )?
					int alt181=2;
					int LA181_0 = input.LA(1);
					if ( (LA181_0==ASTERISK) ) {
						alt181=1;
					}
					switch (alt181) {
						case 1 :
							// MFortranParser2018.g:2119:29: ASTERISK data_stmt_constant
							{
							ASTERISK161=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_data_stmt_value8777); if (state.failed) return;
							pushFollow(FOLLOW_data_stmt_constant_in_data_stmt_value8779);
							data_stmt_constant();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {t=ASTERISK161;}
							}
							break;

					}

					}
					break;
				case 3 :
					// MFortranParser2018.g:2120:7: signed_int_literal_constant
					{
					pushFollow(FOLLOW_signed_int_literal_constant_in_data_stmt_value8791);
					signed_int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:2121:7: signed_real_literal_constant
					{
					pushFollow(FOLLOW_signed_real_literal_constant_in_data_stmt_value8799);
					signed_real_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:2122:7: complex_literal_constant
					{
					pushFollow(FOLLOW_complex_literal_constant_in_data_stmt_value8807);
					complex_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:2123:7: logical_literal_constant
					{
					pushFollow(FOLLOW_logical_literal_constant_in_data_stmt_value8815);
					logical_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:2124:7: char_literal_constant
					{
					pushFollow(FOLLOW_char_literal_constant_in_data_stmt_value8823);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:2125:7: boz_literal_constant
					{
					pushFollow(FOLLOW_boz_literal_constant_in_data_stmt_value8831);
					boz_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 9 :
					// MFortranParser2018.g:2126:7: structure_constructor
					{
					pushFollow(FOLLOW_structure_constructor_in_data_stmt_value8839);
					structure_constructor();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.data_stmt_value(t);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_value"



	// $ANTLR start "data_stmt_value_list"
	// MFortranParser2018.g:2129:1: data_stmt_value_list : data_stmt_value ( COMMA data_stmt_value )* ;
	public final void data_stmt_value_list() throws RecognitionException {

		  int numDSV = 1;

		try {
			// MFortranParser2018.g:2136:5: ( data_stmt_value ( COMMA data_stmt_value )* )
			// MFortranParser2018.g:2136:7: data_stmt_value ( COMMA data_stmt_value )*
			{
			pushFollow(FOLLOW_data_stmt_value_in_data_stmt_value_list8864);
			data_stmt_value();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2137:7: ( COMMA data_stmt_value )*
			loop183:
			while (true) {
				int alt183=2;
				int LA183_0 = input.LA(1);
				if ( (LA183_0==COMMA) ) {
					alt183=1;
				}

				switch (alt183) {
				case 1 :
					// MFortranParser2018.g:2137:9: COMMA data_stmt_value
					{
					match(input,COMMA,FOLLOW_COMMA_in_data_stmt_value_list8874); if (state.failed) return;
					pushFollow(FOLLOW_data_stmt_value_in_data_stmt_value_list8876);
					data_stmt_value();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDSV++;}
					}
					break;

				default :
					break loop183;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.data_stmt_value_list(numDSV);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_value_list"



	// $ANTLR start "data_stmt_constant"
	// MFortranParser2018.g:2148:1: data_stmt_constant options {backtrack=true; k=3; } : ( designator | signed_int_literal_constant | signed_real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant | structure_constructor );
	public final void data_stmt_constant() throws RecognitionException {
		try {
			// MFortranParser2018.g:2153:5: ( designator | signed_int_literal_constant | signed_real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant | structure_constructor )
			int alt184=8;
			alt184 = dfa184.predict(input);
			switch (alt184) {
				case 1 :
					// MFortranParser2018.g:2153:7: designator
					{
					pushFollow(FOLLOW_designator_in_data_stmt_constant8917);
					designator();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:2154:7: signed_int_literal_constant
					{
					pushFollow(FOLLOW_signed_int_literal_constant_in_data_stmt_constant8925);
					signed_int_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:2155:7: signed_real_literal_constant
					{
					pushFollow(FOLLOW_signed_real_literal_constant_in_data_stmt_constant8933);
					signed_real_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:2156:7: complex_literal_constant
					{
					pushFollow(FOLLOW_complex_literal_constant_in_data_stmt_constant8941);
					complex_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:2157:7: logical_literal_constant
					{
					pushFollow(FOLLOW_logical_literal_constant_in_data_stmt_constant8949);
					logical_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:2158:7: char_literal_constant
					{
					pushFollow(FOLLOW_char_literal_constant_in_data_stmt_constant8957);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:2159:7: boz_literal_constant
					{
					pushFollow(FOLLOW_boz_literal_constant_in_data_stmt_constant8965);
					boz_literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:2160:7: structure_constructor
					{
					pushFollow(FOLLOW_structure_constructor_in_data_stmt_constant8973);
					structure_constructor();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.data_stmt_constant();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_stmt_constant"



	// $ANTLR start "dimension_stmt"
	// MFortranParser2018.g:2166:1: dimension_stmt : (lbl= label )? DIMENSION ( COLON_COLON )? dimension_decl ( COMMA dimension_decl )* end_of_stmt ;
	public final void dimension_stmt() throws RecognitionException {
		Token DIMENSION162=null;
		Token lbl =null;
		Token end_of_stmt163 =null;


		  int numDD = 1;

		try {
			// MFortranParser2018.g:2173:5: ( (lbl= label )? DIMENSION ( COLON_COLON )? dimension_decl ( COMMA dimension_decl )* end_of_stmt )
			// MFortranParser2018.g:2173:7: (lbl= label )? DIMENSION ( COLON_COLON )? dimension_decl ( COMMA dimension_decl )* end_of_stmt
			{
			// MFortranParser2018.g:2173:7: (lbl= label )?
			int alt185=2;
			int LA185_0 = input.LA(1);
			if ( (LA185_0==DIGIT_STR) ) {
				alt185=1;
			}
			switch (alt185) {
				case 1 :
					// MFortranParser2018.g:2173:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_dimension_stmt9004);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			DIMENSION162=(Token)match(input,DIMENSION,FOLLOW_DIMENSION_in_dimension_stmt9015); if (state.failed) return;
			// MFortranParser2018.g:2174:17: ( COLON_COLON )?
			int alt186=2;
			int LA186_0 = input.LA(1);
			if ( (LA186_0==COLON_COLON) ) {
				alt186=1;
			}
			switch (alt186) {
				case 1 :
					// MFortranParser2018.g:2174:19: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_dimension_stmt9019); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_dimension_decl_in_dimension_stmt9031);
			dimension_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2175:22: ( COMMA dimension_decl )*
			loop187:
			while (true) {
				int alt187=2;
				int LA187_0 = input.LA(1);
				if ( (LA187_0==COMMA) ) {
					alt187=1;
				}

				switch (alt187) {
				case 1 :
					// MFortranParser2018.g:2175:24: COMMA dimension_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_dimension_stmt9035); if (state.failed) return;
					pushFollow(FOLLOW_dimension_decl_in_dimension_stmt9037);
					dimension_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDD++;}
					}
					break;

				default :
					break loop187;
				}
			}

			pushFollow(FOLLOW_end_of_stmt_in_dimension_stmt9050);
			end_of_stmt163=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.dimension_stmt(lbl, DIMENSION162, end_of_stmt163, numDD); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dimension_stmt"



	// $ANTLR start "dimension_decl"
	// MFortranParser2018.g:2180:1: dimension_decl : IDENT LPAREN array_spec RPAREN ;
	public final void dimension_decl() throws RecognitionException {
		Token IDENT164=null;

		try {
			// MFortranParser2018.g:2181:5: ( IDENT LPAREN array_spec RPAREN )
			// MFortranParser2018.g:2181:7: IDENT LPAREN array_spec RPAREN
			{
			IDENT164=(Token)match(input,IDENT,FOLLOW_IDENT_in_dimension_decl9077); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_dimension_decl9079); if (state.failed) return;
			pushFollow(FOLLOW_array_spec_in_dimension_decl9081);
			array_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_dimension_decl9083); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.dimension_decl(IDENT164);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dimension_decl"



	// $ANTLR start "intent_stmt"
	// MFortranParser2018.g:2189:1: intent_stmt : (lbl= label )? INTENT LPAREN intent_spec RPAREN ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void intent_stmt() throws RecognitionException {
		Token INTENT165=null;
		Token lbl =null;
		Token end_of_stmt166 =null;



		try {
			// MFortranParser2018.g:2195:5: ( (lbl= label )? INTENT LPAREN intent_spec RPAREN ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2195:7: (lbl= label )? INTENT LPAREN intent_spec RPAREN ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2195:7: (lbl= label )?
			int alt188=2;
			int LA188_0 = input.LA(1);
			if ( (LA188_0==DIGIT_STR) ) {
				alt188=1;
			}
			switch (alt188) {
				case 1 :
					// MFortranParser2018.g:2195:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_intent_stmt9123);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			INTENT165=(Token)match(input,INTENT,FOLLOW_INTENT_in_intent_stmt9135); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_intent_stmt9137); if (state.failed) return;
			pushFollow(FOLLOW_intent_spec_in_intent_stmt9139);
			intent_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_intent_stmt9141); if (state.failed) return;
			// MFortranParser2018.g:2196:40: ( COLON_COLON )?
			int alt189=2;
			int LA189_0 = input.LA(1);
			if ( (LA189_0==COLON_COLON) ) {
				alt189=1;
			}
			switch (alt189) {
				case 1 :
					// MFortranParser2018.g:2196:42: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_intent_stmt9145); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_intent_stmt9150);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_intent_stmt9159);
			end_of_stmt166=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.intent_stmt(lbl,INTENT165,end_of_stmt166);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "intent_stmt"



	// $ANTLR start "optional_stmt"
	// MFortranParser2018.g:2205:1: optional_stmt : (lbl= label )? OPTIONAL ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void optional_stmt() throws RecognitionException {
		Token OPTIONAL167=null;
		Token lbl =null;
		Token end_of_stmt168 =null;



		try {
			// MFortranParser2018.g:2211:5: ( (lbl= label )? OPTIONAL ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2211:7: (lbl= label )? OPTIONAL ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2211:7: (lbl= label )?
			int alt190=2;
			int LA190_0 = input.LA(1);
			if ( (LA190_0==DIGIT_STR) ) {
				alt190=1;
			}
			switch (alt190) {
				case 1 :
					// MFortranParser2018.g:2211:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_optional_stmt9200);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			OPTIONAL167=(Token)match(input,OPTIONAL,FOLLOW_OPTIONAL_in_optional_stmt9212); if (state.failed) return;
			// MFortranParser2018.g:2212:16: ( COLON_COLON )?
			int alt191=2;
			int LA191_0 = input.LA(1);
			if ( (LA191_0==COLON_COLON) ) {
				alt191=1;
			}
			switch (alt191) {
				case 1 :
					// MFortranParser2018.g:2212:18: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_optional_stmt9216); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_optional_stmt9221);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_optional_stmt9230);
			end_of_stmt168=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.optional_stmt(lbl, OPTIONAL167, end_of_stmt168); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "optional_stmt"



	// $ANTLR start "parameter_stmt"
	// MFortranParser2018.g:2220:1: parameter_stmt : (lbl= label )? PARAMETER LPAREN named_constant_def_list RPAREN end_of_stmt ;
	public final void parameter_stmt() throws RecognitionException {
		Token PARAMETER169=null;
		Token lbl =null;
		Token end_of_stmt170 =null;



		try {
			// MFortranParser2018.g:2226:5: ( (lbl= label )? PARAMETER LPAREN named_constant_def_list RPAREN end_of_stmt )
			// MFortranParser2018.g:2226:7: (lbl= label )? PARAMETER LPAREN named_constant_def_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:2226:7: (lbl= label )?
			int alt192=2;
			int LA192_0 = input.LA(1);
			if ( (LA192_0==DIGIT_STR) ) {
				alt192=1;
			}
			switch (alt192) {
				case 1 :
					// MFortranParser2018.g:2226:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_parameter_stmt9270);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PARAMETER169=(Token)match(input,PARAMETER,FOLLOW_PARAMETER_in_parameter_stmt9281); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_parameter_stmt9283); if (state.failed) return;
			pushFollow(FOLLOW_named_constant_def_list_in_parameter_stmt9285);
			named_constant_def_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_parameter_stmt9287); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_parameter_stmt9295);
			end_of_stmt170=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.parameter_stmt(lbl,PARAMETER169,end_of_stmt170);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "parameter_stmt"



	// $ANTLR start "named_constant_def"
	// MFortranParser2018.g:2237:1: named_constant_def : IDENT EQUALS expr ;
	public final void named_constant_def() throws RecognitionException {
		Token IDENT171=null;

		try {
			// MFortranParser2018.g:2238:5: ( IDENT EQUALS expr )
			// MFortranParser2018.g:2238:7: IDENT EQUALS expr
			{
			IDENT171=(Token)match(input,IDENT,FOLLOW_IDENT_in_named_constant_def9324); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_named_constant_def9326); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_named_constant_def9328);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.named_constant_def(IDENT171);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "named_constant_def"



	// $ANTLR start "named_constant_def_list"
	// MFortranParser2018.g:2242:1: named_constant_def_list : named_constant_def ( COMMA named_constant_def )* ;
	public final void named_constant_def_list() throws RecognitionException {

		  int numNCD = 1;

		try {
			// MFortranParser2018.g:2249:5: ( named_constant_def ( COMMA named_constant_def )* )
			// MFortranParser2018.g:2249:7: named_constant_def ( COMMA named_constant_def )*
			{
			pushFollow(FOLLOW_named_constant_def_in_named_constant_def_list9363);
			named_constant_def();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2250:7: ( COMMA named_constant_def )*
			loop193:
			while (true) {
				int alt193=2;
				int LA193_0 = input.LA(1);
				if ( (LA193_0==COMMA) ) {
					alt193=1;
				}

				switch (alt193) {
				case 1 :
					// MFortranParser2018.g:2250:9: COMMA named_constant_def
					{
					match(input,COMMA,FOLLOW_COMMA_in_named_constant_def_list9373); if (state.failed) return;
					pushFollow(FOLLOW_named_constant_def_in_named_constant_def_list9375);
					named_constant_def();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numNCD++;}
					}
					break;

				default :
					break loop193;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.named_constant_def_list(numNCD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "named_constant_def_list"



	// $ANTLR start "pointer_stmt"
	// MFortranParser2018.g:2256:1: pointer_stmt : (lbl= label )? POINTER ( cray_pointer_assoc_list | ( ( COLON_COLON )? pointer_decl_list ) ) end_of_stmt ;
	public final void pointer_stmt() throws RecognitionException {
		Token POINTER172=null;
		Token lbl =null;
		Token end_of_stmt173 =null;


		  boolean isCrayPointer=false;

		try {
			// MFortranParser2018.g:2263:5: ( (lbl= label )? POINTER ( cray_pointer_assoc_list | ( ( COLON_COLON )? pointer_decl_list ) ) end_of_stmt )
			// MFortranParser2018.g:2263:7: (lbl= label )? POINTER ( cray_pointer_assoc_list | ( ( COLON_COLON )? pointer_decl_list ) ) end_of_stmt
			{
			// MFortranParser2018.g:2263:7: (lbl= label )?
			int alt194=2;
			int LA194_0 = input.LA(1);
			if ( (LA194_0==DIGIT_STR) ) {
				alt194=1;
			}
			switch (alt194) {
				case 1 :
					// MFortranParser2018.g:2263:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_pointer_stmt9410);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			POINTER172=(Token)match(input,POINTER,FOLLOW_POINTER_in_pointer_stmt9422); if (state.failed) return;
			// MFortranParser2018.g:2265:7: ( cray_pointer_assoc_list | ( ( COLON_COLON )? pointer_decl_list ) )
			int alt196=2;
			int LA196_0 = input.LA(1);
			if ( (LA196_0==LPAREN) ) {
				alt196=1;
			}
			else if ( (LA196_0==COLON_COLON||LA196_0==IDENT) ) {
				alt196=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 196, 0, input);
				throw nvae;
			}

			switch (alt196) {
				case 1 :
					// MFortranParser2018.g:2265:9: cray_pointer_assoc_list
					{
					pushFollow(FOLLOW_cray_pointer_assoc_list_in_pointer_stmt9432);
					cray_pointer_assoc_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {isCrayPointer = true;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2266:9: ( ( COLON_COLON )? pointer_decl_list )
					{
					// MFortranParser2018.g:2266:9: ( ( COLON_COLON )? pointer_decl_list )
					// MFortranParser2018.g:2266:11: ( COLON_COLON )? pointer_decl_list
					{
					// MFortranParser2018.g:2266:11: ( COLON_COLON )?
					int alt195=2;
					int LA195_0 = input.LA(1);
					if ( (LA195_0==COLON_COLON) ) {
						alt195=1;
					}
					switch (alt195) {
						case 1 :
							// MFortranParser2018.g:2266:13: COLON_COLON
							{
							match(input,COLON_COLON,FOLLOW_COLON_COLON_in_pointer_stmt9449); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_pointer_decl_list_in_pointer_stmt9454);
					pointer_decl_list();
					state._fsp--;
					if (state.failed) return;
					}

					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_pointer_stmt9473);
			end_of_stmt173=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { if (isCrayPointer) {
			            MFPA.cray_pointer_stmt(lbl,POINTER172,end_of_stmt173);
			          } else {
			            MFPA.pointer_stmt(lbl,POINTER172,end_of_stmt173);
			          }
			        }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_stmt"



	// $ANTLR start "pointer_decl"
	// MFortranParser2018.g:2282:1: pointer_decl : IDENT ( LPAREN deferred_shape_spec_list RPAREN )? ;
	public final void pointer_decl() throws RecognitionException {
		Token IDENT174=null;


		  boolean hasSL = false;

		try {
			// MFortranParser2018.g:2286:5: ( IDENT ( LPAREN deferred_shape_spec_list RPAREN )? )
			// MFortranParser2018.g:2286:7: IDENT ( LPAREN deferred_shape_spec_list RPAREN )?
			{
			IDENT174=(Token)match(input,IDENT,FOLLOW_IDENT_in_pointer_decl9506); if (state.failed) return;
			// MFortranParser2018.g:2287:7: ( LPAREN deferred_shape_spec_list RPAREN )?
			int alt197=2;
			int LA197_0 = input.LA(1);
			if ( (LA197_0==LPAREN) ) {
				alt197=1;
			}
			switch (alt197) {
				case 1 :
					// MFortranParser2018.g:2287:9: LPAREN deferred_shape_spec_list RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_pointer_decl9517); if (state.failed) return;
					pushFollow(FOLLOW_deferred_shape_spec_list_in_pointer_decl9519);
					deferred_shape_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_pointer_decl9521); if (state.failed) return;
					if ( state.backtracking==0 ) {hasSL=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.pointer_decl(IDENT174,hasSL);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_decl"



	// $ANTLR start "cray_pointer_assoc"
	// MFortranParser2018.g:2291:1: cray_pointer_assoc : LPAREN pointer= IDENT COMMA pointee= IDENT RPAREN ;
	public final void cray_pointer_assoc() throws RecognitionException {
		Token pointer=null;
		Token pointee=null;

		try {
			// MFortranParser2018.g:2292:5: ( LPAREN pointer= IDENT COMMA pointee= IDENT RPAREN )
			// MFortranParser2018.g:2292:7: LPAREN pointer= IDENT COMMA pointee= IDENT RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_cray_pointer_assoc9552); if (state.failed) return;
			pointer=(Token)match(input,IDENT,FOLLOW_IDENT_in_cray_pointer_assoc9556); if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_cray_pointer_assoc9558); if (state.failed) return;
			pointee=(Token)match(input,IDENT,FOLLOW_IDENT_in_cray_pointer_assoc9562); if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_cray_pointer_assoc9564); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.cray_pointer_assoc(pointer, pointee);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "cray_pointer_assoc"



	// $ANTLR start "pointer_decl_list"
	// MFortranParser2018.g:2296:1: pointer_decl_list : pointer_decl ( COMMA pointer_decl )* ;
	public final void pointer_decl_list() throws RecognitionException {

		  int numPD = 1;

		try {
			// MFortranParser2018.g:2303:5: ( pointer_decl ( COMMA pointer_decl )* )
			// MFortranParser2018.g:2303:7: pointer_decl ( COMMA pointer_decl )*
			{
			pushFollow(FOLLOW_pointer_decl_in_pointer_decl_list9599);
			pointer_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2304:7: ( COMMA pointer_decl )*
			loop198:
			while (true) {
				int alt198=2;
				int LA198_0 = input.LA(1);
				if ( (LA198_0==COMMA) ) {
					alt198=1;
				}

				switch (alt198) {
				case 1 :
					// MFortranParser2018.g:2304:9: COMMA pointer_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_pointer_decl_list9609); if (state.failed) return;
					pushFollow(FOLLOW_pointer_decl_in_pointer_decl_list9611);
					pointer_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPD++;}
					}
					break;

				default :
					break loop198;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.pointer_decl_list(numPD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_decl_list"



	// $ANTLR start "cray_pointer_assoc_list"
	// MFortranParser2018.g:2307:1: cray_pointer_assoc_list : cray_pointer_assoc ( COMMA cray_pointer_assoc )* ;
	public final void cray_pointer_assoc_list() throws RecognitionException {

		  int numCPA = 1;

		try {
			// MFortranParser2018.g:2314:5: ( cray_pointer_assoc ( COMMA cray_pointer_assoc )* )
			// MFortranParser2018.g:2314:7: cray_pointer_assoc ( COMMA cray_pointer_assoc )*
			{
			pushFollow(FOLLOW_cray_pointer_assoc_in_cray_pointer_assoc_list9641);
			cray_pointer_assoc();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2315:7: ( COMMA cray_pointer_assoc )*
			loop199:
			while (true) {
				int alt199=2;
				int LA199_0 = input.LA(1);
				if ( (LA199_0==COMMA) ) {
					alt199=1;
				}

				switch (alt199) {
				case 1 :
					// MFortranParser2018.g:2315:9: COMMA cray_pointer_assoc
					{
					match(input,COMMA,FOLLOW_COMMA_in_cray_pointer_assoc_list9651); if (state.failed) return;
					pushFollow(FOLLOW_cray_pointer_assoc_in_cray_pointer_assoc_list9653);
					cray_pointer_assoc();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCPA++;}
					}
					break;

				default :
					break loop199;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.cray_pointer_assoc_list(numCPA);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "cray_pointer_assoc_list"



	// $ANTLR start "protected_stmt"
	// MFortranParser2018.g:2322:1: protected_stmt : (lbl= label )? PROTECTED ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void protected_stmt() throws RecognitionException {
		Token PROTECTED175=null;
		Token lbl =null;
		Token end_of_stmt176 =null;



		try {
			// MFortranParser2018.g:2328:5: ( (lbl= label )? PROTECTED ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2328:7: (lbl= label )? PROTECTED ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2328:7: (lbl= label )?
			int alt200=2;
			int LA200_0 = input.LA(1);
			if ( (LA200_0==DIGIT_STR) ) {
				alt200=1;
			}
			switch (alt200) {
				case 1 :
					// MFortranParser2018.g:2328:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_protected_stmt9688);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PROTECTED175=(Token)match(input,PROTECTED,FOLLOW_PROTECTED_in_protected_stmt9699); if (state.failed) return;
			// MFortranParser2018.g:2329:17: ( COLON_COLON )?
			int alt201=2;
			int LA201_0 = input.LA(1);
			if ( (LA201_0==COLON_COLON) ) {
				alt201=1;
			}
			switch (alt201) {
				case 1 :
					// MFortranParser2018.g:2329:19: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_protected_stmt9703); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_protected_stmt9708);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_protected_stmt9716);
			end_of_stmt176=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.protected_stmt(lbl,PROTECTED175,end_of_stmt176);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "protected_stmt"



	// $ANTLR start "save_stmt"
	// MFortranParser2018.g:2337:1: save_stmt : (lbl= label )? SAVE ( ( COLON_COLON )? saved_entity_list )? end_of_stmt ;
	public final void save_stmt() throws RecognitionException {
		Token SAVE177=null;
		Token lbl =null;
		Token end_of_stmt178 =null;


		  boolean hasSEL = false;

		try {
			// MFortranParser2018.g:2344:5: ( (lbl= label )? SAVE ( ( COLON_COLON )? saved_entity_list )? end_of_stmt )
			// MFortranParser2018.g:2344:7: (lbl= label )? SAVE ( ( COLON_COLON )? saved_entity_list )? end_of_stmt
			{
			// MFortranParser2018.g:2344:7: (lbl= label )?
			int alt202=2;
			int LA202_0 = input.LA(1);
			if ( (LA202_0==DIGIT_STR) ) {
				alt202=1;
			}
			switch (alt202) {
				case 1 :
					// MFortranParser2018.g:2344:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_save_stmt9756);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			SAVE177=(Token)match(input,SAVE,FOLLOW_SAVE_in_save_stmt9768); if (state.failed) return;
			// MFortranParser2018.g:2345:12: ( ( COLON_COLON )? saved_entity_list )?
			int alt204=2;
			int LA204_0 = input.LA(1);
			if ( (LA204_0==COLON_COLON||LA204_0==IDENT||LA204_0==SLASH) ) {
				alt204=1;
			}
			switch (alt204) {
				case 1 :
					// MFortranParser2018.g:2345:14: ( COLON_COLON )? saved_entity_list
					{
					// MFortranParser2018.g:2345:14: ( COLON_COLON )?
					int alt203=2;
					int LA203_0 = input.LA(1);
					if ( (LA203_0==COLON_COLON) ) {
						alt203=1;
					}
					switch (alt203) {
						case 1 :
							// MFortranParser2018.g:2345:16: COLON_COLON
							{
							match(input,COLON_COLON,FOLLOW_COLON_COLON_in_save_stmt9774); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_saved_entity_list_in_save_stmt9779);
					saved_entity_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasSEL=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_save_stmt9793);
			end_of_stmt178=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.save_stmt(lbl,SAVE177,end_of_stmt178,hasSEL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "save_stmt"



	// $ANTLR start "saved_entity"
	// MFortranParser2018.g:2357:1: saved_entity : (id= IDENT | SLASH id= IDENT SLASH );
	public final void saved_entity() throws RecognitionException {
		Token id=null;

		try {
			// MFortranParser2018.g:2358:5: (id= IDENT | SLASH id= IDENT SLASH )
			int alt205=2;
			int LA205_0 = input.LA(1);
			if ( (LA205_0==IDENT) ) {
				alt205=1;
			}
			else if ( (LA205_0==SLASH) ) {
				alt205=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 205, 0, input);
				throw nvae;
			}

			switch (alt205) {
				case 1 :
					// MFortranParser2018.g:2358:7: id= IDENT
					{
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_saved_entity9824); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.saved_entity(id, false);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2360:7: SLASH id= IDENT SLASH
					{
					match(input,SLASH,FOLLOW_SLASH_in_saved_entity9842); if (state.failed) return;
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_saved_entity9846); if (state.failed) return;
					match(input,SLASH,FOLLOW_SLASH_in_saved_entity9848); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.saved_entity(id, true);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "saved_entity"



	// $ANTLR start "saved_entity_list"
	// MFortranParser2018.g:2364:1: saved_entity_list : saved_entity ( COMMA saved_entity )* ;
	public final void saved_entity_list() throws RecognitionException {

		  int numSE = 1;

		try {
			// MFortranParser2018.g:2371:5: ( saved_entity ( COMMA saved_entity )* )
			// MFortranParser2018.g:2371:7: saved_entity ( COMMA saved_entity )*
			{
			pushFollow(FOLLOW_saved_entity_in_saved_entity_list9884);
			saved_entity();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2372:7: ( COMMA saved_entity )*
			loop206:
			while (true) {
				int alt206=2;
				int LA206_0 = input.LA(1);
				if ( (LA206_0==COMMA) ) {
					alt206=1;
				}

				switch (alt206) {
				case 1 :
					// MFortranParser2018.g:2372:9: COMMA saved_entity
					{
					match(input,COMMA,FOLLOW_COMMA_in_saved_entity_list9894); if (state.failed) return;
					pushFollow(FOLLOW_saved_entity_in_saved_entity_list9896);
					saved_entity();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numSE++;}
					}
					break;

				default :
					break loop206;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.saved_entity_list(numSE);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "saved_entity_list"



	// $ANTLR start "target_stmt"
	// MFortranParser2018.g:2379:1: target_stmt : (lbl= label )? TARGET ( COLON_COLON )? target_decl_list end_of_stmt ;
	public final void target_stmt() throws RecognitionException {
		Token TARGET179=null;
		Token lbl =null;
		Token end_of_stmt180 =null;



		try {
			// MFortranParser2018.g:2385:5: ( (lbl= label )? TARGET ( COLON_COLON )? target_decl_list end_of_stmt )
			// MFortranParser2018.g:2385:7: (lbl= label )? TARGET ( COLON_COLON )? target_decl_list end_of_stmt
			{
			// MFortranParser2018.g:2385:7: (lbl= label )?
			int alt207=2;
			int LA207_0 = input.LA(1);
			if ( (LA207_0==DIGIT_STR) ) {
				alt207=1;
			}
			switch (alt207) {
				case 1 :
					// MFortranParser2018.g:2385:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_target_stmt9931);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			TARGET179=(Token)match(input,TARGET,FOLLOW_TARGET_in_target_stmt9942); if (state.failed) return;
			// MFortranParser2018.g:2386:14: ( COLON_COLON )?
			int alt208=2;
			int LA208_0 = input.LA(1);
			if ( (LA208_0==COLON_COLON) ) {
				alt208=1;
			}
			switch (alt208) {
				case 1 :
					// MFortranParser2018.g:2386:16: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_target_stmt9946); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_target_decl_list_in_target_stmt9951);
			target_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_target_stmt9959);
			end_of_stmt180=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.target_stmt(lbl,TARGET179,end_of_stmt180);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "target_stmt"



	// $ANTLR start "target_decl"
	// MFortranParser2018.g:2394:1: target_decl : IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? ;
	public final void target_decl() throws RecognitionException {
		Token IDENT181=null;


		  boolean hasAS=false;
		  boolean hasCS=false;

		try {
			// MFortranParser2018.g:2399:5: ( IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )? )
			// MFortranParser2018.g:2399:7: IDENT ( LPAREN array_spec RPAREN )? ( LBRACKET coarray_spec RBRACKET )?
			{
			IDENT181=(Token)match(input,IDENT,FOLLOW_IDENT_in_target_decl9992); if (state.failed) return;
			// MFortranParser2018.g:2400:7: ( LPAREN array_spec RPAREN )?
			int alt209=2;
			int LA209_0 = input.LA(1);
			if ( (LA209_0==LPAREN) ) {
				alt209=1;
			}
			switch (alt209) {
				case 1 :
					// MFortranParser2018.g:2400:8: LPAREN array_spec RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_target_decl10002); if (state.failed) return;
					pushFollow(FOLLOW_array_spec_in_target_decl10004);
					array_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_target_decl10006); if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					}
					break;

			}

			// MFortranParser2018.g:2401:7: ( LBRACKET coarray_spec RBRACKET )?
			int alt210=2;
			int LA210_0 = input.LA(1);
			if ( (LA210_0==LBRACKET) ) {
				alt210=1;
			}
			switch (alt210) {
				case 1 :
					// MFortranParser2018.g:2401:8: LBRACKET coarray_spec RBRACKET
					{
					match(input,LBRACKET,FOLLOW_LBRACKET_in_target_decl10020); if (state.failed) return;
					pushFollow(FOLLOW_coarray_spec_in_target_decl10022);
					coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_target_decl10024); if (state.failed) return;
					if ( state.backtracking==0 ) {hasCS=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.target_decl(IDENT181,hasAS,hasCS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "target_decl"



	// $ANTLR start "target_decl_list"
	// MFortranParser2018.g:2405:1: target_decl_list : target_decl ( COMMA target_decl )* ;
	public final void target_decl_list() throws RecognitionException {

		  int numTD = 1;

		try {
			// MFortranParser2018.g:2412:5: ( target_decl ( COMMA target_decl )* )
			// MFortranParser2018.g:2412:7: target_decl ( COMMA target_decl )*
			{
			pushFollow(FOLLOW_target_decl_in_target_decl_list10064);
			target_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2413:7: ( COMMA target_decl )*
			loop211:
			while (true) {
				int alt211=2;
				int LA211_0 = input.LA(1);
				if ( (LA211_0==COMMA) ) {
					alt211=1;
				}

				switch (alt211) {
				case 1 :
					// MFortranParser2018.g:2413:9: COMMA target_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_target_decl_list10075); if (state.failed) return;
					pushFollow(FOLLOW_target_decl_in_target_decl_list10077);
					target_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numTD++;}
					}
					break;

				default :
					break loop211;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.target_decl_list(numTD);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "target_decl_list"



	// $ANTLR start "value_stmt"
	// MFortranParser2018.g:2420:1: value_stmt : (lbl= label )? VALUE ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void value_stmt() throws RecognitionException {
		Token VALUE182=null;
		Token lbl =null;
		Token end_of_stmt183 =null;



		try {
			// MFortranParser2018.g:2426:5: ( (lbl= label )? VALUE ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2426:7: (lbl= label )? VALUE ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2426:7: (lbl= label )?
			int alt212=2;
			int LA212_0 = input.LA(1);
			if ( (LA212_0==DIGIT_STR) ) {
				alt212=1;
			}
			switch (alt212) {
				case 1 :
					// MFortranParser2018.g:2426:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_value_stmt10112);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			VALUE182=(Token)match(input,VALUE,FOLLOW_VALUE_in_value_stmt10123); if (state.failed) return;
			// MFortranParser2018.g:2427:13: ( COLON_COLON )?
			int alt213=2;
			int LA213_0 = input.LA(1);
			if ( (LA213_0==COLON_COLON) ) {
				alt213=1;
			}
			switch (alt213) {
				case 1 :
					// MFortranParser2018.g:2427:15: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_value_stmt10127); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_value_stmt10132);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_value_stmt10141);
			end_of_stmt183=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.value_stmt(lbl,VALUE182,end_of_stmt183);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "value_stmt"



	// $ANTLR start "volatile_stmt"
	// MFortranParser2018.g:2436:1: volatile_stmt : (lbl= label )? VOLATILE ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void volatile_stmt() throws RecognitionException {
		Token VOLATILE184=null;
		Token lbl =null;
		Token end_of_stmt185 =null;



		try {
			// MFortranParser2018.g:2442:5: ( (lbl= label )? VOLATILE ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:2442:7: (lbl= label )? VOLATILE ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:2442:7: (lbl= label )?
			int alt214=2;
			int LA214_0 = input.LA(1);
			if ( (LA214_0==DIGIT_STR) ) {
				alt214=1;
			}
			switch (alt214) {
				case 1 :
					// MFortranParser2018.g:2442:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_volatile_stmt10181);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			VOLATILE184=(Token)match(input,VOLATILE,FOLLOW_VOLATILE_in_volatile_stmt10193); if (state.failed) return;
			// MFortranParser2018.g:2443:16: ( COLON_COLON )?
			int alt215=2;
			int LA215_0 = input.LA(1);
			if ( (LA215_0==COLON_COLON) ) {
				alt215=1;
			}
			switch (alt215) {
				case 1 :
					// MFortranParser2018.g:2443:18: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_volatile_stmt10197); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_volatile_stmt10202);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_volatile_stmt10211);
			end_of_stmt185=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.volatile_stmt(lbl,VOLATILE184,end_of_stmt185);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "volatile_stmt"



	// $ANTLR start "implicit_stmt"
	// MFortranParser2018.g:2451:1: implicit_stmt : ( (lbl= label )? IMPLICIT implicit_spec_list end_of_stmt | (lbl= label )? IMPLICIT NONE ( LPAREN (ins= implicit_none_spec )? RPAREN )? end_of_stmt );
	public final void implicit_stmt() throws RecognitionException {
		Token IMPLICIT186=null;
		Token IMPLICIT188=null;
		Token NONE189=null;
		Token lbl =null;
		Token ins =null;
		Token end_of_stmt187 =null;
		Token end_of_stmt190 =null;

		try {
			// MFortranParser2018.g:2455:5: ( (lbl= label )? IMPLICIT implicit_spec_list end_of_stmt | (lbl= label )? IMPLICIT NONE ( LPAREN (ins= implicit_none_spec )? RPAREN )? end_of_stmt )
			int alt220=2;
			int LA220_0 = input.LA(1);
			if ( (LA220_0==DIGIT_STR) ) {
				int LA220_1 = input.LA(2);
				if ( (LA220_1==IMPLICIT) ) {
					int LA220_2 = input.LA(3);
					if ( (LA220_2==NONE) ) {
						alt220=2;
					}
					else if ( (LA220_2==CHARACTER||LA220_2==CLASS||LA220_2==COMPLEX||(LA220_2 >= DOUBLE && LA220_2 <= DOUBLEPRECISION)||LA220_2==INTEGER||LA220_2==LOGICAL||LA220_2==REAL||LA220_2==TYPE) ) {
						alt220=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 220, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 220, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA220_0==IMPLICIT) ) {
				int LA220_2 = input.LA(2);
				if ( (LA220_2==NONE) ) {
					alt220=2;
				}
				else if ( (LA220_2==CHARACTER||LA220_2==CLASS||LA220_2==COMPLEX||(LA220_2 >= DOUBLE && LA220_2 <= DOUBLEPRECISION)||LA220_2==INTEGER||LA220_2==LOGICAL||LA220_2==REAL||LA220_2==TYPE) ) {
					alt220=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 220, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 220, 0, input);
				throw nvae;
			}

			switch (alt220) {
				case 1 :
					// MFortranParser2018.g:2455:7: (lbl= label )? IMPLICIT implicit_spec_list end_of_stmt
					{
					// MFortranParser2018.g:2455:7: (lbl= label )?
					int alt216=2;
					int LA216_0 = input.LA(1);
					if ( (LA216_0==DIGIT_STR) ) {
						alt216=1;
					}
					switch (alt216) {
						case 1 :
							// MFortranParser2018.g:2455:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_implicit_stmt10247);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPLICIT186=(Token)match(input,IMPLICIT,FOLLOW_IMPLICIT_in_implicit_stmt10259); if (state.failed) return;
					pushFollow(FOLLOW_implicit_spec_list_in_implicit_stmt10268);
					implicit_spec_list();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_implicit_stmt10277);
					end_of_stmt187=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.implicit_stmt(
					            lbl, IMPLICIT186, null, ins, end_of_stmt187);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2461:7: (lbl= label )? IMPLICIT NONE ( LPAREN (ins= implicit_none_spec )? RPAREN )? end_of_stmt
					{
					// MFortranParser2018.g:2461:7: (lbl= label )?
					int alt217=2;
					int LA217_0 = input.LA(1);
					if ( (LA217_0==DIGIT_STR) ) {
						alt217=1;
					}
					switch (alt217) {
						case 1 :
							// MFortranParser2018.g:2461:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_implicit_stmt10299);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPLICIT188=(Token)match(input,IMPLICIT,FOLLOW_IMPLICIT_in_implicit_stmt10311); if (state.failed) return;
					NONE189=(Token)match(input,NONE,FOLLOW_NONE_in_implicit_stmt10313); if (state.failed) return;
					// MFortranParser2018.g:2463:7: ( LPAREN (ins= implicit_none_spec )? RPAREN )?
					int alt219=2;
					int LA219_0 = input.LA(1);
					if ( (LA219_0==LPAREN) ) {
						alt219=1;
					}
					switch (alt219) {
						case 1 :
							// MFortranParser2018.g:2463:8: LPAREN (ins= implicit_none_spec )? RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_implicit_stmt10323); if (state.failed) return;
							// MFortranParser2018.g:2463:15: (ins= implicit_none_spec )?
							int alt218=2;
							int LA218_0 = input.LA(1);
							if ( (LA218_0==EXTERNAL||LA218_0==TYPE) ) {
								alt218=1;
							}
							switch (alt218) {
								case 1 :
									// MFortranParser2018.g:2463:16: ins= implicit_none_spec
									{
									pushFollow(FOLLOW_implicit_none_spec_in_implicit_stmt10330);
									ins=implicit_none_spec();
									state._fsp--;
									if (state.failed) return;
									}
									break;

							}

							match(input,RPAREN,FOLLOW_RPAREN_in_implicit_stmt10334); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_implicit_stmt10345);
					end_of_stmt190=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.implicit_stmt(
					            lbl, IMPLICIT188, NONE189, ins, end_of_stmt190);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "implicit_stmt"



	// $ANTLR start "implicit_spec"
	// MFortranParser2018.g:2472:1: implicit_spec : declaration_type_spec LPAREN letter_spec_list RPAREN ;
	public final void implicit_spec() throws RecognitionException {
		try {
			// MFortranParser2018.g:2473:5: ( declaration_type_spec LPAREN letter_spec_list RPAREN )
			// MFortranParser2018.g:2473:7: declaration_type_spec LPAREN letter_spec_list RPAREN
			{
			pushFollow(FOLLOW_declaration_type_spec_in_implicit_spec10374);
			declaration_type_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_implicit_spec10376); if (state.failed) return;
			pushFollow(FOLLOW_letter_spec_list_in_implicit_spec10378);
			letter_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_implicit_spec10380); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.implicit_spec(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "implicit_spec"



	// $ANTLR start "implicit_spec_list"
	// MFortranParser2018.g:2477:1: implicit_spec_list : implicit_spec ( COMMA implicit_spec )* ;
	public final void implicit_spec_list() throws RecognitionException {

		  int numIS = 1;

		try {
			// MFortranParser2018.g:2484:5: ( implicit_spec ( COMMA implicit_spec )* )
			// MFortranParser2018.g:2484:7: implicit_spec ( COMMA implicit_spec )*
			{
			pushFollow(FOLLOW_implicit_spec_in_implicit_spec_list10415);
			implicit_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2485:5: ( COMMA implicit_spec )*
			loop221:
			while (true) {
				int alt221=2;
				int LA221_0 = input.LA(1);
				if ( (LA221_0==COMMA) ) {
					alt221=1;
				}

				switch (alt221) {
				case 1 :
					// MFortranParser2018.g:2485:7: COMMA implicit_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_implicit_spec_list10423); if (state.failed) return;
					pushFollow(FOLLOW_implicit_spec_in_implicit_spec_list10425);
					implicit_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numIS++;}
					}
					break;

				default :
					break loop221;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.implicit_spec_list(numIS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "implicit_spec_list"



	// $ANTLR start "letter_spec"
	// MFortranParser2018.g:2494:1: letter_spec : id1= IDENT ( MINUS id2= IDENT )? ;
	public final void letter_spec() throws RecognitionException {
		Token id1=null;
		Token id2=null;

		try {
			// MFortranParser2018.g:2495:5: (id1= IDENT ( MINUS id2= IDENT )? )
			// MFortranParser2018.g:2495:7: id1= IDENT ( MINUS id2= IDENT )?
			{
			id1=(Token)match(input,IDENT,FOLLOW_IDENT_in_letter_spec10452); if (state.failed) return;
			// MFortranParser2018.g:2495:17: ( MINUS id2= IDENT )?
			int alt222=2;
			int LA222_0 = input.LA(1);
			if ( (LA222_0==MINUS) ) {
				alt222=1;
			}
			switch (alt222) {
				case 1 :
					// MFortranParser2018.g:2495:19: MINUS id2= IDENT
					{
					match(input,MINUS,FOLLOW_MINUS_in_letter_spec10456); if (state.failed) return;
					id2=(Token)match(input,IDENT,FOLLOW_IDENT_in_letter_spec10460); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.letter_spec(id1, id2); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "letter_spec"



	// $ANTLR start "letter_spec_list"
	// MFortranParser2018.g:2499:1: letter_spec_list : letter_spec ( COMMA letter_spec )* ;
	public final void letter_spec_list() throws RecognitionException {

		  int numLS = 1;

		try {
			// MFortranParser2018.g:2506:5: ( letter_spec ( COMMA letter_spec )* )
			// MFortranParser2018.g:2506:7: letter_spec ( COMMA letter_spec )*
			{
			pushFollow(FOLLOW_letter_spec_in_letter_spec_list10499);
			letter_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2507:7: ( COMMA letter_spec )*
			loop223:
			while (true) {
				int alt223=2;
				int LA223_0 = input.LA(1);
				if ( (LA223_0==COMMA) ) {
					alt223=1;
				}

				switch (alt223) {
				case 1 :
					// MFortranParser2018.g:2507:9: COMMA letter_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_letter_spec_list10509); if (state.failed) return;
					pushFollow(FOLLOW_letter_spec_in_letter_spec_list10511);
					letter_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numLS++;}
					}
					break;

				default :
					break loop223;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.letter_spec_list(numLS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "letter_spec_list"



	// $ANTLR start "implicit_none_spec"
	// MFortranParser2018.g:2513:1: implicit_none_spec returns [Token t] : ( EXTERNAL | TYPE );
	public final Token implicit_none_spec() throws RecognitionException {
		Token t = null;


		Token EXTERNAL191=null;
		Token TYPE192=null;

		try {
			// MFortranParser2018.g:2514:5: ( EXTERNAL | TYPE )
			int alt224=2;
			int LA224_0 = input.LA(1);
			if ( (LA224_0==EXTERNAL) ) {
				alt224=1;
			}
			else if ( (LA224_0==TYPE) ) {
				alt224=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 224, 0, input);
				throw nvae;
			}

			switch (alt224) {
				case 1 :
					// MFortranParser2018.g:2514:7: EXTERNAL
					{
					EXTERNAL191=(Token)match(input,EXTERNAL,FOLLOW_EXTERNAL_in_implicit_none_spec10539); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = EXTERNAL191;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2515:7: TYPE
					{
					TYPE192=(Token)match(input,TYPE,FOLLOW_TYPE_in_implicit_none_spec10549); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = TYPE192;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "implicit_none_spec"



	// $ANTLR start "import_stmt"
	// MFortranParser2018.g:2522:1: import_stmt : ( (lbl= label )? IMPORT ( ( COLON_COLON )? generic_name_list )? end_of_stmt | (lbl= label )? IMPORT COMMA ONLY COLON generic_name_list end_of_stmt | (lbl= label )? IMPORT COMMA NONE end_of_stmt | (lbl= label )? IMPORT COMMA ALL end_of_stmt );
	public final void import_stmt() throws RecognitionException {
		Token IMPORT193=null;
		Token IMPORT195=null;
		Token ONLY196=null;
		Token IMPORT198=null;
		Token NONE199=null;
		Token IMPORT201=null;
		Token ALL202=null;
		Token lbl =null;
		Token end_of_stmt194 =null;
		Token end_of_stmt197 =null;
		Token end_of_stmt200 =null;
		Token end_of_stmt203 =null;


		  boolean hasINL = false;

		try {
			// MFortranParser2018.g:2529:5: ( (lbl= label )? IMPORT ( ( COLON_COLON )? generic_name_list )? end_of_stmt | (lbl= label )? IMPORT COMMA ONLY COLON generic_name_list end_of_stmt | (lbl= label )? IMPORT COMMA NONE end_of_stmt | (lbl= label )? IMPORT COMMA ALL end_of_stmt )
			int alt231=4;
			int LA231_0 = input.LA(1);
			if ( (LA231_0==DIGIT_STR) ) {
				int LA231_1 = input.LA(2);
				if ( (LA231_1==IMPORT) ) {
					int LA231_2 = input.LA(3);
					if ( (LA231_2==COMMA) ) {
						switch ( input.LA(4) ) {
						case ONLY:
							{
							alt231=2;
							}
							break;
						case NONE:
							{
							alt231=3;
							}
							break;
						case ALL:
							{
							alt231=4;
							}
							break;
						default:
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 231, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}
					}
					else if ( (LA231_2==EOF||LA231_2==COLON_COLON||LA231_2==EOS||LA231_2==IDENT) ) {
						alt231=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 231, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 231, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA231_0==IMPORT) ) {
				int LA231_2 = input.LA(2);
				if ( (LA231_2==COMMA) ) {
					switch ( input.LA(3) ) {
					case ONLY:
						{
						alt231=2;
						}
						break;
					case NONE:
						{
						alt231=3;
						}
						break;
					case ALL:
						{
						alt231=4;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 231, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
				}
				else if ( (LA231_2==EOF||LA231_2==COLON_COLON||LA231_2==EOS||LA231_2==IDENT) ) {
					alt231=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 231, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 231, 0, input);
				throw nvae;
			}

			switch (alt231) {
				case 1 :
					// MFortranParser2018.g:2529:7: (lbl= label )? IMPORT ( ( COLON_COLON )? generic_name_list )? end_of_stmt
					{
					// MFortranParser2018.g:2529:7: (lbl= label )?
					int alt225=2;
					int LA225_0 = input.LA(1);
					if ( (LA225_0==DIGIT_STR) ) {
						alt225=1;
					}
					switch (alt225) {
						case 1 :
							// MFortranParser2018.g:2529:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_import_stmt10581);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPORT193=(Token)match(input,IMPORT,FOLLOW_IMPORT_in_import_stmt10592); if (state.failed) return;
					// MFortranParser2018.g:2530:14: ( ( COLON_COLON )? generic_name_list )?
					int alt227=2;
					int LA227_0 = input.LA(1);
					if ( (LA227_0==COLON_COLON||LA227_0==IDENT) ) {
						alt227=1;
					}
					switch (alt227) {
						case 1 :
							// MFortranParser2018.g:2530:16: ( COLON_COLON )? generic_name_list
							{
							// MFortranParser2018.g:2530:16: ( COLON_COLON )?
							int alt226=2;
							int LA226_0 = input.LA(1);
							if ( (LA226_0==COLON_COLON) ) {
								alt226=1;
							}
							switch (alt226) {
								case 1 :
									// MFortranParser2018.g:2530:18: COLON_COLON
									{
									match(input,COLON_COLON,FOLLOW_COLON_COLON_in_import_stmt10598); if (state.failed) return;
									}
									break;

							}

							pushFollow(FOLLOW_generic_name_list_in_import_stmt10603);
							generic_name_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasINL=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_import_stmt10616);
					end_of_stmt194=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.import_stmt(lbl, IMPORT193, null, end_of_stmt194, hasINL);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2533:7: (lbl= label )? IMPORT COMMA ONLY COLON generic_name_list end_of_stmt
					{
					// MFortranParser2018.g:2533:7: (lbl= label )?
					int alt228=2;
					int LA228_0 = input.LA(1);
					if ( (LA228_0==DIGIT_STR) ) {
						alt228=1;
					}
					switch (alt228) {
						case 1 :
							// MFortranParser2018.g:2533:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_import_stmt10637);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPORT195=(Token)match(input,IMPORT,FOLLOW_IMPORT_in_import_stmt10648); if (state.failed) return;
					match(input,COMMA,FOLLOW_COMMA_in_import_stmt10650); if (state.failed) return;
					ONLY196=(Token)match(input,ONLY,FOLLOW_ONLY_in_import_stmt10652); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_import_stmt10654); if (state.failed) return;
					pushFollow(FOLLOW_generic_name_list_in_import_stmt10656);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_import_stmt10665);
					end_of_stmt197=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.import_stmt(lbl, IMPORT195, ONLY196, end_of_stmt197, true);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:2537:7: (lbl= label )? IMPORT COMMA NONE end_of_stmt
					{
					// MFortranParser2018.g:2537:7: (lbl= label )?
					int alt229=2;
					int LA229_0 = input.LA(1);
					if ( (LA229_0==DIGIT_STR) ) {
						alt229=1;
					}
					switch (alt229) {
						case 1 :
							// MFortranParser2018.g:2537:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_import_stmt10686);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPORT198=(Token)match(input,IMPORT,FOLLOW_IMPORT_in_import_stmt10697); if (state.failed) return;
					match(input,COMMA,FOLLOW_COMMA_in_import_stmt10699); if (state.failed) return;
					NONE199=(Token)match(input,NONE,FOLLOW_NONE_in_import_stmt10701); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_import_stmt10710);
					end_of_stmt200=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.import_stmt(lbl, IMPORT198, NONE199, end_of_stmt200, false);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:2541:7: (lbl= label )? IMPORT COMMA ALL end_of_stmt
					{
					// MFortranParser2018.g:2541:7: (lbl= label )?
					int alt230=2;
					int LA230_0 = input.LA(1);
					if ( (LA230_0==DIGIT_STR) ) {
						alt230=1;
					}
					switch (alt230) {
						case 1 :
							// MFortranParser2018.g:2541:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_import_stmt10731);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					IMPORT201=(Token)match(input,IMPORT,FOLLOW_IMPORT_in_import_stmt10742); if (state.failed) return;
					match(input,COMMA,FOLLOW_COMMA_in_import_stmt10744); if (state.failed) return;
					ALL202=(Token)match(input,ALL,FOLLOW_ALL_in_import_stmt10746); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_import_stmt10755);
					end_of_stmt203=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.import_stmt(lbl, IMPORT201, ALL202, end_of_stmt203, false);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "import_stmt"



	// $ANTLR start "namelist_stmt"
	// MFortranParser2018.g:2551:1: namelist_stmt : (lbl= label )? NAMELIST SLASH nlName= IDENT SLASH namelist_group_object_list ( ( COMMA )? SLASH nlName= IDENT SLASH namelist_group_object_list )* end_of_stmt ;
	public final void namelist_stmt() throws RecognitionException {
		Token nlName=null;
		Token NAMELIST204=null;
		Token lbl =null;
		Token end_of_stmt205 =null;


		  int numNL =1;

		try {
			// MFortranParser2018.g:2558:5: ( (lbl= label )? NAMELIST SLASH nlName= IDENT SLASH namelist_group_object_list ( ( COMMA )? SLASH nlName= IDENT SLASH namelist_group_object_list )* end_of_stmt )
			// MFortranParser2018.g:2558:7: (lbl= label )? NAMELIST SLASH nlName= IDENT SLASH namelist_group_object_list ( ( COMMA )? SLASH nlName= IDENT SLASH namelist_group_object_list )* end_of_stmt
			{
			// MFortranParser2018.g:2558:7: (lbl= label )?
			int alt232=2;
			int LA232_0 = input.LA(1);
			if ( (LA232_0==DIGIT_STR) ) {
				alt232=1;
			}
			switch (alt232) {
				case 1 :
					// MFortranParser2018.g:2558:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_namelist_stmt10796);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			NAMELIST204=(Token)match(input,NAMELIST,FOLLOW_NAMELIST_in_namelist_stmt10807); if (state.failed) return;
			match(input,SLASH,FOLLOW_SLASH_in_namelist_stmt10809); if (state.failed) return;
			nlName=(Token)match(input,IDENT,FOLLOW_IDENT_in_namelist_stmt10813); if (state.failed) return;
			match(input,SLASH,FOLLOW_SLASH_in_namelist_stmt10815); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.namelist_group_name(nlName);}
			pushFollow(FOLLOW_namelist_group_object_list_in_namelist_stmt10833);
			namelist_group_object_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2562:7: ( ( COMMA )? SLASH nlName= IDENT SLASH namelist_group_object_list )*
			loop234:
			while (true) {
				int alt234=2;
				int LA234_0 = input.LA(1);
				if ( (LA234_0==COMMA||LA234_0==SLASH) ) {
					alt234=1;
				}

				switch (alt234) {
				case 1 :
					// MFortranParser2018.g:2562:9: ( COMMA )? SLASH nlName= IDENT SLASH namelist_group_object_list
					{
					// MFortranParser2018.g:2562:9: ( COMMA )?
					int alt233=2;
					int LA233_0 = input.LA(1);
					if ( (LA233_0==COMMA) ) {
						alt233=1;
					}
					switch (alt233) {
						case 1 :
							// MFortranParser2018.g:2562:11: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_namelist_stmt10845); if (state.failed) return;
							}
							break;

					}

					match(input,SLASH,FOLLOW_SLASH_in_namelist_stmt10850); if (state.failed) return;
					nlName=(Token)match(input,IDENT,FOLLOW_IDENT_in_namelist_stmt10854); if (state.failed) return;
					match(input,SLASH,FOLLOW_SLASH_in_namelist_stmt10856); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.namelist_group_name(nlName);}
					pushFollow(FOLLOW_namelist_group_object_list_in_namelist_stmt10882);
					namelist_group_object_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numNL++;}
					}
					break;

				default :
					break loop234;
				}
			}

			pushFollow(FOLLOW_end_of_stmt_in_namelist_stmt10902);
			end_of_stmt205=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.namelist_stmt(lbl,NAMELIST204,end_of_stmt205,numNL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "namelist_stmt"



	// $ANTLR start "namelist_group_object_list"
	// MFortranParser2018.g:2574:1: namelist_group_object_list : goName= IDENT ( COMMA goName= IDENT )* ;
	public final void namelist_group_object_list() throws RecognitionException {
		Token goName=null;


		  int numNGO = 1;

		try {
			// MFortranParser2018.g:2581:5: (goName= IDENT ( COMMA goName= IDENT )* )
			// MFortranParser2018.g:2581:7: goName= IDENT ( COMMA goName= IDENT )*
			{
			goName=(Token)match(input,IDENT,FOLLOW_IDENT_in_namelist_group_object_list10941); if (state.failed) return;
			if ( state.backtracking==0 ) {MFPA.namelist_group_object(goName);}
			// MFortranParser2018.g:2582:7: ( COMMA goName= IDENT )*
			loop235:
			while (true) {
				int alt235=2;
				int LA235_0 = input.LA(1);
				if ( (LA235_0==COMMA) ) {
					int LA235_1 = input.LA(2);
					if ( (LA235_1==IDENT) ) {
						alt235=1;
					}

				}

				switch (alt235) {
				case 1 :
					// MFortranParser2018.g:2582:9: COMMA goName= IDENT
					{
					match(input,COMMA,FOLLOW_COMMA_in_namelist_group_object_list10953); if (state.failed) return;
					goName=(Token)match(input,IDENT,FOLLOW_IDENT_in_namelist_group_object_list10957); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.namelist_group_object(goName); numNGO++;}
					}
					break;

				default :
					break loop235;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.namelist_group_object_list(numNGO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "namelist_group_object_list"



	// $ANTLR start "equivalence_stmt"
	// MFortranParser2018.g:2589:1: equivalence_stmt : (lbl= label )? EQUIVALENCE equivalence_set_list end_of_stmt ;
	public final void equivalence_stmt() throws RecognitionException {
		Token EQUIVALENCE206=null;
		Token lbl =null;
		Token end_of_stmt207 =null;



		try {
			// MFortranParser2018.g:2595:5: ( (lbl= label )? EQUIVALENCE equivalence_set_list end_of_stmt )
			// MFortranParser2018.g:2595:7: (lbl= label )? EQUIVALENCE equivalence_set_list end_of_stmt
			{
			// MFortranParser2018.g:2595:7: (lbl= label )?
			int alt236=2;
			int LA236_0 = input.LA(1);
			if ( (LA236_0==DIGIT_STR) ) {
				alt236=1;
			}
			switch (alt236) {
				case 1 :
					// MFortranParser2018.g:2595:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_equivalence_stmt11003);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			EQUIVALENCE206=(Token)match(input,EQUIVALENCE,FOLLOW_EQUIVALENCE_in_equivalence_stmt11014); if (state.failed) return;
			pushFollow(FOLLOW_equivalence_set_list_in_equivalence_stmt11016);
			equivalence_set_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_equivalence_stmt11024);
			end_of_stmt207=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.equivalence_stmt(lbl, EQUIVALENCE206, end_of_stmt207);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equivalence_stmt"



	// $ANTLR start "equivalence_set"
	// MFortranParser2018.g:2604:1: equivalence_set : LPAREN equivalence_object COMMA equivalence_object_list RPAREN ;
	public final void equivalence_set() throws RecognitionException {
		try {
			// MFortranParser2018.g:2605:5: ( LPAREN equivalence_object COMMA equivalence_object_list RPAREN )
			// MFortranParser2018.g:2605:7: LPAREN equivalence_object COMMA equivalence_object_list RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_equivalence_set11053); if (state.failed) return;
			pushFollow(FOLLOW_equivalence_object_in_equivalence_set11055);
			equivalence_object();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_equivalence_set11057); if (state.failed) return;
			pushFollow(FOLLOW_equivalence_object_list_in_equivalence_set11059);
			equivalence_object_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_equivalence_set11061); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.equivalence_set(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equivalence_set"



	// $ANTLR start "equivalence_set_list"
	// MFortranParser2018.g:2609:1: equivalence_set_list : equivalence_set ( COMMA equivalence_set )* ;
	public final void equivalence_set_list() throws RecognitionException {

		  int numES = 1;

		try {
			// MFortranParser2018.g:2613:5: ( equivalence_set ( COMMA equivalence_set )* )
			// MFortranParser2018.g:2613:7: equivalence_set ( COMMA equivalence_set )*
			{
			pushFollow(FOLLOW_equivalence_set_in_equivalence_set_list11092);
			equivalence_set();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2614:7: ( COMMA equivalence_set )*
			loop237:
			while (true) {
				int alt237=2;
				int LA237_0 = input.LA(1);
				if ( (LA237_0==COMMA) ) {
					alt237=1;
				}

				switch (alt237) {
				case 1 :
					// MFortranParser2018.g:2614:9: COMMA equivalence_set
					{
					match(input,COMMA,FOLLOW_COMMA_in_equivalence_set_list11103); if (state.failed) return;
					pushFollow(FOLLOW_equivalence_set_in_equivalence_set_list11105);
					equivalence_set();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numES++;}
					}
					break;

				default :
					break loop237;
				}
			}

			if ( state.backtracking==0 ) { MFPA.equivalence_set_list(numES);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equivalence_set_list"



	// $ANTLR start "equivalence_object"
	// MFortranParser2018.g:2625:1: equivalence_object : substring ;
	public final void equivalence_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:2626:5: ( substring )
			// MFortranParser2018.g:2626:7: substring
			{
			pushFollow(FOLLOW_substring_in_equivalence_object11139);
			substring();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.equivalence_object(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equivalence_object"



	// $ANTLR start "equivalence_object_list"
	// MFortranParser2018.g:2629:1: equivalence_object_list : equivalence_object ( COMMA equivalence_object )* ;
	public final void equivalence_object_list() throws RecognitionException {

		  int numEO = 1;

		try {
			// MFortranParser2018.g:2636:5: ( equivalence_object ( COMMA equivalence_object )* )
			// MFortranParser2018.g:2636:7: equivalence_object ( COMMA equivalence_object )*
			{
			pushFollow(FOLLOW_equivalence_object_in_equivalence_object_list11166);
			equivalence_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2637:7: ( COMMA equivalence_object )*
			loop238:
			while (true) {
				int alt238=2;
				int LA238_0 = input.LA(1);
				if ( (LA238_0==COMMA) ) {
					alt238=1;
				}

				switch (alt238) {
				case 1 :
					// MFortranParser2018.g:2637:9: COMMA equivalence_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_equivalence_object_list11177); if (state.failed) return;
					pushFollow(FOLLOW_equivalence_object_in_equivalence_object_list11179);
					equivalence_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numEO++;}
					}
					break;

				default :
					break loop238;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.equivalence_object_list(numEO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equivalence_object_list"



	// $ANTLR start "common_stmt"
	// MFortranParser2018.g:2644:1: common_stmt : (lbl= label )? COMMON (cb_name= common_block_name )? common_block_object_list ( ( COMMA )? cb_name= common_block_name common_block_object_list )* end_of_stmt ;
	public final void common_stmt() throws RecognitionException {
		Token COMMON208=null;
		Token lbl =null;
		Token cb_name =null;
		Token end_of_stmt209 =null;


		  int numBlocks=1;

		try {
			// MFortranParser2018.g:2651:5: ( (lbl= label )? COMMON (cb_name= common_block_name )? common_block_object_list ( ( COMMA )? cb_name= common_block_name common_block_object_list )* end_of_stmt )
			// MFortranParser2018.g:2651:7: (lbl= label )? COMMON (cb_name= common_block_name )? common_block_object_list ( ( COMMA )? cb_name= common_block_name common_block_object_list )* end_of_stmt
			{
			// MFortranParser2018.g:2651:7: (lbl= label )?
			int alt239=2;
			int LA239_0 = input.LA(1);
			if ( (LA239_0==DIGIT_STR) ) {
				alt239=1;
			}
			switch (alt239) {
				case 1 :
					// MFortranParser2018.g:2651:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_common_stmt11215);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			COMMON208=(Token)match(input,COMMON,FOLLOW_COMMON_in_common_stmt11226); if (state.failed) return;
			// MFortranParser2018.g:2652:14: (cb_name= common_block_name )?
			int alt240=2;
			int LA240_0 = input.LA(1);
			if ( (LA240_0==SLASH||LA240_0==SLASH_SLASH) ) {
				alt240=1;
			}
			switch (alt240) {
				case 1 :
					// MFortranParser2018.g:2652:16: cb_name= common_block_name
					{
					pushFollow(FOLLOW_common_block_name_in_common_stmt11232);
					cb_name=common_block_name();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.common_block_name(cb_name); }
			pushFollow(FOLLOW_common_block_object_list_in_common_stmt11254);
			common_block_object_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2655:7: ( ( COMMA )? cb_name= common_block_name common_block_object_list )*
			loop242:
			while (true) {
				int alt242=2;
				int LA242_0 = input.LA(1);
				if ( (LA242_0==COMMA||LA242_0==SLASH||LA242_0==SLASH_SLASH) ) {
					alt242=1;
				}

				switch (alt242) {
				case 1 :
					// MFortranParser2018.g:2655:9: ( COMMA )? cb_name= common_block_name common_block_object_list
					{
					// MFortranParser2018.g:2655:9: ( COMMA )?
					int alt241=2;
					int LA241_0 = input.LA(1);
					if ( (LA241_0==COMMA) ) {
						alt241=1;
					}
					switch (alt241) {
						case 1 :
							// MFortranParser2018.g:2655:11: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_common_stmt11266); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_common_block_name_in_common_stmt11273);
					cb_name=common_block_name();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.common_block_name(cb_name); }
					pushFollow(FOLLOW_common_block_object_list_in_common_stmt11295);
					common_block_object_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numBlocks++;}
					}
					break;

				default :
					break loop242;
				}
			}

			pushFollow(FOLLOW_end_of_stmt_in_common_stmt11309);
			end_of_stmt209=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.common_stmt(
			            lbl, COMMON208, end_of_stmt209, numBlocks);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "common_stmt"



	// $ANTLR start "common_block_name"
	// MFortranParser2018.g:2664:1: common_block_name returns [Token id] : ( SLASH_SLASH | SLASH ( IDENT )? SLASH );
	public final Token common_block_name() throws RecognitionException {
		Token id = null;


		Token IDENT210=null;

		try {
			// MFortranParser2018.g:2665:5: ( SLASH_SLASH | SLASH ( IDENT )? SLASH )
			int alt244=2;
			int LA244_0 = input.LA(1);
			if ( (LA244_0==SLASH_SLASH) ) {
				alt244=1;
			}
			else if ( (LA244_0==SLASH) ) {
				alt244=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return id;}
				NoViableAltException nvae =
					new NoViableAltException("", 244, 0, input);
				throw nvae;
			}

			switch (alt244) {
				case 1 :
					// MFortranParser2018.g:2665:7: SLASH_SLASH
					{
					match(input,SLASH_SLASH,FOLLOW_SLASH_SLASH_in_common_block_name11341); if (state.failed) return id;
					if ( state.backtracking==0 ) {id=null;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2666:7: SLASH ( IDENT )? SLASH
					{
					match(input,SLASH,FOLLOW_SLASH_in_common_block_name11351); if (state.failed) return id;
					// MFortranParser2018.g:2666:13: ( IDENT )?
					int alt243=2;
					int LA243_0 = input.LA(1);
					if ( (LA243_0==IDENT) ) {
						alt243=1;
					}
					switch (alt243) {
						case 1 :
							// MFortranParser2018.g:2666:14: IDENT
							{
							IDENT210=(Token)match(input,IDENT,FOLLOW_IDENT_in_common_block_name11354); if (state.failed) return id;
							}
							break;

					}

					match(input,SLASH,FOLLOW_SLASH_in_common_block_name11358); if (state.failed) return id;
					if ( state.backtracking==0 ) {id=IDENT210;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return id;
	}
	// $ANTLR end "common_block_name"



	// $ANTLR start "common_block_object"
	// MFortranParser2018.g:2672:1: common_block_object : IDENT ( LPAREN explicit_shape_spec_list RPAREN )? ;
	public final void common_block_object() throws RecognitionException {
		Token IDENT211=null;


		  boolean hasSSL=false;

		try {
			// MFortranParser2018.g:2676:5: ( IDENT ( LPAREN explicit_shape_spec_list RPAREN )? )
			// MFortranParser2018.g:2676:7: IDENT ( LPAREN explicit_shape_spec_list RPAREN )?
			{
			IDENT211=(Token)match(input,IDENT,FOLLOW_IDENT_in_common_block_object11383); if (state.failed) return;
			// MFortranParser2018.g:2677:7: ( LPAREN explicit_shape_spec_list RPAREN )?
			int alt245=2;
			int LA245_0 = input.LA(1);
			if ( (LA245_0==LPAREN) ) {
				alt245=1;
			}
			switch (alt245) {
				case 1 :
					// MFortranParser2018.g:2677:9: LPAREN explicit_shape_spec_list RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_common_block_object11393); if (state.failed) return;
					pushFollow(FOLLOW_explicit_shape_spec_list_in_common_block_object11395);
					explicit_shape_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_common_block_object11397); if (state.failed) return;
					if ( state.backtracking==0 ) {hasSSL=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.common_block_object(IDENT211,hasSSL);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "common_block_object"



	// $ANTLR start "common_block_object_list"
	// MFortranParser2018.g:2681:1: common_block_object_list : common_block_object ( COMMA common_block_object )* ;
	public final void common_block_object_list() throws RecognitionException {

		  int numCBO = 1;

		try {
			// MFortranParser2018.g:2688:5: ( common_block_object ( COMMA common_block_object )* )
			// MFortranParser2018.g:2688:7: common_block_object ( COMMA common_block_object )*
			{
			pushFollow(FOLLOW_common_block_object_in_common_block_object_list11436);
			common_block_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2689:7: ( COMMA common_block_object )*
			loop246:
			while (true) {
				int alt246=2;
				int LA246_0 = input.LA(1);
				if ( (LA246_0==COMMA) ) {
					int LA246_1 = input.LA(2);
					if ( (LA246_1==IDENT) ) {
						alt246=1;
					}

				}

				switch (alt246) {
				case 1 :
					// MFortranParser2018.g:2689:9: COMMA common_block_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_common_block_object_list11446); if (state.failed) return;
					pushFollow(FOLLOW_common_block_object_in_common_block_object_list11448);
					common_block_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCBO++;}
					}
					break;

				default :
					break loop246;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.common_block_object_list(numCBO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "common_block_object_list"



	// $ANTLR start "quantified_expr"
	// MFortranParser2018.g:2696:1: quantified_expr : CIVL_PRIMITIVE LPAREN intrinsic_type_spec entity_decl_list ( COLON ( quantified_expr | expr ) )? RPAREN expr ;
	public final void quantified_expr() throws RecognitionException {
		Token CIVL_PRIMITIVE212=null;


		  boolean hasRestrict = false;

		try {
			// MFortranParser2018.g:2700:2: ( CIVL_PRIMITIVE LPAREN intrinsic_type_spec entity_decl_list ( COLON ( quantified_expr | expr ) )? RPAREN expr )
			// MFortranParser2018.g:2700:4: CIVL_PRIMITIVE LPAREN intrinsic_type_spec entity_decl_list ( COLON ( quantified_expr | expr ) )? RPAREN expr
			{
			CIVL_PRIMITIVE212=(Token)match(input,CIVL_PRIMITIVE,FOLLOW_CIVL_PRIMITIVE_in_quantified_expr11473); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_quantified_expr11475); if (state.failed) return;
			pushFollow(FOLLOW_intrinsic_type_spec_in_quantified_expr11477);
			intrinsic_type_spec();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_entity_decl_list_in_quantified_expr11479);
			entity_decl_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2701:4: ( COLON ( quantified_expr | expr ) )?
			int alt248=2;
			int LA248_0 = input.LA(1);
			if ( (LA248_0==COLON) ) {
				alt248=1;
			}
			switch (alt248) {
				case 1 :
					// MFortranParser2018.g:2701:5: COLON ( quantified_expr | expr )
					{
					match(input,COLON,FOLLOW_COLON_in_quantified_expr11486); if (state.failed) return;
					// MFortranParser2018.g:2701:11: ( quantified_expr | expr )
					int alt247=2;
					int LA247_0 = input.LA(1);
					if ( (LA247_0==CIVL_PRIMITIVE) ) {
						alt247=1;
					}
					else if ( (LA247_0==BIN_CONST||LA247_0==CHAR_CONST||(LA247_0 >= DEFINED_OP && LA247_0 <= DIGIT_STR)||LA247_0==FALSE||(LA247_0 >= HEX_CONST && LA247_0 <= IDENT)||LA247_0==LBRACKET||LA247_0==LPAREN||LA247_0==MINUS||LA247_0==M_REAL_CONST||LA247_0==NOT||LA247_0==OCT_CONST||LA247_0==PLUS||LA247_0==TRUE) ) {
						alt247=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						NoViableAltException nvae =
							new NoViableAltException("", 247, 0, input);
						throw nvae;
					}

					switch (alt247) {
						case 1 :
							// MFortranParser2018.g:2701:12: quantified_expr
							{
							pushFollow(FOLLOW_quantified_expr_in_quantified_expr11489);
							quantified_expr();
							state._fsp--;
							if (state.failed) return;
							}
							break;
						case 2 :
							// MFortranParser2018.g:2701:28: expr
							{
							pushFollow(FOLLOW_expr_in_quantified_expr11491);
							expr();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) {hasRestrict = true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_quantified_expr11499); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_quantified_expr11501);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {MFPA.quantified_expr(CIVL_PRIMITIVE212, hasRestrict);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "quantified_expr"



	// $ANTLR start "civl_stmt"
	// MFortranParser2018.g:2709:1: civl_stmt : CIVL_PRIMITIVE LPAREN ( expr | quantified_expr )? RPAREN ;
	public final void civl_stmt() throws RecognitionException {
		Token CIVL_PRIMITIVE213=null;


		  boolean isQuantified = false;
		  int numArgs = 0;

		try {
			// MFortranParser2018.g:2714:2: ( CIVL_PRIMITIVE LPAREN ( expr | quantified_expr )? RPAREN )
			// MFortranParser2018.g:2714:4: CIVL_PRIMITIVE LPAREN ( expr | quantified_expr )? RPAREN
			{
			CIVL_PRIMITIVE213=(Token)match(input,CIVL_PRIMITIVE,FOLLOW_CIVL_PRIMITIVE_in_civl_stmt11522); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_civl_stmt11524); if (state.failed) return;
			// MFortranParser2018.g:2715:4: ( expr | quantified_expr )?
			int alt249=3;
			int LA249_0 = input.LA(1);
			if ( (LA249_0==BIN_CONST||LA249_0==CHAR_CONST||(LA249_0 >= DEFINED_OP && LA249_0 <= DIGIT_STR)||LA249_0==FALSE||(LA249_0 >= HEX_CONST && LA249_0 <= IDENT)||LA249_0==LBRACKET||LA249_0==LPAREN||LA249_0==MINUS||LA249_0==M_REAL_CONST||LA249_0==NOT||LA249_0==OCT_CONST||LA249_0==PLUS||LA249_0==TRUE) ) {
				alt249=1;
			}
			else if ( (LA249_0==CIVL_PRIMITIVE) ) {
				alt249=2;
			}
			switch (alt249) {
				case 1 :
					// MFortranParser2018.g:2715:6: expr
					{
					pushFollow(FOLLOW_expr_in_civl_stmt11532);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numArgs++;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:2716:6: quantified_expr
					{
					pushFollow(FOLLOW_quantified_expr_in_civl_stmt11541);
					quantified_expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {isQuantified = true;numArgs++;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_civl_stmt11551); if (state.failed) return;
			if ( state.backtracking==0 ) {MFPA.civl_stmt(CIVL_PRIMITIVE213, numArgs);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "civl_stmt"



	// $ANTLR start "pragma_type_qualifier_stmt"
	// MFortranParser2018.g:2725:1: pragma_type_qualifier_stmt : PRAGMA IDENT CIVL_PRIMITIVE end_of_stmt ;
	public final void pragma_type_qualifier_stmt() throws RecognitionException {
		Token IDENT214=null;
		Token CIVL_PRIMITIVE215=null;

		try {
			// MFortranParser2018.g:2729:5: ( PRAGMA IDENT CIVL_PRIMITIVE end_of_stmt )
			// MFortranParser2018.g:2729:7: PRAGMA IDENT CIVL_PRIMITIVE end_of_stmt
			{
			match(input,PRAGMA,FOLLOW_PRAGMA_in_pragma_type_qualifier_stmt11579); if (state.failed) return;
			IDENT214=(Token)match(input,IDENT,FOLLOW_IDENT_in_pragma_type_qualifier_stmt11581); if (state.failed) return;
			CIVL_PRIMITIVE215=(Token)match(input,CIVL_PRIMITIVE,FOLLOW_CIVL_PRIMITIVE_in_pragma_type_qualifier_stmt11583); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_pragma_type_qualifier_stmt11585);
			end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.pragma_type_qualifier_stmt(IDENT214, CIVL_PRIMITIVE215);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pragma_type_qualifier_stmt"



	// $ANTLR start "pragma_stmt"
	// MFortranParser2018.g:2737:1: pragma_stmt : PRAGMA IDENT ( pragma_tokens | civl_stmt ) end_of_stmt ;
	public final void pragma_stmt() throws RecognitionException {
		Token IDENT216=null;
		Token end_of_stmt217 =null;


		  boolean isCIVL = false;

		try {
			// MFortranParser2018.g:2744:5: ( PRAGMA IDENT ( pragma_tokens | civl_stmt ) end_of_stmt )
			// MFortranParser2018.g:2744:7: PRAGMA IDENT ( pragma_tokens | civl_stmt ) end_of_stmt
			{
			match(input,PRAGMA,FOLLOW_PRAGMA_in_pragma_stmt11622); if (state.failed) return;
			IDENT216=(Token)match(input,IDENT,FOLLOW_IDENT_in_pragma_stmt11624); if (state.failed) return;
			// MFortranParser2018.g:2744:20: ( pragma_tokens | civl_stmt )
			int alt250=2;
			int LA250_0 = input.LA(1);
			if ( ((LA250_0 >= ABSTRACT && LA250_0 <= CHAR_CONST)||(LA250_0 >= CLASS && LA250_0 <= ENUMERATOR)||(LA250_0 >= EQ && LA250_0 <= TEAM_NUMBER)) ) {
				alt250=1;
			}
			else if ( (LA250_0==CIVL_PRIMITIVE) ) {
				alt250=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 250, 0, input);
				throw nvae;
			}

			switch (alt250) {
				case 1 :
					// MFortranParser2018.g:2744:21: pragma_tokens
					{
					pushFollow(FOLLOW_pragma_tokens_in_pragma_stmt11627);
					pragma_tokens();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:2744:35: civl_stmt
					{
					pushFollow(FOLLOW_civl_stmt_in_pragma_stmt11629);
					civl_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {isCIVL = true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_pragma_stmt11634);
			end_of_stmt217=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.pragma_stmt(isCIVL, IDENT216, end_of_stmt217);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pragma_stmt"



	// $ANTLR start "pragma_tokens"
	// MFortranParser2018.g:2752:1: pragma_tokens : (pt= (~ ( EOS | EOF | CIVL_PRIMITIVE ) ) )+ ;
	public final void pragma_tokens() throws RecognitionException {
		Token pt=null;


		  int numPT=0;

		try {
			// MFortranParser2018.g:2759:5: ( (pt= (~ ( EOS | EOF | CIVL_PRIMITIVE ) ) )+ )
			// MFortranParser2018.g:2759:7: (pt= (~ ( EOS | EOF | CIVL_PRIMITIVE ) ) )+
			{
			// MFortranParser2018.g:2759:7: (pt= (~ ( EOS | EOF | CIVL_PRIMITIVE ) ) )+
			int cnt251=0;
			loop251:
			while (true) {
				int alt251=2;
				int LA251_0 = input.LA(1);
				if ( ((LA251_0 >= ABSTRACT && LA251_0 <= CHAR_CONST)||(LA251_0 >= CLASS && LA251_0 <= ENUMERATOR)||(LA251_0 >= EQ && LA251_0 <= TEAM_NUMBER)) ) {
					alt251=1;
				}

				switch (alt251) {
				case 1 :
					// MFortranParser2018.g:2759:9: pt= (~ ( EOS | EOF | CIVL_PRIMITIVE ) )
					{
					pt=input.LT(1);
					if ( (input.LA(1) >= ABSTRACT && input.LA(1) <= CHAR_CONST)||(input.LA(1) >= CLASS && input.LA(1) <= ENUMERATOR)||(input.LA(1) >= EQ && input.LA(1) <= TEAM_NUMBER) ) {
						input.consume();
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					if ( state.backtracking==0 ) { MFPA.pragma_token(pt); numPT++;}
					}
					break;

				default :
					if ( cnt251 >= 1 ) break loop251;
					if (state.backtracking>0) {state.failed=true; return;}
					EarlyExitException eee = new EarlyExitException(251, input);
					throw eee;
				}
				cnt251++;
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.pragma_token_list(numPT);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pragma_tokens"



	// $ANTLR start "designator"
	// MFortranParser2018.g:2779:1: designator : ( data_ref ( LPAREN substring_range RPAREN )? | char_literal_constant LPAREN substring_range RPAREN );
	public final void designator() throws RecognitionException {

		  boolean hasSR = false;

		try {
			// MFortranParser2018.g:2783:5: ( data_ref ( LPAREN substring_range RPAREN )? | char_literal_constant LPAREN substring_range RPAREN )
			int alt253=2;
			int LA253_0 = input.LA(1);
			if ( (LA253_0==IDENT) ) {
				int LA253_1 = input.LA(2);
				if ( (LA253_1==EOF||LA253_1==ASTERISK||LA253_1==COLON||LA253_1==COMMA||LA253_1==EOS||LA253_1==EQUALS||LA253_1==LBRACKET||LA253_1==LPAREN||LA253_1==PERCENT||LA253_1==RBRACKET||LA253_1==RPAREN||LA253_1==SLASH) ) {
					alt253=1;
				}
				else if ( (LA253_1==CHAR_CONST) ) {
					alt253=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 253, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA253_0==CHAR_CONST||LA253_0==DIGIT_STR) ) {
				alt253=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 253, 0, input);
				throw nvae;
			}

			switch (alt253) {
				case 1 :
					// MFortranParser2018.g:2783:7: data_ref ( LPAREN substring_range RPAREN )?
					{
					pushFollow(FOLLOW_data_ref_in_designator11731);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:2783:16: ( LPAREN substring_range RPAREN )?
					int alt252=2;
					int LA252_0 = input.LA(1);
					if ( (LA252_0==LPAREN) ) {
						alt252=1;
					}
					switch (alt252) {
						case 1 :
							// MFortranParser2018.g:2783:17: LPAREN substring_range RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_designator11734); if (state.failed) return;
							pushFollow(FOLLOW_substring_range_in_designator11736);
							substring_range();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSR=true;}
							match(input,RPAREN,FOLLOW_RPAREN_in_designator11740); if (state.failed) return;
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.designator(hasSR); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:2785:7: char_literal_constant LPAREN substring_range RPAREN
					{
					pushFollow(FOLLOW_char_literal_constant_in_designator11760);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_designator11762); if (state.failed) return;
					pushFollow(FOLLOW_substring_range_in_designator11764);
					substring_range();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_designator11766); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.substring(true); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "designator"



	// $ANTLR start "designator_or_func_ref"
	// MFortranParser2018.g:2798:1: designator_or_func_ref : ( data_ref ( LPAREN substring_range_or_arg_list RPAREN )? | char_literal_constant LPAREN substring_range RPAREN );
	public final void designator_or_func_ref() throws RecognitionException {
		int substring_range_or_arg_list218 =0;


		  int sType = MFPUtils.DOFR_NONE;

		try {
			// MFortranParser2018.g:2805:5: ( data_ref ( LPAREN substring_range_or_arg_list RPAREN )? | char_literal_constant LPAREN substring_range RPAREN )
			int alt255=2;
			int LA255_0 = input.LA(1);
			if ( (LA255_0==IDENT) ) {
				int LA255_1 = input.LA(2);
				if ( (LA255_1==EOF||LA255_1==AND||LA255_1==ASTERISK||(LA255_1 >= COLON && LA255_1 <= COMMA)||LA255_1==DEFINED_OP||(LA255_1 >= EOS && LA255_1 <= EQ)||(LA255_1 >= EQV && LA255_1 <= EQ_EQ)||LA255_1==GE||(LA255_1 >= GREATERTHAN && LA255_1 <= GT)||(LA255_1 >= LBRACKET && LA255_1 <= LE)||(LA255_1 >= LESSTHAN && LA255_1 <= LESSTHAN_EQ)||(LA255_1 >= LPAREN && LA255_1 <= LT)||LA255_1==MINUS||(LA255_1 >= NE && LA255_1 <= NEQV)||LA255_1==OR||LA255_1==PERCENT||LA255_1==PLUS||LA255_1==POWER||LA255_1==RBRACKET||LA255_1==RPAREN||(LA255_1 >= SLASH && LA255_1 <= SLASH_SLASH)) ) {
					alt255=1;
				}
				else if ( (LA255_1==CHAR_CONST) ) {
					alt255=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 255, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA255_0==CHAR_CONST||LA255_0==DIGIT_STR) ) {
				alt255=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 255, 0, input);
				throw nvae;
			}

			switch (alt255) {
				case 1 :
					// MFortranParser2018.g:2805:7: data_ref ( LPAREN substring_range_or_arg_list RPAREN )?
					{
					pushFollow(FOLLOW_data_ref_in_designator_or_func_ref11805);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:2806:7: ( LPAREN substring_range_or_arg_list RPAREN )?
					int alt254=2;
					int LA254_0 = input.LA(1);
					if ( (LA254_0==LPAREN) ) {
						alt254=1;
					}
					switch (alt254) {
						case 1 :
							// MFortranParser2018.g:2806:9: LPAREN substring_range_or_arg_list RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_designator_or_func_ref11816); if (state.failed) return;
							pushFollow(FOLLOW_substring_range_or_arg_list_in_designator_or_func_ref11818);
							substring_range_or_arg_list218=substring_range_or_arg_list();
							state._fsp--;
							if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_designator_or_func_ref11820); if (state.failed) return;
							if ( state.backtracking==0 ) { sType = substring_range_or_arg_list218; }
							}
							break;

					}

					if ( state.backtracking==0 ) { if(sType == MFPUtils.DOFR_SRNG) {
					              MFPA.designator(true);
					          }else if (sType == MFPUtils.DOFR_ARGS) {
					              MFPA.function_reference();
					          }
					        }
					}
					break;
				case 2 :
					// MFortranParser2018.g:2815:7: char_literal_constant LPAREN substring_range RPAREN
					{
					pushFollow(FOLLOW_char_literal_constant_in_designator_or_func_ref11859);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_designator_or_func_ref11861); if (state.failed) return;
					pushFollow(FOLLOW_substring_range_in_designator_or_func_ref11863);
					substring_range();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_designator_or_func_ref11865); if (state.failed) return;
					if ( state.backtracking==0 ) { sType = MFPUtils.DOFR_SSTR;
					         MFPA.substring(true); 
					       }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.designator_or_func_ref(sType);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "designator_or_func_ref"



	// $ANTLR start "substring_range_or_arg_list"
	// MFortranParser2018.g:2821:1: substring_range_or_arg_list returns [int sType] : ( COLON ( expr )? | expr substr_range_or_arg_list_suffix | IDENT EQUALS expr ( COMMA actual_arg_spec )* | ( IDENT EQUALS )? ASTERISK lbl= label ( COMMA actual_arg_spec )* );
	public final int substring_range_or_arg_list() throws RecognitionException {
		int sType = 0;


		Token IDENT220=null;
		Token IDENT221=null;
		Token ASTERISK222=null;
		Token lbl =null;
		int substr_range_or_arg_list_suffix219 =0;


		  boolean hasUB = false;
		  boolean hasLB = false;
		  Token keyword = null;
		  int numAAS = 1;

		try {
			// MFortranParser2018.g:2831:5: ( COLON ( expr )? | expr substr_range_or_arg_list_suffix | IDENT EQUALS expr ( COMMA actual_arg_spec )* | ( IDENT EQUALS )? ASTERISK lbl= label ( COMMA actual_arg_spec )* )
			int alt260=4;
			switch ( input.LA(1) ) {
			case COLON:
				{
				alt260=1;
				}
				break;
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt260=2;
				}
				break;
			case IDENT:
				{
				int LA260_3 = input.LA(2);
				if ( (LA260_3==AND||LA260_3==ASTERISK||LA260_3==CHAR_CONST||LA260_3==COLON||LA260_3==COMMA||LA260_3==DEFINED_OP||LA260_3==EQ||(LA260_3 >= EQV && LA260_3 <= EQ_EQ)||LA260_3==GE||(LA260_3 >= GREATERTHAN && LA260_3 <= GT)||(LA260_3 >= LBRACKET && LA260_3 <= LE)||(LA260_3 >= LESSTHAN && LA260_3 <= LESSTHAN_EQ)||(LA260_3 >= LPAREN && LA260_3 <= LT)||LA260_3==MINUS||(LA260_3 >= NE && LA260_3 <= NEQV)||LA260_3==OR||LA260_3==PERCENT||LA260_3==PLUS||LA260_3==POWER||LA260_3==RPAREN||(LA260_3 >= SLASH && LA260_3 <= SLASH_SLASH)) ) {
					alt260=2;
				}
				else if ( (LA260_3==EQUALS) ) {
					int LA260_5 = input.LA(3);
					if ( (LA260_5==BIN_CONST||LA260_5==CHAR_CONST||(LA260_5 >= DEFINED_OP && LA260_5 <= DIGIT_STR)||LA260_5==FALSE||(LA260_5 >= HEX_CONST && LA260_5 <= IDENT)||LA260_5==LBRACKET||LA260_5==LPAREN||LA260_5==MINUS||LA260_5==M_REAL_CONST||LA260_5==NOT||LA260_5==OCT_CONST||LA260_5==PLUS||LA260_5==TRUE) ) {
						alt260=3;
					}
					else if ( (LA260_5==ASTERISK) ) {
						alt260=4;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return sType;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 260, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return sType;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 260, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ASTERISK:
				{
				alt260=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return sType;}
				NoViableAltException nvae =
					new NoViableAltException("", 260, 0, input);
				throw nvae;
			}
			switch (alt260) {
				case 1 :
					// MFortranParser2018.g:2831:7: COLON ( expr )?
					{
					match(input,COLON,FOLLOW_COLON_in_substring_range_or_arg_list11904); if (state.failed) return sType;
					// MFortranParser2018.g:2831:13: ( expr )?
					int alt256=2;
					int LA256_0 = input.LA(1);
					if ( (LA256_0==BIN_CONST||LA256_0==CHAR_CONST||(LA256_0 >= DEFINED_OP && LA256_0 <= DIGIT_STR)||LA256_0==FALSE||(LA256_0 >= HEX_CONST && LA256_0 <= IDENT)||LA256_0==LBRACKET||LA256_0==LPAREN||LA256_0==MINUS||LA256_0==M_REAL_CONST||LA256_0==NOT||LA256_0==OCT_CONST||LA256_0==PLUS||LA256_0==TRUE) ) {
						alt256=1;
					}
					switch (alt256) {
						case 1 :
							// MFortranParser2018.g:2831:14: expr
							{
							pushFollow(FOLLOW_expr_in_substring_range_or_arg_list11907);
							expr();
							state._fsp--;
							if (state.failed) return sType;
							if ( state.backtracking==0 ) {hasUB = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.substring_range(hasLB, hasUB);
					          sType = MFPUtils.DOFR_SRNG;
					        }
					}
					break;
				case 2 :
					// MFortranParser2018.g:2835:7: expr substr_range_or_arg_list_suffix
					{
					pushFollow(FOLLOW_expr_in_substring_range_or_arg_list11930);
					expr();
					state._fsp--;
					if (state.failed) return sType;
					pushFollow(FOLLOW_substr_range_or_arg_list_suffix_in_substring_range_or_arg_list11932);
					substr_range_or_arg_list_suffix219=substr_range_or_arg_list_suffix();
					state._fsp--;
					if (state.failed) return sType;
					if ( state.backtracking==0 ) { sType = substr_range_or_arg_list_suffix219; }
					}
					break;
				case 3 :
					// MFortranParser2018.g:2837:7: IDENT EQUALS expr ( COMMA actual_arg_spec )*
					{
					IDENT220=(Token)match(input,IDENT,FOLLOW_IDENT_in_substring_range_or_arg_list11950); if (state.failed) return sType;
					match(input,EQUALS,FOLLOW_EQUALS_in_substring_range_or_arg_list11952); if (state.failed) return sType;
					pushFollow(FOLLOW_expr_in_substring_range_or_arg_list11954);
					expr();
					state._fsp--;
					if (state.failed) return sType;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(IDENT220, null, null); }
					// MFortranParser2018.g:2839:7: ( COMMA actual_arg_spec )*
					loop257:
					while (true) {
						int alt257=2;
						int LA257_0 = input.LA(1);
						if ( (LA257_0==COMMA) ) {
							alt257=1;
						}

						switch (alt257) {
						case 1 :
							// MFortranParser2018.g:2839:9: COMMA actual_arg_spec
							{
							match(input,COMMA,FOLLOW_COMMA_in_substring_range_or_arg_list11976); if (state.failed) return sType;
							pushFollow(FOLLOW_actual_arg_spec_in_substring_range_or_arg_list11978);
							actual_arg_spec();
							state._fsp--;
							if (state.failed) return sType;
							if ( state.backtracking==0 ) {numAAS++;}
							}
							break;

						default :
							break loop257;
						}
					}

					if ( state.backtracking==0 ) { MFPA.actual_arg_spec_list(numAAS);
					          sType = MFPUtils.DOFR_ARGS;
					        }
					}
					break;
				case 4 :
					// MFortranParser2018.g:2843:7: ( IDENT EQUALS )? ASTERISK lbl= label ( COMMA actual_arg_spec )*
					{
					// MFortranParser2018.g:2843:7: ( IDENT EQUALS )?
					int alt258=2;
					int LA258_0 = input.LA(1);
					if ( (LA258_0==IDENT) ) {
						alt258=1;
					}
					switch (alt258) {
						case 1 :
							// MFortranParser2018.g:2843:9: IDENT EQUALS
							{
							IDENT221=(Token)match(input,IDENT,FOLLOW_IDENT_in_substring_range_or_arg_list12003); if (state.failed) return sType;
							match(input,EQUALS,FOLLOW_EQUALS_in_substring_range_or_arg_list12005); if (state.failed) return sType;
							if ( state.backtracking==0 ) {keyword=IDENT221;}
							}
							break;

					}

					ASTERISK222=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_substring_range_or_arg_list12012); if (state.failed) return sType;
					pushFollow(FOLLOW_label_in_substring_range_or_arg_list12016);
					lbl=label();
					state._fsp--;
					if (state.failed) return sType;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(keyword, ASTERISK222, lbl); }
					// MFortranParser2018.g:2845:7: ( COMMA actual_arg_spec )*
					loop259:
					while (true) {
						int alt259=2;
						int LA259_0 = input.LA(1);
						if ( (LA259_0==COMMA) ) {
							alt259=1;
						}

						switch (alt259) {
						case 1 :
							// MFortranParser2018.g:2845:9: COMMA actual_arg_spec
							{
							match(input,COMMA,FOLLOW_COMMA_in_substring_range_or_arg_list12037); if (state.failed) return sType;
							pushFollow(FOLLOW_actual_arg_spec_in_substring_range_or_arg_list12039);
							actual_arg_spec();
							state._fsp--;
							if (state.failed) return sType;
							if ( state.backtracking==0 ) {numAAS++;}
							}
							break;

						default :
							break loop259;
						}
					}

					if ( state.backtracking==0 ) { MFPA.actual_arg_spec_list(numAAS);
					          sType = MFPUtils.DOFR_ARGS;
					        }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.substring_range_or_arg_list();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return sType;
	}
	// $ANTLR end "substring_range_or_arg_list"



	// $ANTLR start "substr_range_or_arg_list_suffix"
	// MFortranParser2018.g:2851:1: substr_range_or_arg_list_suffix returns [int sType] : ( COLON ( expr )? | ( COMMA actual_arg_spec )* );
	public final int substr_range_or_arg_list_suffix() throws RecognitionException {
		int sType = 0;



		  boolean hasUB = false; 
		  boolean hasLB = true; 
		  int numAAS = 1;
		  int error = -1;

		try {
			// MFortranParser2018.g:2861:5: ( COLON ( expr )? | ( COMMA actual_arg_spec )* )
			int alt263=2;
			int LA263_0 = input.LA(1);
			if ( (LA263_0==COLON) ) {
				alt263=1;
			}
			else if ( (LA263_0==COMMA||LA263_0==RPAREN) ) {
				alt263=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return sType;}
				NoViableAltException nvae =
					new NoViableAltException("", 263, 0, input);
				throw nvae;
			}

			switch (alt263) {
				case 1 :
					// MFortranParser2018.g:2861:9: COLON ( expr )?
					{
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec_list(error); }
					match(input,COLON,FOLLOW_COLON_in_substr_range_or_arg_list_suffix12093); if (state.failed) return sType;
					// MFortranParser2018.g:2862:13: ( expr )?
					int alt261=2;
					int LA261_0 = input.LA(1);
					if ( (LA261_0==BIN_CONST||LA261_0==CHAR_CONST||(LA261_0 >= DEFINED_OP && LA261_0 <= DIGIT_STR)||LA261_0==FALSE||(LA261_0 >= HEX_CONST && LA261_0 <= IDENT)||LA261_0==LBRACKET||LA261_0==LPAREN||LA261_0==MINUS||LA261_0==M_REAL_CONST||LA261_0==NOT||LA261_0==OCT_CONST||LA261_0==PLUS||LA261_0==TRUE) ) {
						alt261=1;
					}
					switch (alt261) {
						case 1 :
							// MFortranParser2018.g:2862:14: expr
							{
							pushFollow(FOLLOW_expr_in_substr_range_or_arg_list_suffix12096);
							expr();
							state._fsp--;
							if (state.failed) return sType;
							if ( state.backtracking==0 ) {hasUB=true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.substring_range(hasLB, hasUB);
					          sType = MFPUtils.DOFR_SRNG;
					        }
					}
					break;
				case 2 :
					// MFortranParser2018.g:2866:8: ( COMMA actual_arg_spec )*
					{
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(null, null, null); }
					// MFortranParser2018.g:2867:7: ( COMMA actual_arg_spec )*
					loop262:
					while (true) {
						int alt262=2;
						int LA262_0 = input.LA(1);
						if ( (LA262_0==COMMA) ) {
							alt262=1;
						}

						switch (alt262) {
						case 1 :
							// MFortranParser2018.g:2867:9: COMMA actual_arg_spec
							{
							match(input,COMMA,FOLLOW_COMMA_in_substr_range_or_arg_list_suffix12132); if (state.failed) return sType;
							pushFollow(FOLLOW_actual_arg_spec_in_substr_range_or_arg_list_suffix12134);
							actual_arg_spec();
							state._fsp--;
							if (state.failed) return sType;
							if ( state.backtracking==0 ) {numAAS++;}
							}
							break;

						default :
							break loop262;
						}
					}

					if ( state.backtracking==0 ) { MFPA.actual_arg_spec_list(numAAS);
					          sType = MFPUtils.DOFR_ARGS;
					        }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.substr_range_or_arg_list_suffix();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return sType;
	}
	// $ANTLR end "substr_range_or_arg_list_suffix"



	// $ANTLR start "variable"
	// MFortranParser2018.g:2876:1: variable : designator ;
	public final void variable() throws RecognitionException {
		try {
			// MFortranParser2018.g:2877:5: ( designator )
			// MFortranParser2018.g:2877:7: designator
			{
			pushFollow(FOLLOW_designator_in_variable12169);
			designator();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.variable(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "variable"



	// $ANTLR start "logical_variable"
	// MFortranParser2018.g:2890:1: logical_variable : variable ;
	public final void logical_variable() throws RecognitionException {
		try {
			// MFortranParser2018.g:2891:5: ( variable )
			// MFortranParser2018.g:2891:7: variable
			{
			pushFollow(FOLLOW_variable_in_logical_variable12201);
			variable();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.logical_variable(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "logical_variable"



	// $ANTLR start "char_variable"
	// MFortranParser2018.g:2898:1: char_variable : variable ;
	public final void char_variable() throws RecognitionException {
		try {
			// MFortranParser2018.g:2899:5: ( variable )
			// MFortranParser2018.g:2899:7: variable
			{
			pushFollow(FOLLOW_variable_in_char_variable12229);
			variable();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.char_variable(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "char_variable"



	// $ANTLR start "default_char_variable"
	// MFortranParser2018.g:2907:1: default_char_variable : variable ;
	public final void default_char_variable() throws RecognitionException {
		try {
			// MFortranParser2018.g:2908:5: ( variable )
			// MFortranParser2018.g:2908:7: variable
			{
			pushFollow(FOLLOW_variable_in_default_char_variable12257);
			variable();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.default_char_variable(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "default_char_variable"



	// $ANTLR start "int_variable"
	// MFortranParser2018.g:2915:1: int_variable : variable ;
	public final void int_variable() throws RecognitionException {
		try {
			// MFortranParser2018.g:2916:5: ( variable )
			// MFortranParser2018.g:2916:7: variable
			{
			pushFollow(FOLLOW_variable_in_int_variable12286);
			variable();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.int_variable(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "int_variable"



	// $ANTLR start "substring"
	// MFortranParser2018.g:2927:1: substring : ( data_ref ( LPAREN substring_range RPAREN )? | char_literal_constant LPAREN substring_range RPAREN );
	public final void substring() throws RecognitionException {

		  boolean hasSR = false;

		try {
			// MFortranParser2018.g:2934:5: ( data_ref ( LPAREN substring_range RPAREN )? | char_literal_constant LPAREN substring_range RPAREN )
			int alt265=2;
			int LA265_0 = input.LA(1);
			if ( (LA265_0==IDENT) ) {
				int LA265_1 = input.LA(2);
				if ( (LA265_1==COMMA||LA265_1==LBRACKET||LA265_1==LPAREN||LA265_1==PERCENT||LA265_1==RPAREN) ) {
					alt265=1;
				}
				else if ( (LA265_1==CHAR_CONST) ) {
					alt265=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 265, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA265_0==CHAR_CONST||LA265_0==DIGIT_STR) ) {
				alt265=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 265, 0, input);
				throw nvae;
			}

			switch (alt265) {
				case 1 :
					// MFortranParser2018.g:2934:7: data_ref ( LPAREN substring_range RPAREN )?
					{
					pushFollow(FOLLOW_data_ref_in_substring12323);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:2935:7: ( LPAREN substring_range RPAREN )?
					int alt264=2;
					int LA264_0 = input.LA(1);
					if ( (LA264_0==LPAREN) ) {
						alt264=1;
					}
					switch (alt264) {
						case 1 :
							// MFortranParser2018.g:2935:8: LPAREN substring_range RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_substring12333); if (state.failed) return;
							pushFollow(FOLLOW_substring_range_in_substring12335);
							substring_range();
							state._fsp--;
							if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_substring12337); if (state.failed) return;
							if ( state.backtracking==0 ) {hasSR=true;}
							}
							break;

					}

					}
					break;
				case 2 :
					// MFortranParser2018.g:2936:7: char_literal_constant LPAREN substring_range RPAREN
					{
					pushFollow(FOLLOW_char_literal_constant_in_substring12349);
					char_literal_constant();
					state._fsp--;
					if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_substring12358); if (state.failed) return;
					pushFollow(FOLLOW_substring_range_in_substring12360);
					substring_range();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_substring12362); if (state.failed) return;
					if ( state.backtracking==0 ) {hasSR=true;}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.substring(hasSR);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "substring"



	// $ANTLR start "substring_range"
	// MFortranParser2018.g:2955:1: substring_range : ( expr )? COLON ( expr )? ;
	public final void substring_range() throws RecognitionException {

		  boolean hasUB = false;
		  boolean hasLB = false;

		try {
			// MFortranParser2018.g:2960:5: ( ( expr )? COLON ( expr )? )
			// MFortranParser2018.g:2960:7: ( expr )? COLON ( expr )?
			{
			// MFortranParser2018.g:2960:7: ( expr )?
			int alt266=2;
			int LA266_0 = input.LA(1);
			if ( (LA266_0==BIN_CONST||LA266_0==CHAR_CONST||(LA266_0 >= DEFINED_OP && LA266_0 <= DIGIT_STR)||LA266_0==FALSE||(LA266_0 >= HEX_CONST && LA266_0 <= IDENT)||LA266_0==LBRACKET||LA266_0==LPAREN||LA266_0==MINUS||LA266_0==M_REAL_CONST||LA266_0==NOT||LA266_0==OCT_CONST||LA266_0==PLUS||LA266_0==TRUE) ) {
				alt266=1;
			}
			switch (alt266) {
				case 1 :
					// MFortranParser2018.g:2960:8: expr
					{
					pushFollow(FOLLOW_expr_in_substring_range12391);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasLB = true;}
					}
					break;

			}

			match(input,COLON,FOLLOW_COLON_in_substring_range12397); if (state.failed) return;
			// MFortranParser2018.g:2960:37: ( expr )?
			int alt267=2;
			int LA267_0 = input.LA(1);
			if ( (LA267_0==BIN_CONST||LA267_0==CHAR_CONST||(LA267_0 >= DEFINED_OP && LA267_0 <= DIGIT_STR)||LA267_0==FALSE||(LA267_0 >= HEX_CONST && LA267_0 <= IDENT)||LA267_0==LBRACKET||LA267_0==LPAREN||LA267_0==MINUS||LA267_0==M_REAL_CONST||LA267_0==NOT||LA267_0==OCT_CONST||LA267_0==PLUS||LA267_0==TRUE) ) {
				alt267=1;
			}
			switch (alt267) {
				case 1 :
					// MFortranParser2018.g:2960:38: expr
					{
					pushFollow(FOLLOW_expr_in_substring_range12400);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasUB = true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.substring_range(hasLB, hasUB); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "substring_range"



	// $ANTLR start "data_ref"
	// MFortranParser2018.g:2967:1: data_ref : part_ref ( PERCENT part_ref )* ;
	public final void data_ref() throws RecognitionException {

		  int numPR = 1;

		try {
			// MFortranParser2018.g:2974:5: ( part_ref ( PERCENT part_ref )* )
			// MFortranParser2018.g:2974:7: part_ref ( PERCENT part_ref )*
			{
			pushFollow(FOLLOW_part_ref_in_data_ref12441);
			part_ref();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:2975:7: ( PERCENT part_ref )*
			loop268:
			while (true) {
				int alt268=2;
				int LA268_0 = input.LA(1);
				if ( (LA268_0==PERCENT) ) {
					alt268=1;
				}

				switch (alt268) {
				case 1 :
					// MFortranParser2018.g:2975:9: PERCENT part_ref
					{
					match(input,PERCENT,FOLLOW_PERCENT_in_data_ref12451); if (state.failed) return;
					pushFollow(FOLLOW_part_ref_in_data_ref12453);
					part_ref();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPR++;}
					}
					break;

				default :
					break loop268;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.data_ref(numPR);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_ref"



	// $ANTLR start "part_ref"
	// MFortranParser2018.g:2987:1: part_ref options {k=2; } : ( ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN ( image_selector )? | ( IDENT LBRACKET )=> IDENT image_selector | IDENT );
	public final void part_ref() throws RecognitionException {
		Token IDENT223=null;
		Token IDENT224=null;
		Token IDENT225=null;


		  boolean hasSSL = false; 
		  boolean hasIS = false;
		  Token id = null;

		try {
			// MFortranParser2018.g:2997:5: ( ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN ( image_selector )? | ( IDENT LBRACKET )=> IDENT image_selector | IDENT )
			int alt270=3;
			int LA270_0 = input.LA(1);
			if ( (LA270_0==IDENT) ) {
				int LA270_1 = input.LA(2);
				if ( (LA270_1==LPAREN) ) {
					int LA270_2 = input.LA(3);
					if ( (synpred23_MFortranParser2018()) ) {
						alt270=1;
					}
					else if ( (true) ) {
						alt270=3;
					}

				}
				else if ( (LA270_1==LBRACKET) && (synpred24_MFortranParser2018())) {
					alt270=2;
				}
				else if ( (LA270_1==EOF||LA270_1==AND||LA270_1==ASTERISK||(LA270_1 >= COLON && LA270_1 <= COMMA)||LA270_1==DEFINED_OP||(LA270_1 >= EOS && LA270_1 <= EQUALS)||(LA270_1 >= EQV && LA270_1 <= EQ_GT)||LA270_1==GE||(LA270_1 >= GREATERTHAN && LA270_1 <= GT)||LA270_1==LE||(LA270_1 >= LESSTHAN && LA270_1 <= LESSTHAN_EQ)||LA270_1==LT||LA270_1==MINUS||(LA270_1 >= NE && LA270_1 <= NEQV)||LA270_1==OR||LA270_1==PERCENT||LA270_1==PLUS||LA270_1==POWER||LA270_1==RBRACKET||LA270_1==RPAREN||(LA270_1 >= SLASH && LA270_1 <= SLASH_SLASH)) ) {
					alt270=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 270, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 270, 0, input);
				throw nvae;
			}

			switch (alt270) {
				case 1 :
					// MFortranParser2018.g:2997:7: ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN ( image_selector )?
					{
					IDENT223=(Token)match(input,IDENT,FOLLOW_IDENT_in_part_ref12510); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_part_ref12512); if (state.failed) return;
					pushFollow(FOLLOW_section_subscript_list_in_part_ref12514);
					section_subscript_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_part_ref12516); if (state.failed) return;
					// MFortranParser2018.g:2999:11: ( image_selector )?
					int alt269=2;
					int LA269_0 = input.LA(1);
					if ( (LA269_0==LBRACKET) ) {
						alt269=1;
					}
					switch (alt269) {
						case 1 :
							// MFortranParser2018.g:2999:12: image_selector
							{
							pushFollow(FOLLOW_image_selector_in_part_ref12529);
							image_selector();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasIS=true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { hasSSL=true; id=IDENT223;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3001:7: ( IDENT LBRACKET )=> IDENT image_selector
					{
					IDENT224=(Token)match(input,IDENT,FOLLOW_IDENT_in_part_ref12570); if (state.failed) return;
					pushFollow(FOLLOW_image_selector_in_part_ref12572);
					image_selector();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasIS=true; id=IDENT224;}
					}
					break;
				case 3 :
					// MFortranParser2018.g:3004:7: IDENT
					{
					IDENT225=(Token)match(input,IDENT,FOLLOW_IDENT_in_part_ref12590); if (state.failed) return;
					if ( state.backtracking==0 ) { id=IDENT225;}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.part_ref(id, hasSSL, hasIS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "part_ref"



	// $ANTLR start "part_ref_no_image_selector"
	// MFortranParser2018.g:3008:1: part_ref_no_image_selector options {k=2; } : ( ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN | IDENT );
	public final void part_ref_no_image_selector() throws RecognitionException {
		Token IDENT226=null;
		Token IDENT227=null;


		  boolean hasSSL = false; 
		  boolean hasIS = false;
		  Token id = null;

		try {
			// MFortranParser2018.g:3018:5: ( ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN | IDENT )
			int alt271=2;
			int LA271_0 = input.LA(1);
			if ( (LA271_0==IDENT) ) {
				int LA271_1 = input.LA(2);
				if ( (LA271_1==LPAREN) && (synpred25_MFortranParser2018())) {
					alt271=1;
				}
				else if ( (LA271_1==EOF||LA271_1==COMMA||LA271_1==LBRACKET||LA271_1==PERCENT||LA271_1==RPAREN) ) {
					alt271=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 271, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 271, 0, input);
				throw nvae;
			}

			switch (alt271) {
				case 1 :
					// MFortranParser2018.g:3018:7: ( IDENT LPAREN )=> IDENT LPAREN section_subscript_list RPAREN
					{
					IDENT226=(Token)match(input,IDENT,FOLLOW_IDENT_in_part_ref_no_image_selector12651); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_part_ref_no_image_selector12653); if (state.failed) return;
					pushFollow(FOLLOW_section_subscript_list_in_part_ref_no_image_selector12655);
					section_subscript_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_part_ref_no_image_selector12657); if (state.failed) return;
					if ( state.backtracking==0 ) { hasSSL=true; id=IDENT226;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3021:7: IDENT
					{
					IDENT227=(Token)match(input,IDENT,FOLLOW_IDENT_in_part_ref_no_image_selector12675); if (state.failed) return;
					if ( state.backtracking==0 ) { id=IDENT227;}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.part_ref(id, hasSSL, hasIS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "part_ref_no_image_selector"



	// $ANTLR start "section_subscript"
	// MFortranParser2018.g:3068:1: section_subscript returns [boolean isEmpty] : ( expr section_subscript_ambiguous | COLON ( expr )? ( COLON expr )? | COLON_COLON expr | IDENT EQUALS expr | IDENT EQUALS ASTERISK lbl= label | ASTERISK lbl= label |);
	public final boolean section_subscript() throws RecognitionException {
		boolean isEmpty = false;


		Token IDENT228=null;
		Token IDENT229=null;
		Token ASTERISK230=null;
		Token ASTERISK231=null;
		Token lbl =null;


		  boolean hasUB = false;
		  boolean hasLB = false;
		  boolean hasStrd = false;
		  boolean isAmbiguous = false; 

		try {
			// MFortranParser2018.g:3075:5: ( expr section_subscript_ambiguous | COLON ( expr )? ( COLON expr )? | COLON_COLON expr | IDENT EQUALS expr | IDENT EQUALS ASTERISK lbl= label | ASTERISK lbl= label |)
			int alt274=7;
			switch ( input.LA(1) ) {
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt274=1;
				}
				break;
			case IDENT:
				{
				int LA274_2 = input.LA(2);
				if ( (LA274_2==AND||LA274_2==ASTERISK||LA274_2==CHAR_CONST||(LA274_2 >= COLON && LA274_2 <= COMMA)||LA274_2==DEFINED_OP||LA274_2==EQ||(LA274_2 >= EQV && LA274_2 <= EQ_EQ)||LA274_2==GE||(LA274_2 >= GREATERTHAN && LA274_2 <= GT)||(LA274_2 >= LBRACKET && LA274_2 <= LE)||(LA274_2 >= LESSTHAN && LA274_2 <= LESSTHAN_EQ)||(LA274_2 >= LPAREN && LA274_2 <= LT)||LA274_2==MINUS||(LA274_2 >= NE && LA274_2 <= NEQV)||LA274_2==OR||LA274_2==PERCENT||LA274_2==PLUS||LA274_2==POWER||LA274_2==RPAREN||(LA274_2 >= SLASH && LA274_2 <= SLASH_SLASH)) ) {
					alt274=1;
				}
				else if ( (LA274_2==EQUALS) ) {
					int LA274_7 = input.LA(3);
					if ( (LA274_7==ASTERISK) ) {
						alt274=5;
					}
					else if ( (LA274_7==BIN_CONST||LA274_7==CHAR_CONST||(LA274_7 >= DEFINED_OP && LA274_7 <= DIGIT_STR)||LA274_7==FALSE||(LA274_7 >= HEX_CONST && LA274_7 <= IDENT)||LA274_7==LBRACKET||LA274_7==LPAREN||LA274_7==MINUS||LA274_7==M_REAL_CONST||LA274_7==NOT||LA274_7==OCT_CONST||LA274_7==PLUS||LA274_7==TRUE) ) {
						alt274=4;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return isEmpty;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 274, 7, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return isEmpty;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 274, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case COLON:
				{
				alt274=2;
				}
				break;
			case COLON_COLON:
				{
				alt274=3;
				}
				break;
			case ASTERISK:
				{
				alt274=6;
				}
				break;
			case COMMA:
			case RPAREN:
				{
				alt274=7;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return isEmpty;}
				NoViableAltException nvae =
					new NoViableAltException("", 274, 0, input);
				throw nvae;
			}
			switch (alt274) {
				case 1 :
					// MFortranParser2018.g:3075:7: expr section_subscript_ambiguous
					{
					pushFollow(FOLLOW_expr_in_section_subscript12736);
					expr();
					state._fsp--;
					if (state.failed) return isEmpty;
					pushFollow(FOLLOW_section_subscript_ambiguous_in_section_subscript12738);
					section_subscript_ambiguous();
					state._fsp--;
					if (state.failed) return isEmpty;
					}
					break;
				case 2 :
					// MFortranParser2018.g:3076:7: COLON ( expr )? ( COLON expr )?
					{
					match(input,COLON,FOLLOW_COLON_in_section_subscript12746); if (state.failed) return isEmpty;
					// MFortranParser2018.g:3076:13: ( expr )?
					int alt272=2;
					int LA272_0 = input.LA(1);
					if ( (LA272_0==BIN_CONST||LA272_0==CHAR_CONST||(LA272_0 >= DEFINED_OP && LA272_0 <= DIGIT_STR)||LA272_0==FALSE||(LA272_0 >= HEX_CONST && LA272_0 <= IDENT)||LA272_0==LBRACKET||LA272_0==LPAREN||LA272_0==MINUS||LA272_0==M_REAL_CONST||LA272_0==NOT||LA272_0==OCT_CONST||LA272_0==PLUS||LA272_0==TRUE) ) {
						alt272=1;
					}
					switch (alt272) {
						case 1 :
							// MFortranParser2018.g:3076:14: expr
							{
							pushFollow(FOLLOW_expr_in_section_subscript12749);
							expr();
							state._fsp--;
							if (state.failed) return isEmpty;
							if ( state.backtracking==0 ) {hasUB=true;}
							}
							break;

					}

					// MFortranParser2018.g:3076:35: ( COLON expr )?
					int alt273=2;
					int LA273_0 = input.LA(1);
					if ( (LA273_0==COLON) ) {
						alt273=1;
					}
					switch (alt273) {
						case 1 :
							// MFortranParser2018.g:3076:36: COLON expr
							{
							match(input,COLON,FOLLOW_COLON_in_section_subscript12756); if (state.failed) return isEmpty;
							pushFollow(FOLLOW_expr_in_section_subscript12758);
							expr();
							state._fsp--;
							if (state.failed) return isEmpty;
							if ( state.backtracking==0 ) {hasStrd=true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.section_subscript(hasLB, hasUB, hasStrd, isAmbiguous); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:3078:7: COLON_COLON expr
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_section_subscript12780); if (state.failed) return isEmpty;
					pushFollow(FOLLOW_expr_in_section_subscript12782);
					expr();
					state._fsp--;
					if (state.failed) return isEmpty;
					if ( state.backtracking==0 ) { MFPA.section_subscript(hasLB, hasUB, true, isAmbiguous); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:3080:7: IDENT EQUALS expr
					{
					IDENT228=(Token)match(input,IDENT,FOLLOW_IDENT_in_section_subscript12800); if (state.failed) return isEmpty;
					match(input,EQUALS,FOLLOW_EQUALS_in_section_subscript12802); if (state.failed) return isEmpty;
					pushFollow(FOLLOW_expr_in_section_subscript12804);
					expr();
					state._fsp--;
					if (state.failed) return isEmpty;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(IDENT228, null, null); }
					}
					break;
				case 5 :
					// MFortranParser2018.g:3082:7: IDENT EQUALS ASTERISK lbl= label
					{
					IDENT229=(Token)match(input,IDENT,FOLLOW_IDENT_in_section_subscript12827); if (state.failed) return isEmpty;
					match(input,EQUALS,FOLLOW_EQUALS_in_section_subscript12829); if (state.failed) return isEmpty;
					ASTERISK230=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_section_subscript12831); if (state.failed) return isEmpty;
					pushFollow(FOLLOW_label_in_section_subscript12835);
					lbl=label();
					state._fsp--;
					if (state.failed) return isEmpty;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(IDENT229, ASTERISK230, lbl); }
					}
					break;
				case 6 :
					// MFortranParser2018.g:3084:7: ASTERISK lbl= label
					{
					ASTERISK231=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_section_subscript12854); if (state.failed) return isEmpty;
					pushFollow(FOLLOW_label_in_section_subscript12858);
					lbl=label();
					state._fsp--;
					if (state.failed) return isEmpty;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(null, ASTERISK231, lbl); }
					}
					break;
				case 7 :
					// MFortranParser2018.g:3086:7: 
					{
					if ( state.backtracking==0 ) { isEmpty = true; }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return isEmpty;
	}
	// $ANTLR end "section_subscript"



	// $ANTLR start "section_subscript_ambiguous"
	// MFortranParser2018.g:3089:1: section_subscript_ambiguous : ( COLON ( expr )? ( COLON expr )? | COLON_COLON expr |);
	public final void section_subscript_ambiguous() throws RecognitionException {

		  boolean hasUB = false;
		  boolean hasLB = true;
		  boolean hasStrd = false;
		  boolean isAmbiguous = false; 

		try {
			// MFortranParser2018.g:3099:5: ( COLON ( expr )? ( COLON expr )? | COLON_COLON expr |)
			int alt277=3;
			switch ( input.LA(1) ) {
			case COLON:
				{
				alt277=1;
				}
				break;
			case COLON_COLON:
				{
				alt277=2;
				}
				break;
			case COMMA:
			case RPAREN:
				{
				alt277=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 277, 0, input);
				throw nvae;
			}
			switch (alt277) {
				case 1 :
					// MFortranParser2018.g:3099:7: COLON ( expr )? ( COLON expr )?
					{
					match(input,COLON,FOLLOW_COLON_in_section_subscript_ambiguous12932); if (state.failed) return;
					// MFortranParser2018.g:3099:13: ( expr )?
					int alt275=2;
					int LA275_0 = input.LA(1);
					if ( (LA275_0==BIN_CONST||LA275_0==CHAR_CONST||(LA275_0 >= DEFINED_OP && LA275_0 <= DIGIT_STR)||LA275_0==FALSE||(LA275_0 >= HEX_CONST && LA275_0 <= IDENT)||LA275_0==LBRACKET||LA275_0==LPAREN||LA275_0==MINUS||LA275_0==M_REAL_CONST||LA275_0==NOT||LA275_0==OCT_CONST||LA275_0==PLUS||LA275_0==TRUE) ) {
						alt275=1;
					}
					switch (alt275) {
						case 1 :
							// MFortranParser2018.g:3099:14: expr
							{
							pushFollow(FOLLOW_expr_in_section_subscript_ambiguous12935);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasUB=true;}
							}
							break;

					}

					// MFortranParser2018.g:3099:35: ( COLON expr )?
					int alt276=2;
					int LA276_0 = input.LA(1);
					if ( (LA276_0==COLON) ) {
						alt276=1;
					}
					switch (alt276) {
						case 1 :
							// MFortranParser2018.g:3099:36: COLON expr
							{
							match(input,COLON,FOLLOW_COLON_in_section_subscript_ambiguous12942); if (state.failed) return;
							pushFollow(FOLLOW_expr_in_section_subscript_ambiguous12944);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasStrd=true;}
							}
							break;

					}

					}
					break;
				case 2 :
					// MFortranParser2018.g:3107:7: COLON_COLON expr
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_section_subscript_ambiguous12964); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_section_subscript_ambiguous12966);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasStrd=true; }
					}
					break;
				case 3 :
					// MFortranParser2018.g:3108:8: 
					{
					if ( state.backtracking==0 ) { isAmbiguous=true; }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.section_subscript(hasLB, hasUB, hasStrd, isAmbiguous);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "section_subscript_ambiguous"



	// $ANTLR start "section_subscript_list"
	// MFortranParser2018.g:3111:1: section_subscript_list : isEmpty= section_subscript ( COMMA section_subscript )* ;
	public final void section_subscript_list() throws RecognitionException {
		boolean isEmpty =false;


		  int numSS = 1;

		try {
			// MFortranParser2018.g:3118:5: (isEmpty= section_subscript ( COMMA section_subscript )* )
			// MFortranParser2018.g:3118:7: isEmpty= section_subscript ( COMMA section_subscript )*
			{
			pushFollow(FOLLOW_section_subscript_in_section_subscript_list13008);
			isEmpty=section_subscript();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { if (isEmpty) numSS--; }
			// MFortranParser2018.g:3119:7: ( COMMA section_subscript )*
			loop278:
			while (true) {
				int alt278=2;
				int LA278_0 = input.LA(1);
				if ( (LA278_0==COMMA) ) {
					alt278=1;
				}

				switch (alt278) {
				case 1 :
					// MFortranParser2018.g:3119:8: COMMA section_subscript
					{
					match(input,COMMA,FOLLOW_COMMA_in_section_subscript_list13019); if (state.failed) return;
					pushFollow(FOLLOW_section_subscript_in_section_subscript_list13021);
					section_subscript();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numSS++;}
					}
					break;

				default :
					break loop278;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.section_subscript_list(numSS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "section_subscript_list"



	// $ANTLR start "image_selector"
	// MFortranParser2018.g:3133:1: image_selector : LBRACKET cosubscript_list ( COMMA image_selector_spec_list ) RBRACKET ;
	public final void image_selector() throws RecognitionException {

		  boolean hasISSL = false;

		try {
			// MFortranParser2018.g:3137:5: ( LBRACKET cosubscript_list ( COMMA image_selector_spec_list ) RBRACKET )
			// MFortranParser2018.g:3137:7: LBRACKET cosubscript_list ( COMMA image_selector_spec_list ) RBRACKET
			{
			match(input,LBRACKET,FOLLOW_LBRACKET_in_image_selector13051); if (state.failed) return;
			pushFollow(FOLLOW_cosubscript_list_in_image_selector13053);
			cosubscript_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3137:33: ( COMMA image_selector_spec_list )
			// MFortranParser2018.g:3137:34: COMMA image_selector_spec_list
			{
			match(input,COMMA,FOLLOW_COMMA_in_image_selector13056); if (state.failed) return;
			pushFollow(FOLLOW_image_selector_spec_list_in_image_selector13058);
			image_selector_spec_list();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {hasISSL=true;}
			}

			match(input,RBRACKET,FOLLOW_RBRACKET_in_image_selector13064); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.image_selector(hasISSL);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "image_selector"



	// $ANTLR start "cosubscript_list"
	// MFortranParser2018.g:3145:1: cosubscript_list : expr ( COMMA expr )* ;
	public final void cosubscript_list() throws RecognitionException {

		  int numE = 1;

		try {
			// MFortranParser2018.g:3152:5: ( expr ( COMMA expr )* )
			// MFortranParser2018.g:3152:7: expr ( COMMA expr )*
			{
			pushFollow(FOLLOW_expr_in_cosubscript_list13101);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3153:7: ( COMMA expr )*
			loop279:
			while (true) {
				int alt279=2;
				int LA279_0 = input.LA(1);
				if ( (LA279_0==COMMA) ) {
					int LA279_1 = input.LA(2);
					if ( (LA279_1==BIN_CONST||LA279_1==CHAR_CONST||(LA279_1 >= DEFINED_OP && LA279_1 <= DIGIT_STR)||LA279_1==FALSE||(LA279_1 >= HEX_CONST && LA279_1 <= IDENT)||LA279_1==LBRACKET||LA279_1==LPAREN||LA279_1==MINUS||LA279_1==M_REAL_CONST||LA279_1==NOT||LA279_1==OCT_CONST||LA279_1==PLUS||LA279_1==TRUE) ) {
						alt279=1;
					}

				}

				switch (alt279) {
				case 1 :
					// MFortranParser2018.g:3153:9: COMMA expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_cosubscript_list13111); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_cosubscript_list13113);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numE++;}
					}
					break;

				default :
					break loop279;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.cosubscript_list(numE);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "cosubscript_list"



	// $ANTLR start "image_selector_spec"
	// MFortranParser2018.g:3162:1: image_selector_spec : ( STAT EQUALS designator | TEAM EQUALS expr | TEAM_NUMBER EQUALS expr );
	public final void image_selector_spec() throws RecognitionException {
		Token STAT232=null;
		Token TEAM233=null;
		Token TEAM_NUMBER234=null;

		try {
			// MFortranParser2018.g:3163:5: ( STAT EQUALS designator | TEAM EQUALS expr | TEAM_NUMBER EQUALS expr )
			int alt280=3;
			switch ( input.LA(1) ) {
			case STAT:
				{
				alt280=1;
				}
				break;
			case TEAM:
				{
				alt280=2;
				}
				break;
			case TEAM_NUMBER:
				{
				alt280=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 280, 0, input);
				throw nvae;
			}
			switch (alt280) {
				case 1 :
					// MFortranParser2018.g:3163:7: STAT EQUALS designator
					{
					STAT232=(Token)match(input,STAT,FOLLOW_STAT_in_image_selector_spec13137); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_image_selector_spec13139); if (state.failed) return;
					pushFollow(FOLLOW_designator_in_image_selector_spec13141);
					designator();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.image_selector_spec(STAT232, 
					              MFPUtils.ATTR_STAT); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3166:7: TEAM EQUALS expr
					{
					TEAM233=(Token)match(input,TEAM,FOLLOW_TEAM_in_image_selector_spec13159); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_image_selector_spec13161); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_image_selector_spec13163);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.image_selector_spec(TEAM233, 
					              MFPUtils.ATTR_TEAM); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:3169:7: TEAM_NUMBER EQUALS expr
					{
					TEAM_NUMBER234=(Token)match(input,TEAM_NUMBER,FOLLOW_TEAM_NUMBER_in_image_selector_spec13181); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_image_selector_spec13183); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_image_selector_spec13185);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.image_selector_spec(TEAM_NUMBER234, 
					              MFPUtils.ATTR_TEAM_NUMBER); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "image_selector_spec"



	// $ANTLR start "image_selector_spec_list"
	// MFortranParser2018.g:3175:1: image_selector_spec_list : image_selector_spec ( COMMA image_selector_spec )* ;
	public final void image_selector_spec_list() throws RecognitionException {

		  int numISS = 1;

		try {
			// MFortranParser2018.g:3182:5: ( image_selector_spec ( COMMA image_selector_spec )* )
			// MFortranParser2018.g:3182:7: image_selector_spec ( COMMA image_selector_spec )*
			{
			pushFollow(FOLLOW_image_selector_spec_in_image_selector_spec_list13221);
			image_selector_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3183:7: ( COMMA image_selector_spec )*
			loop281:
			while (true) {
				int alt281=2;
				int LA281_0 = input.LA(1);
				if ( (LA281_0==COMMA) ) {
					alt281=1;
				}

				switch (alt281) {
				case 1 :
					// MFortranParser2018.g:3183:9: COMMA image_selector_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_image_selector_spec_list13231); if (state.failed) return;
					pushFollow(FOLLOW_image_selector_spec_in_image_selector_spec_list13233);
					image_selector_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numISS++;}
					}
					break;

				default :
					break loop281;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.image_selector_spec_list(numISS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "image_selector_spec_list"



	// $ANTLR start "allocate_stmt"
	// MFortranParser2018.g:3192:1: allocate_stmt : ( (lbl= label )? M_ALLOCATE_STMT_1 ALLOCATE LPAREN type_spec COLON_COLON allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt | (lbl= label )? ALLOCATE LPAREN allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt );
	public final void allocate_stmt() throws RecognitionException {
		Token ALLOCATE235=null;
		Token ALLOCATE237=null;
		Token lbl =null;
		Token end_of_stmt236 =null;
		Token end_of_stmt238 =null;


		  boolean hasTS = false;
		  boolean hasAOL = false;

		try {
			// MFortranParser2018.g:3200:5: ( (lbl= label )? M_ALLOCATE_STMT_1 ALLOCATE LPAREN type_spec COLON_COLON allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt | (lbl= label )? ALLOCATE LPAREN allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt )
			int alt286=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA286_1 = input.LA(2);
				if ( (LA286_1==M_ALLOCATE_STMT_1) ) {
					alt286=1;
				}
				else if ( (LA286_1==ALLOCATE) ) {
					alt286=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 286, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_ALLOCATE_STMT_1:
				{
				alt286=1;
				}
				break;
			case ALLOCATE:
				{
				alt286=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 286, 0, input);
				throw nvae;
			}
			switch (alt286) {
				case 1 :
					// MFortranParser2018.g:3200:7: (lbl= label )? M_ALLOCATE_STMT_1 ALLOCATE LPAREN type_spec COLON_COLON allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt
					{
					// MFortranParser2018.g:3200:7: (lbl= label )?
					int alt282=2;
					int LA282_0 = input.LA(1);
					if ( (LA282_0==DIGIT_STR) ) {
						alt282=1;
					}
					switch (alt282) {
						case 1 :
							// MFortranParser2018.g:3200:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_allocate_stmt13268);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,M_ALLOCATE_STMT_1,FOLLOW_M_ALLOCATE_STMT_1_in_allocate_stmt13280); if (state.failed) return;
					ALLOCATE235=(Token)match(input,ALLOCATE,FOLLOW_ALLOCATE_in_allocate_stmt13282); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_allocate_stmt13284); if (state.failed) return;
					pushFollow(FOLLOW_type_spec_in_allocate_stmt13293);
					type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_allocate_stmt13295); if (state.failed) return;
					pushFollow(FOLLOW_allocation_list_in_allocate_stmt13297);
					allocation_list();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:3203:7: ( COMMA alloc_opt_list )?
					int alt283=2;
					int LA283_0 = input.LA(1);
					if ( (LA283_0==COMMA) ) {
						alt283=1;
					}
					switch (alt283) {
						case 1 :
							// MFortranParser2018.g:3203:9: COMMA alloc_opt_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_allocate_stmt13307); if (state.failed) return;
							pushFollow(FOLLOW_alloc_opt_list_in_allocate_stmt13309);
							alloc_opt_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasAOL=true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_allocate_stmt13316); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_allocate_stmt13325);
					end_of_stmt236=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.allocate_stmt(lbl, ALLOCATE235, 
					              end_of_stmt236, true, hasAOL);
					        }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3208:7: (lbl= label )? ALLOCATE LPAREN allocation_list ( COMMA alloc_opt_list )? RPAREN end_of_stmt
					{
					// MFortranParser2018.g:3208:7: (lbl= label )?
					int alt284=2;
					int LA284_0 = input.LA(1);
					if ( (LA284_0==DIGIT_STR) ) {
						alt284=1;
					}
					switch (alt284) {
						case 1 :
							// MFortranParser2018.g:3208:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_allocate_stmt13346);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ALLOCATE237=(Token)match(input,ALLOCATE,FOLLOW_ALLOCATE_in_allocate_stmt13358); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_allocate_stmt13360); if (state.failed) return;
					pushFollow(FOLLOW_allocation_list_in_allocate_stmt13362);
					allocation_list();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:3210:7: ( COMMA alloc_opt_list )?
					int alt285=2;
					int LA285_0 = input.LA(1);
					if ( (LA285_0==COMMA) ) {
						alt285=1;
					}
					switch (alt285) {
						case 1 :
							// MFortranParser2018.g:3210:9: COMMA alloc_opt_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_allocate_stmt13372); if (state.failed) return;
							pushFollow(FOLLOW_alloc_opt_list_in_allocate_stmt13374);
							alloc_opt_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasAOL=true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_allocate_stmt13381); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_allocate_stmt13389);
					end_of_stmt238=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.allocate_stmt(lbl, ALLOCATE237, 
					              end_of_stmt238, hasTS, hasAOL);
					        }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_stmt"



	// $ANTLR start "alloc_opt"
	// MFortranParser2018.g:3225:1: alloc_opt : ( ERRMSG EQUALS default_char_variable | MOLD EQUALS expr | SOURCE EQUALS expr | STAT EQUALS designator );
	public final void alloc_opt() throws RecognitionException {
		Token ERRMSG239=null;
		Token MOLD240=null;
		Token SOURCE241=null;
		Token STAT242=null;

		try {
			// MFortranParser2018.g:3226:5: ( ERRMSG EQUALS default_char_variable | MOLD EQUALS expr | SOURCE EQUALS expr | STAT EQUALS designator )
			int alt287=4;
			switch ( input.LA(1) ) {
			case ERRMSG:
				{
				alt287=1;
				}
				break;
			case MOLD:
				{
				alt287=2;
				}
				break;
			case SOURCE:
				{
				alt287=3;
				}
				break;
			case STAT:
				{
				alt287=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 287, 0, input);
				throw nvae;
			}
			switch (alt287) {
				case 1 :
					// MFortranParser2018.g:3226:7: ERRMSG EQUALS default_char_variable
					{
					ERRMSG239=(Token)match(input,ERRMSG,FOLLOW_ERRMSG_in_alloc_opt13418); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_alloc_opt13420); if (state.failed) return;
					pushFollow(FOLLOW_default_char_variable_in_alloc_opt13422);
					default_char_variable();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.alloc_opt(ERRMSG239, 
					              MFPUtils.ALLOC_OPT_ERRMSG); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3229:7: MOLD EQUALS expr
					{
					MOLD240=(Token)match(input,MOLD,FOLLOW_MOLD_in_alloc_opt13440); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_alloc_opt13442); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_alloc_opt13444);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.alloc_opt(MOLD240, 
					              MFPUtils.ALLOC_OPT_MOLD); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:3232:7: SOURCE EQUALS expr
					{
					SOURCE241=(Token)match(input,SOURCE,FOLLOW_SOURCE_in_alloc_opt13462); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_alloc_opt13464); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_alloc_opt13466);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.alloc_opt(SOURCE241, 
					              MFPUtils.ALLOC_OPT_SOURCE); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:3235:7: STAT EQUALS designator
					{
					STAT242=(Token)match(input,STAT,FOLLOW_STAT_in_alloc_opt13484); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_alloc_opt13486); if (state.failed) return;
					pushFollow(FOLLOW_designator_in_alloc_opt13488);
					designator();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.alloc_opt(STAT242, 
					              MFPUtils.ALLOC_OPT_STAT); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "alloc_opt"



	// $ANTLR start "alloc_opt_list"
	// MFortranParser2018.g:3240:1: alloc_opt_list : alloc_opt ( COMMA alloc_opt )* ;
	public final void alloc_opt_list() throws RecognitionException {

		  int numAO = 1;

		try {
			// MFortranParser2018.g:3247:5: ( alloc_opt ( COMMA alloc_opt )* )
			// MFortranParser2018.g:3247:7: alloc_opt ( COMMA alloc_opt )*
			{
			pushFollow(FOLLOW_alloc_opt_in_alloc_opt_list13523);
			alloc_opt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3248:7: ( COMMA alloc_opt )*
			loop288:
			while (true) {
				int alt288=2;
				int LA288_0 = input.LA(1);
				if ( (LA288_0==COMMA) ) {
					alt288=1;
				}

				switch (alt288) {
				case 1 :
					// MFortranParser2018.g:3248:9: COMMA alloc_opt
					{
					match(input,COMMA,FOLLOW_COMMA_in_alloc_opt_list13533); if (state.failed) return;
					pushFollow(FOLLOW_alloc_opt_in_alloc_opt_list13535);
					alloc_opt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAO++;}
					}
					break;

				default :
					break loop288;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.alloc_opt_list(numAO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "alloc_opt_list"



	// $ANTLR start "allocation"
	// MFortranParser2018.g:3254:1: allocation : ( ( allocate_object LBRACKET )=> allocate_object LBRACKET allocate_coarray_spec RBRACKET | ( allocate_object )=> allocate_object );
	public final void allocation() throws RecognitionException {

		  boolean hasASSL = false; 
		  boolean hasACS = false;

		try {
			// MFortranParser2018.g:3259:5: ( ( allocate_object LBRACKET )=> allocate_object LBRACKET allocate_coarray_spec RBRACKET | ( allocate_object )=> allocate_object )
			int alt289=2;
			int LA289_0 = input.LA(1);
			if ( (LA289_0==IDENT) ) {
				int LA289_1 = input.LA(2);
				if ( (synpred26_MFortranParser2018()) ) {
					alt289=1;
				}
				else if ( (synpred27_MFortranParser2018()) ) {
					alt289=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 289, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 289, 0, input);
				throw nvae;
			}

			switch (alt289) {
				case 1 :
					// MFortranParser2018.g:3259:7: ( allocate_object LBRACKET )=> allocate_object LBRACKET allocate_coarray_spec RBRACKET
					{
					pushFollow(FOLLOW_allocate_object_in_allocation13582);
					allocate_object();
					state._fsp--;
					if (state.failed) return;
					match(input,LBRACKET,FOLLOW_LBRACKET_in_allocation13584); if (state.failed) return;
					pushFollow(FOLLOW_allocate_coarray_spec_in_allocation13586);
					allocate_coarray_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RBRACKET,FOLLOW_RBRACKET_in_allocation13588); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.allocation(hasASSL, true); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3271:7: ( allocate_object )=> allocate_object
					{
					pushFollow(FOLLOW_allocate_object_in_allocation13635);
					allocate_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.allocation(hasASSL, hasACS);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocation"



	// $ANTLR start "allocation_list"
	// MFortranParser2018.g:3276:1: allocation_list : allocation ( COMMA allocation )* ;
	public final void allocation_list() throws RecognitionException {

		  int numAl = 1;

		try {
			// MFortranParser2018.g:3283:5: ( allocation ( COMMA allocation )* )
			// MFortranParser2018.g:3283:7: allocation ( COMMA allocation )*
			{
			pushFollow(FOLLOW_allocation_in_allocation_list13669);
			allocation();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3284:7: ( COMMA allocation )*
			loop290:
			while (true) {
				int alt290=2;
				int LA290_0 = input.LA(1);
				if ( (LA290_0==COMMA) ) {
					int LA290_1 = input.LA(2);
					if ( (LA290_1==IDENT) ) {
						alt290=1;
					}

				}

				switch (alt290) {
				case 1 :
					// MFortranParser2018.g:3284:9: COMMA allocation
					{
					match(input,COMMA,FOLLOW_COMMA_in_allocation_list13679); if (state.failed) return;
					pushFollow(FOLLOW_allocation_in_allocation_list13681);
					allocation();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAl++;}
					}
					break;

				default :
					break loop290;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.allocation_list(numAl);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocation_list"



	// $ANTLR start "allocate_object"
	// MFortranParser2018.g:3295:1: allocate_object : part_ref_no_image_selector ( PERCENT part_ref_no_image_selector )* ;
	public final void allocate_object() throws RecognitionException {

		  int numPR = 1;

		try {
			// MFortranParser2018.g:3303:5: ( part_ref_no_image_selector ( PERCENT part_ref_no_image_selector )* )
			// MFortranParser2018.g:3303:7: part_ref_no_image_selector ( PERCENT part_ref_no_image_selector )*
			{
			pushFollow(FOLLOW_part_ref_no_image_selector_in_allocate_object13713);
			part_ref_no_image_selector();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3304:7: ( PERCENT part_ref_no_image_selector )*
			loop291:
			while (true) {
				int alt291=2;
				int LA291_0 = input.LA(1);
				if ( (LA291_0==PERCENT) ) {
					alt291=1;
				}

				switch (alt291) {
				case 1 :
					// MFortranParser2018.g:3304:8: PERCENT part_ref_no_image_selector
					{
					match(input,PERCENT,FOLLOW_PERCENT_in_allocate_object13722); if (state.failed) return;
					pushFollow(FOLLOW_part_ref_no_image_selector_in_allocate_object13724);
					part_ref_no_image_selector();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPR++;}
					}
					break;

				default :
					break loop291;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.data_ref(numPR); 
			  MFPA.allocate_object();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_object"



	// $ANTLR start "allocate_object_list"
	// MFortranParser2018.g:3307:1: allocate_object_list : allocate_object ( COMMA allocate_object )* ;
	public final void allocate_object_list() throws RecognitionException {

		  int numAO = 1;

		try {
			// MFortranParser2018.g:3314:5: ( allocate_object ( COMMA allocate_object )* )
			// MFortranParser2018.g:3314:7: allocate_object ( COMMA allocate_object )*
			{
			pushFollow(FOLLOW_allocate_object_in_allocate_object_list13753);
			allocate_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3315:7: ( COMMA allocate_object )*
			loop292:
			while (true) {
				int alt292=2;
				int LA292_0 = input.LA(1);
				if ( (LA292_0==COMMA) ) {
					int LA292_1 = input.LA(2);
					if ( (LA292_1==IDENT) ) {
						alt292=1;
					}

				}

				switch (alt292) {
				case 1 :
					// MFortranParser2018.g:3315:9: COMMA allocate_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_allocate_object_list13763); if (state.failed) return;
					pushFollow(FOLLOW_allocate_object_in_allocate_object_list13765);
					allocate_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAO++;}
					}
					break;

				default :
					break loop292;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.allocate_object_list(numAO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_object_list"



	// $ANTLR start "allocate_shape_spec"
	// MFortranParser2018.g:3323:1: allocate_shape_spec : expr ( COLON expr )? ;
	public final void allocate_shape_spec() throws RecognitionException {

		  boolean hasUB = true;
		  boolean hasLB = false;

		try {
			// MFortranParser2018.g:3328:5: ( expr ( COLON expr )? )
			// MFortranParser2018.g:3328:7: expr ( COLON expr )?
			{
			pushFollow(FOLLOW_expr_in_allocate_shape_spec13793);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3328:12: ( COLON expr )?
			int alt293=2;
			int LA293_0 = input.LA(1);
			if ( (LA293_0==COLON) ) {
				alt293=1;
			}
			switch (alt293) {
				case 1 :
					// MFortranParser2018.g:3328:13: COLON expr
					{
					match(input,COLON,FOLLOW_COLON_in_allocate_shape_spec13796); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_allocate_shape_spec13798);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.allocate_shape_spec(hasLB, hasUB); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_shape_spec"



	// $ANTLR start "allocate_shape_spec_list"
	// MFortranParser2018.g:3332:1: allocate_shape_spec_list : allocate_shape_spec ( COMMA allocate_shape_spec )* ;
	public final void allocate_shape_spec_list() throws RecognitionException {

		  int numASS = 1;

		try {
			// MFortranParser2018.g:3339:5: ( allocate_shape_spec ( COMMA allocate_shape_spec )* )
			// MFortranParser2018.g:3339:7: allocate_shape_spec ( COMMA allocate_shape_spec )*
			{
			pushFollow(FOLLOW_allocate_shape_spec_in_allocate_shape_spec_list13835);
			allocate_shape_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3340:7: ( COMMA allocate_shape_spec )*
			loop294:
			while (true) {
				int alt294=2;
				int LA294_0 = input.LA(1);
				if ( (LA294_0==COMMA) ) {
					alt294=1;
				}

				switch (alt294) {
				case 1 :
					// MFortranParser2018.g:3340:9: COMMA allocate_shape_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_allocate_shape_spec_list13845); if (state.failed) return;
					pushFollow(FOLLOW_allocate_shape_spec_in_allocate_shape_spec_list13847);
					allocate_shape_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numASS++;}
					}
					break;

				default :
					break loop294;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.allocate_shape_spec_list(numASS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_shape_spec_list"



	// $ANTLR start "allocate_coarray_spec"
	// MFortranParser2018.g:3353:1: allocate_coarray_spec options {k=3; } : ( ( ASTERISK )=> ASTERISK | ( expr COLON ASTERISK )=> expr COLON ASTERISK );
	public final void allocate_coarray_spec() throws RecognitionException {
		try {
			// MFortranParser2018.g:3358:5: ( ( ASTERISK )=> ASTERISK | ( expr COLON ASTERISK )=> expr COLON ASTERISK )
			int alt295=2;
			int LA295_0 = input.LA(1);
			if ( (LA295_0==ASTERISK) && (synpred28_MFortranParser2018())) {
				alt295=1;
			}
			else if ( (LA295_0==NOT) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==PLUS) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==MINUS) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==DEFINED_OP) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==IDENT) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==DIGIT_STR) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==CHAR_CONST) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==M_REAL_CONST) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==LPAREN) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==TRUE) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==FALSE) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==BIN_CONST) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==OCT_CONST) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==HEX_CONST) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}
			else if ( (LA295_0==LBRACKET) && (synpred29_MFortranParser2018())) {
				alt295=2;
			}

			switch (alt295) {
				case 1 :
					// MFortranParser2018.g:3358:7: ( ASTERISK )=> ASTERISK
					{
					match(input,ASTERISK,FOLLOW_ASTERISK_in_allocate_coarray_spec13891); if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:3359:7: ( expr COLON ASTERISK )=> expr COLON ASTERISK
					{
					pushFollow(FOLLOW_expr_in_allocate_coarray_spec13909);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_allocate_coarray_spec13911); if (state.failed) return;
					match(input,ASTERISK,FOLLOW_ASTERISK_in_allocate_coarray_spec13913); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.allocate_coarray_spec();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_coarray_spec"



	// $ANTLR start "allocate_coshape_spec"
	// MFortranParser2018.g:3367:1: allocate_coshape_spec : expr ( COLON expr )? ;
	public final void allocate_coshape_spec() throws RecognitionException {

		  boolean hasLB = false;

		try {
			// MFortranParser2018.g:3371:5: ( expr ( COLON expr )? )
			// MFortranParser2018.g:3371:7: expr ( COLON expr )?
			{
			pushFollow(FOLLOW_expr_in_allocate_coshape_spec13938);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3371:12: ( COLON expr )?
			int alt296=2;
			int LA296_0 = input.LA(1);
			if ( (LA296_0==COLON) ) {
				alt296=1;
			}
			switch (alt296) {
				case 1 :
					// MFortranParser2018.g:3371:14: COLON expr
					{
					match(input,COLON,FOLLOW_COLON_in_allocate_coshape_spec13942); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_allocate_coshape_spec13944);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasLB = true; }
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.allocate_coshape_spec(hasLB); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_coshape_spec"



	// $ANTLR start "allocate_coshape_spec_list"
	// MFortranParser2018.g:3375:1: allocate_coshape_spec_list : allocate_coshape_spec ( COMMA allocate_coshape_spec )* ;
	public final void allocate_coshape_spec_list() throws RecognitionException {

		  int numAOS = 1;

		try {
			// MFortranParser2018.g:3382:4: ( allocate_coshape_spec ( COMMA allocate_coshape_spec )* )
			// MFortranParser2018.g:3382:6: allocate_coshape_spec ( COMMA allocate_coshape_spec )*
			{
			pushFollow(FOLLOW_allocate_coshape_spec_in_allocate_coshape_spec_list13982);
			allocate_coshape_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3383:6: ( COMMA allocate_coshape_spec )*
			loop297:
			while (true) {
				int alt297=2;
				int LA297_0 = input.LA(1);
				if ( (LA297_0==COMMA) ) {
					alt297=1;
				}

				switch (alt297) {
				case 1 :
					// MFortranParser2018.g:3383:8: COMMA allocate_coshape_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_allocate_coshape_spec_list13991); if (state.failed) return;
					pushFollow(FOLLOW_allocate_coshape_spec_in_allocate_coshape_spec_list13993);
					allocate_coshape_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAOS++;}
					}
					break;

				default :
					break loop297;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.allocate_coshape_spec_list(numAOS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "allocate_coshape_spec_list"



	// $ANTLR start "nullify_stmt"
	// MFortranParser2018.g:3389:1: nullify_stmt : (lbl= label )? NULLIFY LPAREN pointer_object_list RPAREN end_of_stmt ;
	public final void nullify_stmt() throws RecognitionException {
		Token NULLIFY243=null;
		Token lbl =null;
		Token end_of_stmt244 =null;



		try {
			// MFortranParser2018.g:3395:5: ( (lbl= label )? NULLIFY LPAREN pointer_object_list RPAREN end_of_stmt )
			// MFortranParser2018.g:3395:7: (lbl= label )? NULLIFY LPAREN pointer_object_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:3395:7: (lbl= label )?
			int alt298=2;
			int LA298_0 = input.LA(1);
			if ( (LA298_0==DIGIT_STR) ) {
				alt298=1;
			}
			switch (alt298) {
				case 1 :
					// MFortranParser2018.g:3395:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_nullify_stmt14027);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			NULLIFY243=(Token)match(input,NULLIFY,FOLLOW_NULLIFY_in_nullify_stmt14038); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_nullify_stmt14040); if (state.failed) return;
			pushFollow(FOLLOW_pointer_object_list_in_nullify_stmt14042);
			pointer_object_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_nullify_stmt14044); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_nullify_stmt14052);
			end_of_stmt244=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.nullify_stmt(lbl, NULLIFY243, end_of_stmt244); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "nullify_stmt"



	// $ANTLR start "pointer_object"
	// MFortranParser2018.g:3407:1: pointer_object : data_ref ;
	public final void pointer_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:3408:5: ( data_ref )
			// MFortranParser2018.g:3408:7: data_ref
			{
			pushFollow(FOLLOW_data_ref_in_pointer_object14081);
			data_ref();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.pointer_object(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_object"



	// $ANTLR start "pointer_object_list"
	// MFortranParser2018.g:3412:1: pointer_object_list : pointer_object ( COMMA pointer_object )* ;
	public final void pointer_object_list() throws RecognitionException {

		  int numPO = 1;

		try {
			// MFortranParser2018.g:3419:5: ( pointer_object ( COMMA pointer_object )* )
			// MFortranParser2018.g:3419:7: pointer_object ( COMMA pointer_object )*
			{
			pushFollow(FOLLOW_pointer_object_in_pointer_object_list14114);
			pointer_object();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3420:7: ( COMMA pointer_object )*
			loop299:
			while (true) {
				int alt299=2;
				int LA299_0 = input.LA(1);
				if ( (LA299_0==COMMA) ) {
					alt299=1;
				}

				switch (alt299) {
				case 1 :
					// MFortranParser2018.g:3420:9: COMMA pointer_object
					{
					match(input,COMMA,FOLLOW_COMMA_in_pointer_object_list14124); if (state.failed) return;
					pushFollow(FOLLOW_pointer_object_in_pointer_object_list14126);
					pointer_object();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPO++;}
					}
					break;

				default :
					break loop299;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.pointer_object_list(numPO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_object_list"



	// $ANTLR start "deallocate_stmt"
	// MFortranParser2018.g:3426:1: deallocate_stmt : (lbl= label )? DEALLOCATE LPAREN allocate_object_list ( COMMA dealloc_opt_list )? RPAREN end_of_stmt ;
	public final void deallocate_stmt() throws RecognitionException {
		Token DEALLOCATE245=null;
		Token lbl =null;
		Token end_of_stmt246 =null;


		  boolean hasDOL = false;

		try {
			// MFortranParser2018.g:3433:5: ( (lbl= label )? DEALLOCATE LPAREN allocate_object_list ( COMMA dealloc_opt_list )? RPAREN end_of_stmt )
			// MFortranParser2018.g:3433:7: (lbl= label )? DEALLOCATE LPAREN allocate_object_list ( COMMA dealloc_opt_list )? RPAREN end_of_stmt
			{
			// MFortranParser2018.g:3433:7: (lbl= label )?
			int alt300=2;
			int LA300_0 = input.LA(1);
			if ( (LA300_0==DIGIT_STR) ) {
				alt300=1;
			}
			switch (alt300) {
				case 1 :
					// MFortranParser2018.g:3433:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_deallocate_stmt14161);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			DEALLOCATE245=(Token)match(input,DEALLOCATE,FOLLOW_DEALLOCATE_in_deallocate_stmt14172); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_deallocate_stmt14174); if (state.failed) return;
			pushFollow(FOLLOW_allocate_object_list_in_deallocate_stmt14176);
			allocate_object_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3435:7: ( COMMA dealloc_opt_list )?
			int alt301=2;
			int LA301_0 = input.LA(1);
			if ( (LA301_0==COMMA) ) {
				alt301=1;
			}
			switch (alt301) {
				case 1 :
					// MFortranParser2018.g:3435:9: COMMA dealloc_opt_list
					{
					match(input,COMMA,FOLLOW_COMMA_in_deallocate_stmt14186); if (state.failed) return;
					pushFollow(FOLLOW_dealloc_opt_list_in_deallocate_stmt14188);
					dealloc_opt_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasDOL=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_deallocate_stmt14194); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_deallocate_stmt14202);
			end_of_stmt246=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.deallocate_stmt(lbl, 
			              DEALLOCATE245, end_of_stmt246, hasDOL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "deallocate_stmt"



	// $ANTLR start "dealloc_opt"
	// MFortranParser2018.g:3448:1: dealloc_opt : ( STAT EQUALS designator | ERRMSG EQUALS default_char_variable );
	public final void dealloc_opt() throws RecognitionException {
		Token STAT247=null;
		Token ERRMSG248=null;

		try {
			// MFortranParser2018.g:3449:5: ( STAT EQUALS designator | ERRMSG EQUALS default_char_variable )
			int alt302=2;
			int LA302_0 = input.LA(1);
			if ( (LA302_0==STAT) ) {
				alt302=1;
			}
			else if ( (LA302_0==ERRMSG) ) {
				alt302=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 302, 0, input);
				throw nvae;
			}

			switch (alt302) {
				case 1 :
					// MFortranParser2018.g:3449:7: STAT EQUALS designator
					{
					STAT247=(Token)match(input,STAT,FOLLOW_STAT_in_dealloc_opt14235); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_dealloc_opt14237); if (state.failed) return;
					pushFollow(FOLLOW_designator_in_dealloc_opt14239);
					designator();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.dealloc_opt(STAT247, 
					              MFPUtils.DEALLOC_OPT_STAT); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3452:7: ERRMSG EQUALS default_char_variable
					{
					ERRMSG248=(Token)match(input,ERRMSG,FOLLOW_ERRMSG_in_dealloc_opt14257); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_dealloc_opt14259); if (state.failed) return;
					pushFollow(FOLLOW_default_char_variable_in_dealloc_opt14261);
					default_char_variable();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.dealloc_opt(ERRMSG248, 
					              MFPUtils.DEALLOC_OPT_ERRMSG); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dealloc_opt"



	// $ANTLR start "dealloc_opt_list"
	// MFortranParser2018.g:3457:1: dealloc_opt_list : dealloc_opt ( COMMA dealloc_opt )* ;
	public final void dealloc_opt_list() throws RecognitionException {

		  int numDO = 1;

		try {
			// MFortranParser2018.g:3464:5: ( dealloc_opt ( COMMA dealloc_opt )* )
			// MFortranParser2018.g:3464:7: dealloc_opt ( COMMA dealloc_opt )*
			{
			pushFollow(FOLLOW_dealloc_opt_in_dealloc_opt_list14296);
			dealloc_opt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3465:7: ( COMMA dealloc_opt )*
			loop303:
			while (true) {
				int alt303=2;
				int LA303_0 = input.LA(1);
				if ( (LA303_0==COMMA) ) {
					alt303=1;
				}

				switch (alt303) {
				case 1 :
					// MFortranParser2018.g:3465:9: COMMA dealloc_opt
					{
					match(input,COMMA,FOLLOW_COMMA_in_dealloc_opt_list14306); if (state.failed) return;
					pushFollow(FOLLOW_dealloc_opt_in_dealloc_opt_list14308);
					dealloc_opt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDO++;}
					}
					break;

				default :
					break loop303;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.dealloc_opt_list(numDO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dealloc_opt_list"



	// $ANTLR start "primary"
	// MFortranParser2018.g:3478:1: primary options {backtrack=true; } : ( designator_or_func_ref | literal_constant | array_constructor | structure_constructor | LPAREN expr RPAREN );
	public final void primary() throws RecognitionException {
		try {
			// MFortranParser2018.g:3483:5: ( designator_or_func_ref | literal_constant | array_constructor | structure_constructor | LPAREN expr RPAREN )
			int alt304=5;
			switch ( input.LA(1) ) {
			case IDENT:
				{
				int LA304_1 = input.LA(2);
				if ( (synpred30_MFortranParser2018()) ) {
					alt304=1;
				}
				else if ( (synpred31_MFortranParser2018()) ) {
					alt304=2;
				}
				else if ( (synpred33_MFortranParser2018()) ) {
					alt304=4;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 304, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIGIT_STR:
				{
				int LA304_2 = input.LA(2);
				if ( (synpred30_MFortranParser2018()) ) {
					alt304=1;
				}
				else if ( (synpred31_MFortranParser2018()) ) {
					alt304=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 304, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CHAR_CONST:
				{
				int LA304_3 = input.LA(2);
				if ( (synpred30_MFortranParser2018()) ) {
					alt304=1;
				}
				else if ( (synpred31_MFortranParser2018()) ) {
					alt304=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 304, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case BIN_CONST:
			case FALSE:
			case HEX_CONST:
			case M_REAL_CONST:
			case OCT_CONST:
			case TRUE:
				{
				alt304=2;
				}
				break;
			case LPAREN:
				{
				int LA304_5 = input.LA(2);
				if ( (synpred31_MFortranParser2018()) ) {
					alt304=2;
				}
				else if ( (synpred32_MFortranParser2018()) ) {
					alt304=3;
				}
				else if ( (true) ) {
					alt304=5;
				}

				}
				break;
			case LBRACKET:
				{
				alt304=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 304, 0, input);
				throw nvae;
			}
			switch (alt304) {
				case 1 :
					// MFortranParser2018.g:3483:7: designator_or_func_ref
					{
					pushFollow(FOLLOW_designator_or_func_ref_in_primary14344);
					designator_or_func_ref();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:3484:7: literal_constant
					{
					pushFollow(FOLLOW_literal_constant_in_primary14352);
					literal_constant();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:3485:7: array_constructor
					{
					pushFollow(FOLLOW_array_constructor_in_primary14360);
					array_constructor();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:3486:7: structure_constructor
					{
					pushFollow(FOLLOW_structure_constructor_in_primary14368);
					structure_constructor();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:3487:7: LPAREN expr RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_primary14376); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_primary14378);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_primary14380); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.primary();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "primary"



	// $ANTLR start "level_1_expr"
	// MFortranParser2018.g:3493:1: level_1_expr : ( defined_unary_op )? primary ;
	public final void level_1_expr() throws RecognitionException {
		Token defined_unary_op249 =null;


		  Token t = null;

		try {
			// MFortranParser2018.g:3497:5: ( ( defined_unary_op )? primary )
			// MFortranParser2018.g:3497:7: ( defined_unary_op )? primary
			{
			// MFortranParser2018.g:3497:7: ( defined_unary_op )?
			int alt305=2;
			int LA305_0 = input.LA(1);
			if ( (LA305_0==DEFINED_OP) ) {
				alt305=1;
			}
			switch (alt305) {
				case 1 :
					// MFortranParser2018.g:3497:8: defined_unary_op
					{
					pushFollow(FOLLOW_defined_unary_op_in_level_1_expr14404);
					defined_unary_op249=defined_unary_op();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {t = defined_unary_op249;}
					}
					break;

			}

			pushFollow(FOLLOW_primary_in_level_1_expr14417);
			primary();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.level_1_expr(t);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "level_1_expr"



	// $ANTLR start "defined_unary_op"
	// MFortranParser2018.g:3505:1: defined_unary_op returns [Token t] : DEFINED_OP ;
	public final Token defined_unary_op() throws RecognitionException {
		Token t = null;


		Token DEFINED_OP250=null;

		try {
			// MFortranParser2018.g:3506:5: ( DEFINED_OP )
			// MFortranParser2018.g:3506:7: DEFINED_OP
			{
			DEFINED_OP250=(Token)match(input,DEFINED_OP,FOLLOW_DEFINED_OP_in_defined_unary_op14450); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = DEFINED_OP250;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "defined_unary_op"



	// $ANTLR start "power_operand"
	// MFortranParser2018.g:3513:1: power_operand : level_1_expr ( power_op power_operand )? ;
	public final void power_operand() throws RecognitionException {
		Token power_op251 =null;


		  Token t = null;

		try {
			// MFortranParser2018.g:3517:5: ( level_1_expr ( power_op power_operand )? )
			// MFortranParser2018.g:3517:7: level_1_expr ( power_op power_operand )?
			{
			pushFollow(FOLLOW_level_1_expr_in_power_operand14475);
			level_1_expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3518:7: ( power_op power_operand )?
			int alt306=2;
			int LA306_0 = input.LA(1);
			if ( (LA306_0==POWER) ) {
				alt306=1;
			}
			switch (alt306) {
				case 1 :
					// MFortranParser2018.g:3518:9: power_op power_operand
					{
					pushFollow(FOLLOW_power_op_in_power_operand14486);
					power_op251=power_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_power_operand_in_power_operand14488);
					power_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {t = power_op251;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.power_operand(t);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "power_operand"



	// $ANTLR start "mult_operand"
	// MFortranParser2018.g:3522:1: mult_operand : power_operand ( mult_op power_operand )* ;
	public final void mult_operand() throws RecognitionException {
		Token mult_op252 =null;


		  int numMO = 0;

		try {
			// MFortranParser2018.g:3526:5: ( power_operand ( mult_op power_operand )* )
			// MFortranParser2018.g:3526:7: power_operand ( mult_op power_operand )*
			{
			pushFollow(FOLLOW_power_operand_in_mult_operand14525);
			power_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3527:7: ( mult_op power_operand )*
			loop307:
			while (true) {
				int alt307=2;
				int LA307_0 = input.LA(1);
				if ( (LA307_0==SLASH) ) {
					int LA307_2 = input.LA(2);
					if ( (LA307_2==BIN_CONST||LA307_2==CHAR_CONST||(LA307_2 >= DEFINED_OP && LA307_2 <= DIGIT_STR)||LA307_2==FALSE||(LA307_2 >= HEX_CONST && LA307_2 <= IDENT)||LA307_2==LBRACKET||LA307_2==LPAREN||LA307_2==M_REAL_CONST||LA307_2==OCT_CONST||LA307_2==TRUE) ) {
						alt307=1;
					}

				}
				else if ( (LA307_0==ASTERISK) ) {
					alt307=1;
				}

				switch (alt307) {
				case 1 :
					// MFortranParser2018.g:3527:9: mult_op power_operand
					{
					pushFollow(FOLLOW_mult_op_in_mult_operand14536);
					mult_op252=mult_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_power_operand_in_mult_operand14538);
					power_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { numMO++; MFPA.mult_operand__mult_op(mult_op252); }
					}
					break;

				default :
					break loop307;
				}
			}

			if ( state.backtracking==0 ) { MFPA.mult_operand(numMO); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "mult_operand"



	// $ANTLR start "signed_operand"
	// MFortranParser2018.g:3539:1: signed_operand : (t= add_op )? mult_operand ;
	public final void signed_operand() throws RecognitionException {
		Token t =null;

		try {
			// MFortranParser2018.g:3540:5: ( (t= add_op )? mult_operand )
			// MFortranParser2018.g:3540:7: (t= add_op )? mult_operand
			{
			// MFortranParser2018.g:3540:7: (t= add_op )?
			int alt308=2;
			int LA308_0 = input.LA(1);
			if ( (LA308_0==MINUS||LA308_0==PLUS) ) {
				alt308=1;
			}
			switch (alt308) {
				case 1 :
					// MFortranParser2018.g:3540:8: t= add_op
					{
					pushFollow(FOLLOW_add_op_in_signed_operand14591);
					t=add_op();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_mult_operand_in_signed_operand14602);
			mult_operand();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.signed_operand(t);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "signed_operand"



	// $ANTLR start "add_operand"
	// MFortranParser2018.g:3545:1: add_operand : signed_operand (t= add_op mult_operand )* ;
	public final void add_operand() throws RecognitionException {
		Token t =null;


		  int numAO = 0;

		try {
			// MFortranParser2018.g:3549:5: ( signed_operand (t= add_op mult_operand )* )
			// MFortranParser2018.g:3549:7: signed_operand (t= add_op mult_operand )*
			{
			pushFollow(FOLLOW_signed_operand_in_add_operand14634);
			signed_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3550:7: (t= add_op mult_operand )*
			loop309:
			while (true) {
				int alt309=2;
				int LA309_0 = input.LA(1);
				if ( (LA309_0==MINUS||LA309_0==PLUS) ) {
					alt309=1;
				}

				switch (alt309) {
				case 1 :
					// MFortranParser2018.g:3550:9: t= add_op mult_operand
					{
					pushFollow(FOLLOW_add_op_in_add_operand14646);
					t=add_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_mult_operand_in_add_operand14648);
					mult_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { numAO++; MFPA.add_operand__add_op(t); }
					}
					break;

				default :
					break loop309;
				}
			}

			if ( state.backtracking==0 ) { MFPA.add_operand(numAO);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "add_operand"



	// $ANTLR start "level_2_expr"
	// MFortranParser2018.g:3565:1: level_2_expr : add_operand ( concat_op add_operand )* ;
	public final void level_2_expr() throws RecognitionException {

		  int numCO = 0;

		try {
			// MFortranParser2018.g:3569:5: ( add_operand ( concat_op add_operand )* )
			// MFortranParser2018.g:3569:7: add_operand ( concat_op add_operand )*
			{
			pushFollow(FOLLOW_add_operand_in_level_2_expr14703);
			add_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3570:7: ( concat_op add_operand )*
			loop310:
			while (true) {
				int alt310=2;
				int LA310_0 = input.LA(1);
				if ( (LA310_0==SLASH_SLASH) ) {
					alt310=1;
				}

				switch (alt310) {
				case 1 :
					// MFortranParser2018.g:3570:9: concat_op add_operand
					{
					pushFollow(FOLLOW_concat_op_in_level_2_expr14714);
					concat_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_add_operand_in_level_2_expr14716);
					add_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { numCO++;}
					}
					break;

				default :
					break loop310;
				}
			}

			if ( state.backtracking==0 ) { MFPA.level_2_expr(numCO); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "level_2_expr"



	// $ANTLR start "power_op"
	// MFortranParser2018.g:3579:1: power_op returns [Token t] : POWER ;
	public final Token power_op() throws RecognitionException {
		Token t = null;


		Token POWER253=null;

		try {
			// MFortranParser2018.g:3580:5: ( POWER )
			// MFortranParser2018.g:3580:7: POWER
			{
			POWER253=(Token)match(input,POWER,FOLLOW_POWER_in_power_op14771); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = POWER253;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "power_op"



	// $ANTLR start "mult_op"
	// MFortranParser2018.g:3586:1: mult_op returns [Token t] : ( ASTERISK | SLASH );
	public final Token mult_op() throws RecognitionException {
		Token t = null;


		Token ASTERISK254=null;
		Token SLASH255=null;

		try {
			// MFortranParser2018.g:3587:5: ( ASTERISK | SLASH )
			int alt311=2;
			int LA311_0 = input.LA(1);
			if ( (LA311_0==ASTERISK) ) {
				alt311=1;
			}
			else if ( (LA311_0==SLASH) ) {
				alt311=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 311, 0, input);
				throw nvae;
			}

			switch (alt311) {
				case 1 :
					// MFortranParser2018.g:3587:7: ASTERISK
					{
					ASTERISK254=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_mult_op14796); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = ASTERISK254; }
					}
					break;
				case 2 :
					// MFortranParser2018.g:3588:7: SLASH
					{
					SLASH255=(Token)match(input,SLASH,FOLLOW_SLASH_in_mult_op14806); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = SLASH255; }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "mult_op"



	// $ANTLR start "add_op"
	// MFortranParser2018.g:3594:1: add_op returns [Token t] : ( PLUS | MINUS );
	public final Token add_op() throws RecognitionException {
		Token t = null;


		Token PLUS256=null;
		Token MINUS257=null;

		try {
			// MFortranParser2018.g:3595:5: ( PLUS | MINUS )
			int alt312=2;
			int LA312_0 = input.LA(1);
			if ( (LA312_0==PLUS) ) {
				alt312=1;
			}
			else if ( (LA312_0==MINUS) ) {
				alt312=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 312, 0, input);
				throw nvae;
			}

			switch (alt312) {
				case 1 :
					// MFortranParser2018.g:3595:7: PLUS
					{
					PLUS256=(Token)match(input,PLUS,FOLLOW_PLUS_in_add_op14831); if (state.failed) return t;
					if ( state.backtracking==0 ) {t = PLUS256;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3596:7: MINUS
					{
					MINUS257=(Token)match(input,MINUS,FOLLOW_MINUS_in_add_op14841); if (state.failed) return t;
					if ( state.backtracking==0 ) {t = MINUS257;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "add_op"



	// $ANTLR start "level_3_expr"
	// MFortranParser2018.g:3603:1: level_3_expr : level_2_expr ( rel_op level_2_expr )? ;
	public final void level_3_expr() throws RecognitionException {
		Token rel_op258 =null;

		Token t = null;
		try {
			// MFortranParser2018.g:3605:5: ( level_2_expr ( rel_op level_2_expr )? )
			// MFortranParser2018.g:3605:7: level_2_expr ( rel_op level_2_expr )?
			{
			pushFollow(FOLLOW_level_2_expr_in_level_3_expr14866);
			level_2_expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3606:7: ( rel_op level_2_expr )?
			int alt313=2;
			int LA313_0 = input.LA(1);
			if ( (LA313_0==EQ||LA313_0==EQ_EQ||LA313_0==GE||(LA313_0 >= GREATERTHAN && LA313_0 <= GT)||LA313_0==LE||(LA313_0 >= LESSTHAN && LA313_0 <= LESSTHAN_EQ)||LA313_0==LT||LA313_0==NE||LA313_0==SLASH_EQ) ) {
				alt313=1;
			}
			switch (alt313) {
				case 1 :
					// MFortranParser2018.g:3606:8: rel_op level_2_expr
					{
					pushFollow(FOLLOW_rel_op_in_level_3_expr14876);
					rel_op258=rel_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_level_2_expr_in_level_3_expr14878);
					level_2_expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {t = rel_op258;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.level_3_expr(t);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "level_3_expr"



	// $ANTLR start "concat_op"
	// MFortranParser2018.g:3613:1: concat_op returns [Token t] : SLASH_SLASH ;
	public final Token concat_op() throws RecognitionException {
		Token t = null;


		Token SLASH_SLASH259=null;

		try {
			// MFortranParser2018.g:3614:5: ( SLASH_SLASH )
			// MFortranParser2018.g:3614:7: SLASH_SLASH
			{
			SLASH_SLASH259=(Token)match(input,SLASH_SLASH,FOLLOW_SLASH_SLASH_in_concat_op14919); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = SLASH_SLASH259;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "concat_op"



	// $ANTLR start "rel_op"
	// MFortranParser2018.g:3626:1: rel_op returns [Token t] : ( EQ | NE | LT | LE | GT | GE | EQ_EQ | SLASH_EQ | LESSTHAN | LESSTHAN_EQ | GREATERTHAN | GREATERTHAN_EQ );
	public final Token rel_op() throws RecognitionException {
		Token t = null;


		Token EQ260=null;
		Token NE261=null;
		Token LT262=null;
		Token LE263=null;
		Token GT264=null;
		Token GE265=null;
		Token EQ_EQ266=null;
		Token SLASH_EQ267=null;
		Token LESSTHAN268=null;
		Token LESSTHAN_EQ269=null;
		Token GREATERTHAN270=null;
		Token GREATERTHAN_EQ271=null;

		try {
			// MFortranParser2018.g:3627:5: ( EQ | NE | LT | LE | GT | GE | EQ_EQ | SLASH_EQ | LESSTHAN | LESSTHAN_EQ | GREATERTHAN | GREATERTHAN_EQ )
			int alt314=12;
			switch ( input.LA(1) ) {
			case EQ:
				{
				alt314=1;
				}
				break;
			case NE:
				{
				alt314=2;
				}
				break;
			case LT:
				{
				alt314=3;
				}
				break;
			case LE:
				{
				alt314=4;
				}
				break;
			case GT:
				{
				alt314=5;
				}
				break;
			case GE:
				{
				alt314=6;
				}
				break;
			case EQ_EQ:
				{
				alt314=7;
				}
				break;
			case SLASH_EQ:
				{
				alt314=8;
				}
				break;
			case LESSTHAN:
				{
				alt314=9;
				}
				break;
			case LESSTHAN_EQ:
				{
				alt314=10;
				}
				break;
			case GREATERTHAN:
				{
				alt314=11;
				}
				break;
			case GREATERTHAN_EQ:
				{
				alt314=12;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 314, 0, input);
				throw nvae;
			}
			switch (alt314) {
				case 1 :
					// MFortranParser2018.g:3627:7: EQ
					{
					EQ260=(Token)match(input,EQ,FOLLOW_EQ_in_rel_op14947); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=EQ260;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3628:7: NE
					{
					NE261=(Token)match(input,NE,FOLLOW_NE_in_rel_op14957); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=NE261;}
					}
					break;
				case 3 :
					// MFortranParser2018.g:3629:7: LT
					{
					LT262=(Token)match(input,LT,FOLLOW_LT_in_rel_op14967); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=LT262;}
					}
					break;
				case 4 :
					// MFortranParser2018.g:3630:7: LE
					{
					LE263=(Token)match(input,LE,FOLLOW_LE_in_rel_op14977); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=LE263;}
					}
					break;
				case 5 :
					// MFortranParser2018.g:3631:7: GT
					{
					GT264=(Token)match(input,GT,FOLLOW_GT_in_rel_op14987); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=GT264;}
					}
					break;
				case 6 :
					// MFortranParser2018.g:3632:7: GE
					{
					GE265=(Token)match(input,GE,FOLLOW_GE_in_rel_op14997); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=GE265;}
					}
					break;
				case 7 :
					// MFortranParser2018.g:3633:7: EQ_EQ
					{
					EQ_EQ266=(Token)match(input,EQ_EQ,FOLLOW_EQ_EQ_in_rel_op15007); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=EQ_EQ266;}
					}
					break;
				case 8 :
					// MFortranParser2018.g:3634:7: SLASH_EQ
					{
					SLASH_EQ267=(Token)match(input,SLASH_EQ,FOLLOW_SLASH_EQ_in_rel_op15017); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=SLASH_EQ267;}
					}
					break;
				case 9 :
					// MFortranParser2018.g:3635:7: LESSTHAN
					{
					LESSTHAN268=(Token)match(input,LESSTHAN,FOLLOW_LESSTHAN_in_rel_op15027); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=LESSTHAN268;}
					}
					break;
				case 10 :
					// MFortranParser2018.g:3636:7: LESSTHAN_EQ
					{
					LESSTHAN_EQ269=(Token)match(input,LESSTHAN_EQ,FOLLOW_LESSTHAN_EQ_in_rel_op15037); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=LESSTHAN_EQ269;}
					}
					break;
				case 11 :
					// MFortranParser2018.g:3637:7: GREATERTHAN
					{
					GREATERTHAN270=(Token)match(input,GREATERTHAN,FOLLOW_GREATERTHAN_in_rel_op15047); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=GREATERTHAN270;}
					}
					break;
				case 12 :
					// MFortranParser2018.g:3638:7: GREATERTHAN_EQ
					{
					GREATERTHAN_EQ271=(Token)match(input,GREATERTHAN_EQ,FOLLOW_GREATERTHAN_EQ_in_rel_op15057); if (state.failed) return t;
					if ( state.backtracking==0 ) {t=GREATERTHAN_EQ271;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "rel_op"



	// $ANTLR start "and_operand"
	// MFortranParser2018.g:3645:1: and_operand : (t0= not_op )? level_3_expr ( and_op (t1= not_op )? level_3_expr )* ;
	public final void and_operand() throws RecognitionException {
		Token t0 =null;
		Token t1 =null;


		  int numAO = 0;

		try {
			// MFortranParser2018.g:3649:5: ( (t0= not_op )? level_3_expr ( and_op (t1= not_op )? level_3_expr )* )
			// MFortranParser2018.g:3649:7: (t0= not_op )? level_3_expr ( and_op (t1= not_op )? level_3_expr )*
			{
			// MFortranParser2018.g:3649:7: (t0= not_op )?
			int alt315=2;
			int LA315_0 = input.LA(1);
			if ( (LA315_0==NOT) ) {
				alt315=1;
			}
			switch (alt315) {
				case 1 :
					// MFortranParser2018.g:3649:9: t0= not_op
					{
					pushFollow(FOLLOW_not_op_in_and_operand15087);
					t0=not_op();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_level_3_expr_in_and_operand15092);
			level_3_expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3650:7: ( and_op (t1= not_op )? level_3_expr )*
			loop317:
			while (true) {
				int alt317=2;
				int LA317_0 = input.LA(1);
				if ( (LA317_0==AND) ) {
					alt317=1;
				}

				switch (alt317) {
				case 1 :
					// MFortranParser2018.g:3650:9: and_op (t1= not_op )? level_3_expr
					{
					pushFollow(FOLLOW_and_op_in_and_operand15102);
					and_op();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:3650:16: (t1= not_op )?
					int alt316=2;
					int LA316_0 = input.LA(1);
					if ( (LA316_0==NOT) ) {
						alt316=1;
					}
					switch (alt316) {
						case 1 :
							// MFortranParser2018.g:3650:18: t1= not_op
							{
							pushFollow(FOLLOW_not_op_in_and_operand15108);
							t1=not_op();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_level_3_expr_in_and_operand15113);
					level_3_expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.and_operand__not_op(t1); 
					            numAO++;
					            t1=null;
					          }
					}
					break;

				default :
					break loop317;
				}
			}

			if ( state.backtracking==0 ) { MFPA.and_operand(t0, numAO);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "and_operand"



	// $ANTLR start "or_operand"
	// MFortranParser2018.g:3663:1: or_operand : and_operand ( or_op and_operand )* ;
	public final void or_operand() throws RecognitionException {

		  int numOO = 0;

		try {
			// MFortranParser2018.g:3667:5: ( and_operand ( or_op and_operand )* )
			// MFortranParser2018.g:3667:7: and_operand ( or_op and_operand )*
			{
			pushFollow(FOLLOW_and_operand_in_or_operand15167);
			and_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3667:19: ( or_op and_operand )*
			loop318:
			while (true) {
				int alt318=2;
				int LA318_0 = input.LA(1);
				if ( (LA318_0==OR) ) {
					alt318=1;
				}

				switch (alt318) {
				case 1 :
					// MFortranParser2018.g:3667:20: or_op and_operand
					{
					pushFollow(FOLLOW_or_op_in_or_operand15170);
					or_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_and_operand_in_or_operand15172);
					and_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numOO++;}
					}
					break;

				default :
					break loop318;
				}
			}

			if ( state.backtracking==0 ) { MFPA.or_operand(numOO); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "or_operand"



	// $ANTLR start "equiv_operand"
	// MFortranParser2018.g:3675:1: equiv_operand : or_operand ( equiv_op or_operand )* ;
	public final void equiv_operand() throws RecognitionException {
		Token equiv_op272 =null;


		  int numEO = 0;

		try {
			// MFortranParser2018.g:3679:5: ( or_operand ( equiv_op or_operand )* )
			// MFortranParser2018.g:3679:7: or_operand ( equiv_op or_operand )*
			{
			pushFollow(FOLLOW_or_operand_in_equiv_operand15209);
			or_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3680:7: ( equiv_op or_operand )*
			loop319:
			while (true) {
				int alt319=2;
				int LA319_0 = input.LA(1);
				if ( (LA319_0==EQV||LA319_0==NEQV) ) {
					alt319=1;
				}

				switch (alt319) {
				case 1 :
					// MFortranParser2018.g:3680:9: equiv_op or_operand
					{
					pushFollow(FOLLOW_equiv_op_in_equiv_operand15220);
					equiv_op272=equiv_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_or_operand_in_equiv_operand15222);
					or_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.equiv_operand__equiv_op(equiv_op272); 
					            numEO++;
					          }
					}
					break;

				default :
					break loop319;
				}
			}

			if ( state.backtracking==0 ) { MFPA.equiv_operand(numEO); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "equiv_operand"



	// $ANTLR start "level_5_expr"
	// MFortranParser2018.g:3692:1: level_5_expr : equiv_operand ( defined_binary_op equiv_operand )* ;
	public final void level_5_expr() throws RecognitionException {
		Token defined_binary_op273 =null;


		  int numDBO = 0;

		try {
			// MFortranParser2018.g:3696:5: ( equiv_operand ( defined_binary_op equiv_operand )* )
			// MFortranParser2018.g:3696:7: equiv_operand ( defined_binary_op equiv_operand )*
			{
			pushFollow(FOLLOW_equiv_operand_in_level_5_expr15276);
			equiv_operand();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3697:7: ( defined_binary_op equiv_operand )*
			loop320:
			while (true) {
				int alt320=2;
				int LA320_0 = input.LA(1);
				if ( (LA320_0==DEFINED_OP) ) {
					alt320=1;
				}

				switch (alt320) {
				case 1 :
					// MFortranParser2018.g:3697:9: defined_binary_op equiv_operand
					{
					pushFollow(FOLLOW_defined_binary_op_in_level_5_expr15287);
					defined_binary_op273=defined_binary_op();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_equiv_operand_in_level_5_expr15289);
					equiv_operand();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.level_5_expr__defined_binary_op(defined_binary_op273); 
					            numDBO++;
					          }
					}
					break;

				default :
					break loop320;
				}
			}

			if ( state.backtracking==0 ) { MFPA.level_5_expr(numDBO); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "level_5_expr"



	// $ANTLR start "not_op"
	// MFortranParser2018.g:3708:1: not_op returns [Token t] : NOT ;
	public final Token not_op() throws RecognitionException {
		Token t = null;


		Token NOT274=null;

		try {
			// MFortranParser2018.g:3709:5: ( NOT )
			// MFortranParser2018.g:3709:7: NOT
			{
			NOT274=(Token)match(input,NOT,FOLLOW_NOT_in_not_op15343); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = NOT274;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "not_op"



	// $ANTLR start "and_op"
	// MFortranParser2018.g:3715:1: and_op returns [Token t] : AND ;
	public final Token and_op() throws RecognitionException {
		Token t = null;


		Token AND275=null;

		try {
			// MFortranParser2018.g:3716:5: ( AND )
			// MFortranParser2018.g:3716:7: AND
			{
			AND275=(Token)match(input,AND,FOLLOW_AND_in_and_op15369); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = AND275;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "and_op"



	// $ANTLR start "or_op"
	// MFortranParser2018.g:3722:1: or_op returns [Token t] : OR ;
	public final Token or_op() throws RecognitionException {
		Token t = null;


		Token OR276=null;

		try {
			// MFortranParser2018.g:3723:5: ( OR )
			// MFortranParser2018.g:3723:7: OR
			{
			OR276=(Token)match(input,OR,FOLLOW_OR_in_or_op15394); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = OR276;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "or_op"



	// $ANTLR start "equiv_op"
	// MFortranParser2018.g:3729:1: equiv_op returns [Token t] : ( EQV | NEQV );
	public final Token equiv_op() throws RecognitionException {
		Token t = null;


		Token EQV277=null;
		Token NEQV278=null;

		try {
			// MFortranParser2018.g:3730:5: ( EQV | NEQV )
			int alt321=2;
			int LA321_0 = input.LA(1);
			if ( (LA321_0==EQV) ) {
				alt321=1;
			}
			else if ( (LA321_0==NEQV) ) {
				alt321=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return t;}
				NoViableAltException nvae =
					new NoViableAltException("", 321, 0, input);
				throw nvae;
			}

			switch (alt321) {
				case 1 :
					// MFortranParser2018.g:3730:7: EQV
					{
					EQV277=(Token)match(input,EQV,FOLLOW_EQV_in_equiv_op15419); if (state.failed) return t;
					if ( state.backtracking==0 ) {t = EQV277;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3731:7: NEQV
					{
					NEQV278=(Token)match(input,NEQV,FOLLOW_NEQV_in_equiv_op15429); if (state.failed) return t;
					if ( state.backtracking==0 ) {t = NEQV278;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "equiv_op"



	// $ANTLR start "expr"
	// MFortranParser2018.g:3738:1: expr : level_5_expr ;
	public final void expr() throws RecognitionException {
		try {
			// MFortranParser2018.g:3739:5: ( level_5_expr )
			// MFortranParser2018.g:3739:7: level_5_expr
			{
			pushFollow(FOLLOW_level_5_expr_in_expr15450);
			level_5_expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {MFPA.expr();}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "expr"



	// $ANTLR start "defined_binary_op"
	// MFortranParser2018.g:3745:1: defined_binary_op returns [Token t] : DEFINED_OP ;
	public final Token defined_binary_op() throws RecognitionException {
		Token t = null;


		Token DEFINED_OP279=null;

		try {
			// MFortranParser2018.g:3746:5: ( DEFINED_OP )
			// MFortranParser2018.g:3746:7: DEFINED_OP
			{
			DEFINED_OP279=(Token)match(input,DEFINED_OP,FOLLOW_DEFINED_OP_in_defined_binary_op15475); if (state.failed) return t;
			if ( state.backtracking==0 ) {t = DEFINED_OP279;}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "defined_binary_op"



	// $ANTLR start "assignment_stmt"
	// MFortranParser2018.g:3764:1: assignment_stmt : (lbl= label )? M_ASSIGNMENT_STMT variable EQUALS expr end_of_stmt ;
	public final void assignment_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt280 =null;



		try {
			// MFortranParser2018.g:3770:5: ( (lbl= label )? M_ASSIGNMENT_STMT variable EQUALS expr end_of_stmt )
			// MFortranParser2018.g:3770:7: (lbl= label )? M_ASSIGNMENT_STMT variable EQUALS expr end_of_stmt
			{
			// MFortranParser2018.g:3770:7: (lbl= label )?
			int alt322=2;
			int LA322_0 = input.LA(1);
			if ( (LA322_0==DIGIT_STR) ) {
				alt322=1;
			}
			switch (alt322) {
				case 1 :
					// MFortranParser2018.g:3770:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_assignment_stmt15510);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,M_ASSIGNMENT_STMT,FOLLOW_M_ASSIGNMENT_STMT_in_assignment_stmt15521); if (state.failed) return;
			pushFollow(FOLLOW_variable_in_assignment_stmt15523);
			variable();
			state._fsp--;
			if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_assignment_stmt15525); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_assignment_stmt15527);
			expr();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_assignment_stmt15536);
			end_of_stmt280=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.assignment_stmt(lbl, end_of_stmt280);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "assignment_stmt"



	// $ANTLR start "pointer_assignment_stmt"
	// MFortranParser2018.g:3789:1: pointer_assignment_stmt options {backtrack=true; } : ( (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref EQ_GT expr end_of_stmt | (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_spec_list RPAREN EQ_GT expr end_of_stmt | (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_remapping_list RPAREN EQ_GT expr end_of_stmt );
	public final void pointer_assignment_stmt() throws RecognitionException {
		Token lbl =null;
		Token end_of_stmt281 =null;
		Token end_of_stmt282 =null;
		Token end_of_stmt283 =null;



		try {
			// MFortranParser2018.g:3796:5: ( (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref EQ_GT expr end_of_stmt | (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_spec_list RPAREN EQ_GT expr end_of_stmt | (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_remapping_list RPAREN EQ_GT expr end_of_stmt )
			int alt326=3;
			int LA326_0 = input.LA(1);
			if ( (LA326_0==DIGIT_STR) ) {
				int LA326_1 = input.LA(2);
				if ( (synpred34_MFortranParser2018()) ) {
					alt326=1;
				}
				else if ( (synpred35_MFortranParser2018()) ) {
					alt326=2;
				}
				else if ( (true) ) {
					alt326=3;
				}

			}
			else if ( (LA326_0==M_PTR_ASSIGNMENT_STMT) ) {
				int LA326_2 = input.LA(2);
				if ( (synpred34_MFortranParser2018()) ) {
					alt326=1;
				}
				else if ( (synpred35_MFortranParser2018()) ) {
					alt326=2;
				}
				else if ( (true) ) {
					alt326=3;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 326, 0, input);
				throw nvae;
			}

			switch (alt326) {
				case 1 :
					// MFortranParser2018.g:3796:7: (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref EQ_GT expr end_of_stmt
					{
					// MFortranParser2018.g:3796:7: (lbl= label )?
					int alt323=2;
					int LA323_0 = input.LA(1);
					if ( (LA323_0==DIGIT_STR) ) {
						alt323=1;
					}
					switch (alt323) {
						case 1 :
							// MFortranParser2018.g:3796:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_pointer_assignment_stmt15583);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,M_PTR_ASSIGNMENT_STMT,FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15595); if (state.failed) return;
					pushFollow(FOLLOW_data_ref_in_pointer_assignment_stmt15597);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					match(input,EQ_GT,FOLLOW_EQ_GT_in_pointer_assignment_stmt15599); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_pointer_assignment_stmt15601);
					expr();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_pointer_assignment_stmt15609);
					end_of_stmt281=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.pointer_assignment_stmt(lbl, 
					              end_of_stmt281, MFPUtils.PAS_NONE);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:3801:7: (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_spec_list RPAREN EQ_GT expr end_of_stmt
					{
					// MFortranParser2018.g:3801:7: (lbl= label )?
					int alt324=2;
					int LA324_0 = input.LA(1);
					if ( (LA324_0==DIGIT_STR) ) {
						alt324=1;
					}
					switch (alt324) {
						case 1 :
							// MFortranParser2018.g:3801:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_pointer_assignment_stmt15630);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,M_PTR_ASSIGNMENT_STMT,FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15641); if (state.failed) return;
					pushFollow(FOLLOW_data_ref_in_pointer_assignment_stmt15643);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_pointer_assignment_stmt15652); if (state.failed) return;
					pushFollow(FOLLOW_bounds_spec_list_in_pointer_assignment_stmt15654);
					bounds_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_pointer_assignment_stmt15656); if (state.failed) return;
					match(input,EQ_GT,FOLLOW_EQ_GT_in_pointer_assignment_stmt15658); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_pointer_assignment_stmt15660);
					expr();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_pointer_assignment_stmt15669);
					end_of_stmt282=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.pointer_assignment_stmt(lbl, 
					              end_of_stmt282, MFPUtils.PAS_BOUND_SPEC);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:3807:7: (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_remapping_list RPAREN EQ_GT expr end_of_stmt
					{
					// MFortranParser2018.g:3807:7: (lbl= label )?
					int alt325=2;
					int LA325_0 = input.LA(1);
					if ( (LA325_0==DIGIT_STR) ) {
						alt325=1;
					}
					switch (alt325) {
						case 1 :
							// MFortranParser2018.g:3807:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_pointer_assignment_stmt15690);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,M_PTR_ASSIGNMENT_STMT,FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15702); if (state.failed) return;
					pushFollow(FOLLOW_data_ref_in_pointer_assignment_stmt15704);
					data_ref();
					state._fsp--;
					if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_pointer_assignment_stmt15713); if (state.failed) return;
					pushFollow(FOLLOW_bounds_remapping_list_in_pointer_assignment_stmt15715);
					bounds_remapping_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_pointer_assignment_stmt15717); if (state.failed) return;
					match(input,EQ_GT,FOLLOW_EQ_GT_in_pointer_assignment_stmt15719); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_pointer_assignment_stmt15721);
					expr();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_pointer_assignment_stmt15730);
					end_of_stmt283=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.pointer_assignment_stmt(lbl, 
					              end_of_stmt283, MFPUtils.PAS_BOUND_REMAP);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "pointer_assignment_stmt"



	// $ANTLR start "data_pointer_object"
	// MFortranParser2018.g:3821:1: data_pointer_object : designator ;
	public final void data_pointer_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:3822:5: ( designator )
			// MFortranParser2018.g:3822:7: designator
			{
			pushFollow(FOLLOW_designator_in_data_pointer_object15759);
			designator();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.data_pointer_object(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "data_pointer_object"



	// $ANTLR start "bounds_spec"
	// MFortranParser2018.g:3829:1: bounds_spec : expr COLON ;
	public final void bounds_spec() throws RecognitionException {
		try {
			// MFortranParser2018.g:3830:5: ( expr COLON )
			// MFortranParser2018.g:3830:7: expr COLON
			{
			pushFollow(FOLLOW_expr_in_bounds_spec15780);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COLON,FOLLOW_COLON_in_bounds_spec15782); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.bounds_spec(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bounds_spec"



	// $ANTLR start "bounds_spec_list"
	// MFortranParser2018.g:3833:1: bounds_spec_list : bounds_spec ( COMMA bounds_spec )* ;
	public final void bounds_spec_list() throws RecognitionException {

		  int numBS = 1;

		try {
			// MFortranParser2018.g:3840:5: ( bounds_spec ( COMMA bounds_spec )* )
			// MFortranParser2018.g:3840:7: bounds_spec ( COMMA bounds_spec )*
			{
			pushFollow(FOLLOW_bounds_spec_in_bounds_spec_list15809);
			bounds_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3841:7: ( COMMA bounds_spec )*
			loop327:
			while (true) {
				int alt327=2;
				int LA327_0 = input.LA(1);
				if ( (LA327_0==COMMA) ) {
					alt327=1;
				}

				switch (alt327) {
				case 1 :
					// MFortranParser2018.g:3841:9: COMMA bounds_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_bounds_spec_list15819); if (state.failed) return;
					pushFollow(FOLLOW_bounds_spec_in_bounds_spec_list15821);
					bounds_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numBS++;}
					}
					break;

				default :
					break loop327;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.bounds_spec_list(numBS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bounds_spec_list"



	// $ANTLR start "bounds_remapping"
	// MFortranParser2018.g:3849:1: bounds_remapping : expr COLON expr ;
	public final void bounds_remapping() throws RecognitionException {
		try {
			// MFortranParser2018.g:3850:5: ( expr COLON expr )
			// MFortranParser2018.g:3850:7: expr COLON expr
			{
			pushFollow(FOLLOW_expr_in_bounds_remapping15845);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COLON,FOLLOW_COLON_in_bounds_remapping15847); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_bounds_remapping15849);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.bounds_remapping(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bounds_remapping"



	// $ANTLR start "bounds_remapping_list"
	// MFortranParser2018.g:3854:1: bounds_remapping_list : bounds_remapping ( COMMA bounds_remapping )* ;
	public final void bounds_remapping_list() throws RecognitionException {

		  int numBR = 1;

		try {
			// MFortranParser2018.g:3861:5: ( bounds_remapping ( COMMA bounds_remapping )* )
			// MFortranParser2018.g:3861:7: bounds_remapping ( COMMA bounds_remapping )*
			{
			pushFollow(FOLLOW_bounds_remapping_in_bounds_remapping_list15884);
			bounds_remapping();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3862:7: ( COMMA bounds_remapping )*
			loop328:
			while (true) {
				int alt328=2;
				int LA328_0 = input.LA(1);
				if ( (LA328_0==COMMA) ) {
					alt328=1;
				}

				switch (alt328) {
				case 1 :
					// MFortranParser2018.g:3862:9: COMMA bounds_remapping
					{
					match(input,COMMA,FOLLOW_COMMA_in_bounds_remapping_list15894); if (state.failed) return;
					pushFollow(FOLLOW_bounds_remapping_in_bounds_remapping_list15896);
					bounds_remapping();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numBR++;}
					}
					break;

				default :
					break loop328;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.bounds_remapping_list(numBR);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "bounds_remapping_list"



	// $ANTLR start "proc_pointer_object"
	// MFortranParser2018.g:3878:1: proc_pointer_object : designator ;
	public final void proc_pointer_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:3879:5: ( designator )
			// MFortranParser2018.g:3879:7: designator
			{
			pushFollow(FOLLOW_designator_in_proc_pointer_object15923);
			designator();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.proc_pointer_object(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_pointer_object"



	// $ANTLR start "where_stmt"
	// MFortranParser2018.g:3905:1: where_stmt : (lbl= label )? M_WHERE_STMT WHERE LPAREN expr RPAREN assignment_stmt ;
	public final void where_stmt() throws RecognitionException {
		Token WHERE284=null;
		Token lbl =null;



		try {
			// MFortranParser2018.g:3911:5: ( (lbl= label )? M_WHERE_STMT WHERE LPAREN expr RPAREN assignment_stmt )
			// MFortranParser2018.g:3911:7: (lbl= label )? M_WHERE_STMT WHERE LPAREN expr RPAREN assignment_stmt
			{
			// MFortranParser2018.g:3911:7: (lbl= label )?
			int alt329=2;
			int LA329_0 = input.LA(1);
			if ( (LA329_0==DIGIT_STR) ) {
				alt329=1;
			}
			switch (alt329) {
				case 1 :
					// MFortranParser2018.g:3911:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_where_stmt15961);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,M_WHERE_STMT,FOLLOW_M_WHERE_STMT_in_where_stmt15972); if (state.failed) return;
			WHERE284=(Token)match(input,WHERE,FOLLOW_WHERE_in_where_stmt15974); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_where_stmt15976); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_where_stmt15978);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_where_stmt15980); if (state.failed) return;
			pushFollow(FOLLOW_assignment_stmt_in_where_stmt15989);
			assignment_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.where_stmt(lbl, WHERE284); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "where_stmt"



	// $ANTLR start "where_construct"
	// MFortranParser2018.g:3920:1: where_construct : where_construct_stmt ( where_body_construct )* ( masked_elsewhere_stmt ( where_body_construct )* )* ( elsewhere_stmt ( where_body_construct )* )? end_where_stmt ;
	public final void where_construct() throws RecognitionException {

		  int numC = 0;
		  int numMC = 0;
		  int numEwC = 0; 
		  boolean hasMEw = false;
		  boolean hasEw = false;

		try {
			// MFortranParser2018.g:3928:5: ( where_construct_stmt ( where_body_construct )* ( masked_elsewhere_stmt ( where_body_construct )* )* ( elsewhere_stmt ( where_body_construct )* )? end_where_stmt )
			// MFortranParser2018.g:3928:7: where_construct_stmt ( where_body_construct )* ( masked_elsewhere_stmt ( where_body_construct )* )* ( elsewhere_stmt ( where_body_construct )* )? end_where_stmt
			{
			pushFollow(FOLLOW_where_construct_stmt_in_where_construct16023);
			where_construct_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:3929:7: ( where_body_construct )*
			loop330:
			while (true) {
				int alt330=2;
				int LA330_0 = input.LA(1);
				if ( (LA330_0==DIGIT_STR) ) {
					int LA330_1 = input.LA(2);
					if ( (LA330_1==M_ASSIGNMENT_STMT||LA330_1==M_WHERE_STMT) ) {
						alt330=1;
					}

				}
				else if ( (LA330_0==IDENT||LA330_0==M_ASSIGNMENT_STMT||(LA330_0 >= M_WHERE_CONSTRUCT_STMT && LA330_0 <= M_WHERE_STMT)) ) {
					alt330=1;
				}

				switch (alt330) {
				case 1 :
					// MFortranParser2018.g:3929:9: where_body_construct
					{
					pushFollow(FOLLOW_where_body_construct_in_where_construct16033);
					where_body_construct();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numC++;}
					}
					break;

				default :
					break loop330;
				}
			}

			// MFortranParser2018.g:3930:7: ( masked_elsewhere_stmt ( where_body_construct )* )*
			loop332:
			while (true) {
				int alt332=2;
				switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA332_1 = input.LA(2);
					if ( (LA332_1==ELSE) ) {
						int LA332_2 = input.LA(3);
						if ( (LA332_2==WHERE) ) {
							int LA332_5 = input.LA(4);
							if ( (LA332_5==LPAREN) ) {
								alt332=1;
							}

						}

					}
					else if ( (LA332_1==ELSEWHERE) ) {
						int LA332_3 = input.LA(3);
						if ( (LA332_3==LPAREN) ) {
							alt332=1;
						}

					}

					}
					break;
				case ELSE:
					{
					int LA332_2 = input.LA(2);
					if ( (LA332_2==WHERE) ) {
						int LA332_5 = input.LA(3);
						if ( (LA332_5==LPAREN) ) {
							alt332=1;
						}

					}

					}
					break;
				case ELSEWHERE:
					{
					int LA332_3 = input.LA(2);
					if ( (LA332_3==LPAREN) ) {
						alt332=1;
					}

					}
					break;
				}
				switch (alt332) {
				case 1 :
					// MFortranParser2018.g:3930:9: masked_elsewhere_stmt ( where_body_construct )*
					{
					pushFollow(FOLLOW_masked_elsewhere_stmt_in_where_construct16049);
					masked_elsewhere_stmt();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:3930:31: ( where_body_construct )*
					loop331:
					while (true) {
						int alt331=2;
						int LA331_0 = input.LA(1);
						if ( (LA331_0==DIGIT_STR) ) {
							int LA331_1 = input.LA(2);
							if ( (LA331_1==M_ASSIGNMENT_STMT||LA331_1==M_WHERE_STMT) ) {
								alt331=1;
							}

						}
						else if ( (LA331_0==IDENT||LA331_0==M_ASSIGNMENT_STMT||(LA331_0 >= M_WHERE_CONSTRUCT_STMT && LA331_0 <= M_WHERE_STMT)) ) {
							alt331=1;
						}

						switch (alt331) {
						case 1 :
							// MFortranParser2018.g:3930:33: where_body_construct
							{
							pushFollow(FOLLOW_where_body_construct_in_where_construct16053);
							where_body_construct();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) { numMC++;}
							}
							break;

						default :
							break loop331;
						}
					}

					if ( state.backtracking==0 ) { hasMEw = true;
					            MFPA.masked_elsewhere_stmt__end(numMC);
					          }
					}
					break;

				default :
					break loop332;
				}
			}

			// MFortranParser2018.g:3935:7: ( elsewhere_stmt ( where_body_construct )* )?
			int alt334=2;
			int LA334_0 = input.LA(1);
			if ( (LA334_0==DIGIT_STR) ) {
				int LA334_1 = input.LA(2);
				if ( (LA334_1==ELSE||LA334_1==ELSEWHERE) ) {
					alt334=1;
				}
			}
			else if ( (LA334_0==ELSE||LA334_0==ELSEWHERE) ) {
				alt334=1;
			}
			switch (alt334) {
				case 1 :
					// MFortranParser2018.g:3935:9: elsewhere_stmt ( where_body_construct )*
					{
					pushFollow(FOLLOW_elsewhere_stmt_in_where_construct16090);
					elsewhere_stmt();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:3935:24: ( where_body_construct )*
					loop333:
					while (true) {
						int alt333=2;
						int LA333_0 = input.LA(1);
						if ( (LA333_0==DIGIT_STR) ) {
							int LA333_1 = input.LA(2);
							if ( (LA333_1==M_ASSIGNMENT_STMT||LA333_1==M_WHERE_STMT) ) {
								alt333=1;
							}

						}
						else if ( (LA333_0==IDENT||LA333_0==M_ASSIGNMENT_STMT||(LA333_0 >= M_WHERE_CONSTRUCT_STMT && LA333_0 <= M_WHERE_STMT)) ) {
							alt333=1;
						}

						switch (alt333) {
						case 1 :
							// MFortranParser2018.g:3935:26: where_body_construct
							{
							pushFollow(FOLLOW_where_body_construct_in_where_construct16094);
							where_body_construct();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {numEwC++;}
							}
							break;

						default :
							break loop333;
						}
					}

					if ( state.backtracking==0 ) { hasEw = true;
					            MFPA.elsewhere_stmt__end(numEwC);
					          }
					}
					break;

			}

			pushFollow(FOLLOW_end_where_stmt_in_where_construct16128);
			end_where_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.where_construct(numC, hasMEw, hasEw);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "where_construct"



	// $ANTLR start "where_construct_stmt"
	// MFortranParser2018.g:3948:1: where_construct_stmt : ( IDENT COLON )? M_WHERE_CONSTRUCT_STMT WHERE LPAREN expr RPAREN end_of_stmt ;
	public final void where_construct_stmt() throws RecognitionException {
		Token IDENT285=null;
		Token WHERE286=null;
		Token end_of_stmt287 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:3955:5: ( ( IDENT COLON )? M_WHERE_CONSTRUCT_STMT WHERE LPAREN expr RPAREN end_of_stmt )
			// MFortranParser2018.g:3955:7: ( IDENT COLON )? M_WHERE_CONSTRUCT_STMT WHERE LPAREN expr RPAREN end_of_stmt
			{
			// MFortranParser2018.g:3955:7: ( IDENT COLON )?
			int alt335=2;
			int LA335_0 = input.LA(1);
			if ( (LA335_0==IDENT) ) {
				alt335=1;
			}
			switch (alt335) {
				case 1 :
					// MFortranParser2018.g:3955:9: IDENT COLON
					{
					IDENT285=(Token)match(input,IDENT,FOLLOW_IDENT_in_where_construct_stmt16167); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_where_construct_stmt16169); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT285;}
					}
					break;

			}

			match(input,M_WHERE_CONSTRUCT_STMT,FOLLOW_M_WHERE_CONSTRUCT_STMT_in_where_construct_stmt16182); if (state.failed) return;
			WHERE286=(Token)match(input,WHERE,FOLLOW_WHERE_in_where_construct_stmt16184); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_where_construct_stmt16186); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_where_construct_stmt16188);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_where_construct_stmt16190); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_where_construct_stmt16199);
			end_of_stmt287=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.where_construct_stmt(id, WHERE286, end_of_stmt287);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "where_construct_stmt"



	// $ANTLR start "where_body_construct"
	// MFortranParser2018.g:3965:1: where_body_construct : ( assignment_stmt | where_stmt | where_construct );
	public final void where_body_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:3969:5: ( assignment_stmt | where_stmt | where_construct )
			int alt336=3;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA336_1 = input.LA(2);
				if ( (LA336_1==M_ASSIGNMENT_STMT) ) {
					alt336=1;
				}
				else if ( (LA336_1==M_WHERE_STMT) ) {
					alt336=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 336, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_ASSIGNMENT_STMT:
				{
				alt336=1;
				}
				break;
			case M_WHERE_STMT:
				{
				alt336=2;
				}
				break;
			case IDENT:
			case M_WHERE_CONSTRUCT_STMT:
				{
				alt336=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 336, 0, input);
				throw nvae;
			}
			switch (alt336) {
				case 1 :
					// MFortranParser2018.g:3969:7: assignment_stmt
					{
					pushFollow(FOLLOW_assignment_stmt_in_where_body_construct16233);
					assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:3970:7: where_stmt
					{
					pushFollow(FOLLOW_where_stmt_in_where_body_construct16241);
					where_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:3971:7: where_construct
					{
					pushFollow(FOLLOW_where_construct_in_where_body_construct16249);
					where_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.where_body_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "where_body_construct"



	// $ANTLR start "masked_elsewhere_stmt"
	// MFortranParser2018.g:3991:1: masked_elsewhere_stmt : ( (lbl= label )? ELSE WHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt | (lbl= label )? ELSEWHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt );
	public final void masked_elsewhere_stmt() throws RecognitionException {
		Token IDENT288=null;
		Token ELSE289=null;
		Token WHERE290=null;
		Token IDENT292=null;
		Token ELSEWHERE293=null;
		Token lbl =null;
		Token end_of_stmt291 =null;
		Token end_of_stmt294 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:3998:5: ( (lbl= label )? ELSE WHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt | (lbl= label )? ELSEWHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt )
			int alt341=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA341_1 = input.LA(2);
				if ( (LA341_1==ELSE) ) {
					alt341=1;
				}
				else if ( (LA341_1==ELSEWHERE) ) {
					alt341=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 341, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ELSE:
				{
				alt341=1;
				}
				break;
			case ELSEWHERE:
				{
				alt341=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 341, 0, input);
				throw nvae;
			}
			switch (alt341) {
				case 1 :
					// MFortranParser2018.g:3998:7: (lbl= label )? ELSE WHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:3998:7: (lbl= label )?
					int alt337=2;
					int LA337_0 = input.LA(1);
					if ( (LA337_0==DIGIT_STR) ) {
						alt337=1;
					}
					switch (alt337) {
						case 1 :
							// MFortranParser2018.g:3998:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_masked_elsewhere_stmt16285);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSE289=(Token)match(input,ELSE,FOLLOW_ELSE_in_masked_elsewhere_stmt16296); if (state.failed) return;
					WHERE290=(Token)match(input,WHERE,FOLLOW_WHERE_in_masked_elsewhere_stmt16298); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_masked_elsewhere_stmt16300); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_masked_elsewhere_stmt16302);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_masked_elsewhere_stmt16304); if (state.failed) return;
					// MFortranParser2018.g:3999:37: ( IDENT )?
					int alt338=2;
					int LA338_0 = input.LA(1);
					if ( (LA338_0==IDENT) ) {
						alt338=1;
					}
					switch (alt338) {
						case 1 :
							// MFortranParser2018.g:3999:39: IDENT
							{
							IDENT288=(Token)match(input,IDENT,FOLLOW_IDENT_in_masked_elsewhere_stmt16308); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT288;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_masked_elsewhere_stmt16321);
					end_of_stmt291=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.masked_elsewhere_stmt(lbl, 
					              ELSE289, WHERE290, id, end_of_stmt291);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4003:7: (lbl= label )? ELSEWHERE LPAREN expr RPAREN ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4003:7: (lbl= label )?
					int alt339=2;
					int LA339_0 = input.LA(1);
					if ( (LA339_0==DIGIT_STR) ) {
						alt339=1;
					}
					switch (alt339) {
						case 1 :
							// MFortranParser2018.g:4003:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_masked_elsewhere_stmt16342);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSEWHERE293=(Token)match(input,ELSEWHERE,FOLLOW_ELSEWHERE_in_masked_elsewhere_stmt16353); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_masked_elsewhere_stmt16355); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_masked_elsewhere_stmt16357);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_masked_elsewhere_stmt16359); if (state.failed) return;
					// MFortranParser2018.g:4004:36: ( IDENT )?
					int alt340=2;
					int LA340_0 = input.LA(1);
					if ( (LA340_0==IDENT) ) {
						alt340=1;
					}
					switch (alt340) {
						case 1 :
							// MFortranParser2018.g:4004:38: IDENT
							{
							IDENT292=(Token)match(input,IDENT,FOLLOW_IDENT_in_masked_elsewhere_stmt16363); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT292;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_masked_elsewhere_stmt16375);
					end_of_stmt294=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.masked_elsewhere_stmt(lbl, 
					              ELSEWHERE293, null, id, end_of_stmt294);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "masked_elsewhere_stmt"



	// $ANTLR start "elsewhere_stmt"
	// MFortranParser2018.g:4013:1: elsewhere_stmt : ( (lbl= label )? ELSE WHERE ( IDENT )? end_of_stmt | (lbl= label )? ELSEWHERE ( IDENT )? end_of_stmt );
	public final void elsewhere_stmt() throws RecognitionException {
		Token IDENT295=null;
		Token ELSE296=null;
		Token WHERE297=null;
		Token IDENT299=null;
		Token ELSEWHERE300=null;
		Token lbl =null;
		Token end_of_stmt298 =null;
		Token end_of_stmt301 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:4020:5: ( (lbl= label )? ELSE WHERE ( IDENT )? end_of_stmt | (lbl= label )? ELSEWHERE ( IDENT )? end_of_stmt )
			int alt346=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA346_1 = input.LA(2);
				if ( (LA346_1==ELSE) ) {
					alt346=1;
				}
				else if ( (LA346_1==ELSEWHERE) ) {
					alt346=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 346, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ELSE:
				{
				alt346=1;
				}
				break;
			case ELSEWHERE:
				{
				alt346=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 346, 0, input);
				throw nvae;
			}
			switch (alt346) {
				case 1 :
					// MFortranParser2018.g:4020:7: (lbl= label )? ELSE WHERE ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4020:7: (lbl= label )?
					int alt342=2;
					int LA342_0 = input.LA(1);
					if ( (LA342_0==DIGIT_STR) ) {
						alt342=1;
					}
					switch (alt342) {
						case 1 :
							// MFortranParser2018.g:4020:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_elsewhere_stmt16416);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSE296=(Token)match(input,ELSE,FOLLOW_ELSE_in_elsewhere_stmt16428); if (state.failed) return;
					WHERE297=(Token)match(input,WHERE,FOLLOW_WHERE_in_elsewhere_stmt16430); if (state.failed) return;
					// MFortranParser2018.g:4021:18: ( IDENT )?
					int alt343=2;
					int LA343_0 = input.LA(1);
					if ( (LA343_0==IDENT) ) {
						alt343=1;
					}
					switch (alt343) {
						case 1 :
							// MFortranParser2018.g:4021:19: IDENT
							{
							IDENT295=(Token)match(input,IDENT,FOLLOW_IDENT_in_elsewhere_stmt16433); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT295;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_elsewhere_stmt16446);
					end_of_stmt298=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.elsewhere_stmt(lbl, 
					              ELSE296, WHERE297, id, end_of_stmt298);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4025:7: (lbl= label )? ELSEWHERE ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4025:7: (lbl= label )?
					int alt344=2;
					int LA344_0 = input.LA(1);
					if ( (LA344_0==DIGIT_STR) ) {
						alt344=1;
					}
					switch (alt344) {
						case 1 :
							// MFortranParser2018.g:4025:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_elsewhere_stmt16467);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSEWHERE300=(Token)match(input,ELSEWHERE,FOLLOW_ELSEWHERE_in_elsewhere_stmt16479); if (state.failed) return;
					// MFortranParser2018.g:4026:17: ( IDENT )?
					int alt345=2;
					int LA345_0 = input.LA(1);
					if ( (LA345_0==IDENT) ) {
						alt345=1;
					}
					switch (alt345) {
						case 1 :
							// MFortranParser2018.g:4026:18: IDENT
							{
							IDENT299=(Token)match(input,IDENT,FOLLOW_IDENT_in_elsewhere_stmt16482); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT299;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_elsewhere_stmt16494);
					end_of_stmt301=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.elsewhere_stmt(lbl, 
					              ELSEWHERE300, null, id, end_of_stmt301);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "elsewhere_stmt"



	// $ANTLR start "end_where_stmt"
	// MFortranParser2018.g:4035:1: end_where_stmt : (lbl= label )? END WHERE ( IDENT )? end_of_stmt ;
	public final void end_where_stmt() throws RecognitionException {
		Token IDENT302=null;
		Token END303=null;
		Token WHERE304=null;
		Token lbl =null;
		Token end_of_stmt305 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4042:5: ( (lbl= label )? END WHERE ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4042:7: (lbl= label )? END WHERE ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4042:7: (lbl= label )?
			int alt347=2;
			int LA347_0 = input.LA(1);
			if ( (LA347_0==DIGIT_STR) ) {
				alt347=1;
			}
			switch (alt347) {
				case 1 :
					// MFortranParser2018.g:4042:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_where_stmt16534);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END303=(Token)match(input,END,FOLLOW_END_in_end_where_stmt16545); if (state.failed) return;
			WHERE304=(Token)match(input,WHERE,FOLLOW_WHERE_in_end_where_stmt16547); if (state.failed) return;
			// MFortranParser2018.g:4043:17: ( IDENT )?
			int alt348=2;
			int LA348_0 = input.LA(1);
			if ( (LA348_0==IDENT) ) {
				alt348=1;
			}
			switch (alt348) {
				case 1 :
					// MFortranParser2018.g:4043:19: IDENT
					{
					IDENT302=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_where_stmt16551); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT302;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_where_stmt16564);
			end_of_stmt305=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_where_stmt(lbl, 
			              END303, WHERE304, id, end_of_stmt305);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_where_stmt"



	// $ANTLR start "forall_construct"
	// MFortranParser2018.g:4052:1: forall_construct : forall_construct_stmt ( forall_body_construct )* end_forall_stmt ;
	public final void forall_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4056:5: ( forall_construct_stmt ( forall_body_construct )* end_forall_stmt )
			// MFortranParser2018.g:4056:7: forall_construct_stmt ( forall_body_construct )* end_forall_stmt
			{
			pushFollow(FOLLOW_forall_construct_stmt_in_forall_construct16597);
			forall_construct_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4057:7: ( forall_body_construct )*
			loop349:
			while (true) {
				int alt349=2;
				int LA349_0 = input.LA(1);
				if ( (LA349_0==DIGIT_STR) ) {
					int LA349_1 = input.LA(2);
					if ( (LA349_1==IDENT||LA349_1==M_ASSIGNMENT_STMT||(LA349_1 >= M_FORALL_CONSTRUCT_STMT && LA349_1 <= M_FORALL_STMT)||LA349_1==M_PTR_ASSIGNMENT_STMT||LA349_1==M_WHERE_STMT) ) {
						alt349=1;
					}

				}
				else if ( (LA349_0==IDENT||LA349_0==M_ASSIGNMENT_STMT||(LA349_0 >= M_FORALL_CONSTRUCT_STMT && LA349_0 <= M_FORALL_STMT)||LA349_0==M_PTR_ASSIGNMENT_STMT||(LA349_0 >= M_WHERE_CONSTRUCT_STMT && LA349_0 <= M_WHERE_STMT)) ) {
					alt349=1;
				}

				switch (alt349) {
				case 1 :
					// MFortranParser2018.g:4057:9: forall_body_construct
					{
					pushFollow(FOLLOW_forall_body_construct_in_forall_construct16607);
					forall_body_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop349;
				}
			}

			pushFollow(FOLLOW_end_forall_stmt_in_forall_construct16618);
			end_forall_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.forall_construct(); 
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "forall_construct"



	// $ANTLR start "forall_construct_stmt"
	// MFortranParser2018.g:4065:1: forall_construct_stmt : (lbl= label )? ( IDENT COLON )? M_FORALL_CONSTRUCT_STMT FORALL concurrent_header end_of_stmt ;
	public final void forall_construct_stmt() throws RecognitionException {
		Token IDENT306=null;
		Token FORALL307=null;
		Token lbl =null;
		Token end_of_stmt308 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:4072:5: ( (lbl= label )? ( IDENT COLON )? M_FORALL_CONSTRUCT_STMT FORALL concurrent_header end_of_stmt )
			// MFortranParser2018.g:4072:7: (lbl= label )? ( IDENT COLON )? M_FORALL_CONSTRUCT_STMT FORALL concurrent_header end_of_stmt
			{
			// MFortranParser2018.g:4072:7: (lbl= label )?
			int alt350=2;
			int LA350_0 = input.LA(1);
			if ( (LA350_0==DIGIT_STR) ) {
				alt350=1;
			}
			switch (alt350) {
				case 1 :
					// MFortranParser2018.g:4072:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_forall_construct_stmt16648);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4073:7: ( IDENT COLON )?
			int alt351=2;
			int LA351_0 = input.LA(1);
			if ( (LA351_0==IDENT) ) {
				alt351=1;
			}
			switch (alt351) {
				case 1 :
					// MFortranParser2018.g:4073:9: IDENT COLON
					{
					IDENT306=(Token)match(input,IDENT,FOLLOW_IDENT_in_forall_construct_stmt16662); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_forall_construct_stmt16664); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT306;}
					}
					break;

			}

			match(input,M_FORALL_CONSTRUCT_STMT,FOLLOW_M_FORALL_CONSTRUCT_STMT_in_forall_construct_stmt16677); if (state.failed) return;
			FORALL307=(Token)match(input,FORALL,FOLLOW_FORALL_in_forall_construct_stmt16679); if (state.failed) return;
			pushFollow(FOLLOW_concurrent_header_in_forall_construct_stmt16681);
			concurrent_header();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_forall_construct_stmt16690);
			end_of_stmt308=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.forall_construct_stmt(lbl, 
			              id, FORALL307, end_of_stmt308);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "forall_construct_stmt"



	// $ANTLR start "forall_body_construct"
	// MFortranParser2018.g:4083:1: forall_body_construct : ( forall_assignment_stmt | where_stmt | where_construct | forall_construct | forall_stmt );
	public final void forall_body_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4087:5: ( forall_assignment_stmt | where_stmt | where_construct | forall_construct | forall_stmt )
			int alt352=5;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case M_ASSIGNMENT_STMT:
				case M_PTR_ASSIGNMENT_STMT:
					{
					alt352=1;
					}
					break;
				case M_WHERE_STMT:
					{
					alt352=2;
					}
					break;
				case IDENT:
				case M_FORALL_CONSTRUCT_STMT:
					{
					alt352=4;
					}
					break;
				case M_FORALL_STMT:
					{
					alt352=5;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 352, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case M_ASSIGNMENT_STMT:
			case M_PTR_ASSIGNMENT_STMT:
				{
				alt352=1;
				}
				break;
			case M_WHERE_STMT:
				{
				alt352=2;
				}
				break;
			case IDENT:
				{
				int LA352_4 = input.LA(2);
				if ( (LA352_4==COLON) ) {
					int LA352_8 = input.LA(3);
					if ( (LA352_8==M_WHERE_CONSTRUCT_STMT) ) {
						alt352=3;
					}
					else if ( (LA352_8==M_FORALL_CONSTRUCT_STMT) ) {
						alt352=4;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 352, 8, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 352, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_WHERE_CONSTRUCT_STMT:
				{
				alt352=3;
				}
				break;
			case M_FORALL_CONSTRUCT_STMT:
				{
				alt352=4;
				}
				break;
			case M_FORALL_STMT:
				{
				alt352=5;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 352, 0, input);
				throw nvae;
			}
			switch (alt352) {
				case 1 :
					// MFortranParser2018.g:4087:7: forall_assignment_stmt
					{
					pushFollow(FOLLOW_forall_assignment_stmt_in_forall_body_construct16725);
					forall_assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:4088:7: where_stmt
					{
					pushFollow(FOLLOW_where_stmt_in_forall_body_construct16733);
					where_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:4089:7: where_construct
					{
					pushFollow(FOLLOW_where_construct_in_forall_body_construct16741);
					where_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:4090:7: forall_construct
					{
					pushFollow(FOLLOW_forall_construct_in_forall_body_construct16749);
					forall_construct();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:4091:7: forall_stmt
					{
					pushFollow(FOLLOW_forall_stmt_in_forall_body_construct16757);
					forall_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.forall_body_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "forall_body_construct"



	// $ANTLR start "forall_assignment_stmt"
	// MFortranParser2018.g:4097:1: forall_assignment_stmt : ( assignment_stmt | pointer_assignment_stmt );
	public final void forall_assignment_stmt() throws RecognitionException {
		try {
			// MFortranParser2018.g:4101:5: ( assignment_stmt | pointer_assignment_stmt )
			int alt353=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA353_1 = input.LA(2);
				if ( (LA353_1==M_ASSIGNMENT_STMT) ) {
					alt353=1;
				}
				else if ( (LA353_1==M_PTR_ASSIGNMENT_STMT) ) {
					alt353=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 353, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case M_ASSIGNMENT_STMT:
				{
				alt353=1;
				}
				break;
			case M_PTR_ASSIGNMENT_STMT:
				{
				alt353=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 353, 0, input);
				throw nvae;
			}
			switch (alt353) {
				case 1 :
					// MFortranParser2018.g:4101:7: assignment_stmt
					{
					pushFollow(FOLLOW_assignment_stmt_in_forall_assignment_stmt16780);
					assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.forall_assignment_stmt(false); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:4103:7: pointer_assignment_stmt
					{
					pushFollow(FOLLOW_pointer_assignment_stmt_in_forall_assignment_stmt16798);
					pointer_assignment_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.forall_assignment_stmt(true); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "forall_assignment_stmt"



	// $ANTLR start "end_forall_stmt"
	// MFortranParser2018.g:4110:1: end_forall_stmt : (lbl= label )? END FORALL ( IDENT )? end_of_stmt ;
	public final void end_forall_stmt() throws RecognitionException {
		Token IDENT309=null;
		Token END310=null;
		Token FORALL311=null;
		Token lbl =null;
		Token end_of_stmt312 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4117:5: ( (lbl= label )? END FORALL ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4117:7: (lbl= label )? END FORALL ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4117:7: (lbl= label )?
			int alt354=2;
			int LA354_0 = input.LA(1);
			if ( (LA354_0==DIGIT_STR) ) {
				alt354=1;
			}
			switch (alt354) {
				case 1 :
					// MFortranParser2018.g:4117:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_forall_stmt16838);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END310=(Token)match(input,END,FOLLOW_END_in_end_forall_stmt16850); if (state.failed) return;
			FORALL311=(Token)match(input,FORALL,FOLLOW_FORALL_in_end_forall_stmt16852); if (state.failed) return;
			// MFortranParser2018.g:4118:18: ( IDENT )?
			int alt355=2;
			int LA355_0 = input.LA(1);
			if ( (LA355_0==IDENT) ) {
				alt355=1;
			}
			switch (alt355) {
				case 1 :
					// MFortranParser2018.g:4118:20: IDENT
					{
					IDENT309=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_forall_stmt16856); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT309;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_forall_stmt16868);
			end_of_stmt312=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_forall_stmt(lbl, 
			              END310, FORALL311, id, end_of_stmt312);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_forall_stmt"



	// $ANTLR start "forall_stmt"
	// MFortranParser2018.g:4129:1: forall_stmt : (lbl= label )? M_FORALL_STMT FORALL concurrent_header forall_assignment_stmt ;
	public final void forall_stmt() throws RecognitionException {
		Token FORALL313=null;
		Token lbl =null;



		try {
			// MFortranParser2018.g:4135:5: ( (lbl= label )? M_FORALL_STMT FORALL concurrent_header forall_assignment_stmt )
			// MFortranParser2018.g:4135:7: (lbl= label )? M_FORALL_STMT FORALL concurrent_header forall_assignment_stmt
			{
			// MFortranParser2018.g:4135:7: (lbl= label )?
			int alt356=2;
			int LA356_0 = input.LA(1);
			if ( (LA356_0==DIGIT_STR) ) {
				alt356=1;
			}
			switch (alt356) {
				case 1 :
					// MFortranParser2018.g:4135:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_forall_stmt16908);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,M_FORALL_STMT,FOLLOW_M_FORALL_STMT_in_forall_stmt16920); if (state.failed) return;
			FORALL313=(Token)match(input,FORALL,FOLLOW_FORALL_in_forall_stmt16922); if (state.failed) return;
			pushFollow(FOLLOW_concurrent_header_in_forall_stmt16924);
			concurrent_header();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_forall_assignment_stmt_in_forall_stmt16926);
			forall_assignment_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.forall_stmt(lbl, FORALL313);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "forall_stmt"



	// $ANTLR start "block"
	// MFortranParser2018.g:4143:1: block : ( execution_part_construct )* ;
	public final void block() throws RecognitionException {

		  int numExec = 0;

		try {
			// MFortranParser2018.g:4150:5: ( ( execution_part_construct )* )
			// MFortranParser2018.g:4150:7: ( execution_part_construct )*
			{
			// MFortranParser2018.g:4150:7: ( execution_part_construct )*
			loop357:
			while (true) {
				int alt357=2;
				switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA357_1 = input.LA(2);
					if ( (LA357_1==END) ) {
						int LA357_2 = input.LA(3);
						if ( (LA357_2==FILE) ) {
							alt357=1;
						}

					}
					else if ( (LA357_1==ALLOCATE||LA357_1==ASSOCIATE||LA357_1==BACKSPACE||LA357_1==BLOCK||LA357_1==CALL||LA357_1==CLOSE||LA357_1==CONTINUE||(LA357_1 >= CRITICAL && LA357_1 <= DEALLOCATE)||LA357_1==DO||LA357_1==ENTRY||LA357_1==EXIT||LA357_1==FLUSH||LA357_1==FORMAT||(LA357_1 >= GO && LA357_1 <= GOTO)||(LA357_1 >= IDENT && LA357_1 <= IF)||LA357_1==INQUIRE||(LA357_1 >= M_ALLOCATE_STMT_1 && LA357_1 <= M_ASSIGNMENT_STMT)||(LA357_1 >= M_FORALL_CONSTRUCT_STMT && LA357_1 <= M_IF_STMT)||LA357_1==M_INQUIRE_STMT_2||LA357_1==M_PTR_ASSIGNMENT_STMT||LA357_1==M_WHERE_STMT||LA357_1==NULLIFY||LA357_1==OPEN||LA357_1==PRINT||LA357_1==READ||(LA357_1 >= RETURN && LA357_1 <= REWIND)||(LA357_1 >= SELECT && LA357_1 <= SELECTTYPE)||LA357_1==STOP||LA357_1==SYNC||LA357_1==WAIT||LA357_1==WRITE) ) {
						alt357=1;
					}

					}
					break;
				case END:
					{
					int LA357_2 = input.LA(2);
					if ( (LA357_2==FILE) ) {
						alt357=1;
					}

					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DATA:
				case DEALLOCATE:
				case DO:
				case ENTRY:
				case EXIT:
				case FLUSH:
				case FORMAT:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt357=1;
					}
					break;
				}
				switch (alt357) {
				case 1 :
					// MFortranParser2018.g:4150:9: execution_part_construct
					{
					pushFollow(FOLLOW_execution_part_construct_in_block16966);
					execution_part_construct();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numExec++;}
					}
					break;

				default :
					break loop357;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.block(numExec);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "block"



	// $ANTLR start "associate_construct"
	// MFortranParser2018.g:4156:1: associate_construct : associate_stmt block end_associate_stmt ;
	public final void associate_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4157:5: ( associate_stmt block end_associate_stmt )
			// MFortranParser2018.g:4157:7: associate_stmt block end_associate_stmt
			{
			pushFollow(FOLLOW_associate_stmt_in_associate_construct16989);
			associate_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_block_in_associate_construct16997);
			block();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_associate_stmt_in_associate_construct17005);
			end_associate_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.associate_construct(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "associate_construct"



	// $ANTLR start "associate_stmt"
	// MFortranParser2018.g:4166:1: associate_stmt : (lbl= label )? ( IDENT COLON )? ASSOCIATE LPAREN association_list RPAREN end_of_stmt ;
	public final void associate_stmt() throws RecognitionException {
		Token IDENT314=null;
		Token ASSOCIATE315=null;
		Token lbl =null;
		Token end_of_stmt316 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4173:5: ( (lbl= label )? ( IDENT COLON )? ASSOCIATE LPAREN association_list RPAREN end_of_stmt )
			// MFortranParser2018.g:4173:7: (lbl= label )? ( IDENT COLON )? ASSOCIATE LPAREN association_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:4173:7: (lbl= label )?
			int alt358=2;
			int LA358_0 = input.LA(1);
			if ( (LA358_0==DIGIT_STR) ) {
				alt358=1;
			}
			switch (alt358) {
				case 1 :
					// MFortranParser2018.g:4173:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_associate_stmt17046);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4174:7: ( IDENT COLON )?
			int alt359=2;
			int LA359_0 = input.LA(1);
			if ( (LA359_0==IDENT) ) {
				alt359=1;
			}
			switch (alt359) {
				case 1 :
					// MFortranParser2018.g:4174:9: IDENT COLON
					{
					IDENT314=(Token)match(input,IDENT,FOLLOW_IDENT_in_associate_stmt17059); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_associate_stmt17061); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT314;}
					}
					break;

			}

			ASSOCIATE315=(Token)match(input,ASSOCIATE,FOLLOW_ASSOCIATE_in_associate_stmt17074); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_associate_stmt17076); if (state.failed) return;
			pushFollow(FOLLOW_association_list_in_associate_stmt17078);
			association_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_associate_stmt17080); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_associate_stmt17089);
			end_of_stmt316=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.associate_stmt(lbl, 
			              id, ASSOCIATE315, end_of_stmt316);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "associate_stmt"



	// $ANTLR start "association"
	// MFortranParser2018.g:4185:1: association : IDENT EQ_GT selector ;
	public final void association() throws RecognitionException {
		Token IDENT317=null;

		try {
			// MFortranParser2018.g:4186:5: ( IDENT EQ_GT selector )
			// MFortranParser2018.g:4186:7: IDENT EQ_GT selector
			{
			IDENT317=(Token)match(input,IDENT,FOLLOW_IDENT_in_association17118); if (state.failed) return;
			match(input,EQ_GT,FOLLOW_EQ_GT_in_association17120); if (state.failed) return;
			pushFollow(FOLLOW_selector_in_association17122);
			selector();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.association(IDENT317); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "association"



	// $ANTLR start "association_list"
	// MFortranParser2018.g:4190:1: association_list : association ( COMMA association )* ;
	public final void association_list() throws RecognitionException {

		  int numA = 1;

		try {
			// MFortranParser2018.g:4197:5: ( association ( COMMA association )* )
			// MFortranParser2018.g:4197:7: association ( COMMA association )*
			{
			pushFollow(FOLLOW_association_in_association_list17157);
			association();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4198:7: ( COMMA association )*
			loop360:
			while (true) {
				int alt360=2;
				int LA360_0 = input.LA(1);
				if ( (LA360_0==COMMA) ) {
					alt360=1;
				}

				switch (alt360) {
				case 1 :
					// MFortranParser2018.g:4198:9: COMMA association
					{
					match(input,COMMA,FOLLOW_COMMA_in_association_list17167); if (state.failed) return;
					pushFollow(FOLLOW_association_in_association_list17169);
					association();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numA++;}
					}
					break;

				default :
					break loop360;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.association_list(numA);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "association_list"



	// $ANTLR start "selector"
	// MFortranParser2018.g:4205:1: selector : expr ;
	public final void selector() throws RecognitionException {
		try {
			// MFortranParser2018.g:4206:5: ( expr )
			// MFortranParser2018.g:4206:7: expr
			{
			pushFollow(FOLLOW_expr_in_selector17193);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.selector(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "selector"



	// $ANTLR start "end_associate_stmt"
	// MFortranParser2018.g:4212:1: end_associate_stmt : (lbl= label )? END ASSOCIATE ( IDENT )? end_of_stmt ;
	public final void end_associate_stmt() throws RecognitionException {
		Token IDENT318=null;
		Token END319=null;
		Token ASSOCIATE320=null;
		Token lbl =null;
		Token end_of_stmt321 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4219:5: ( (lbl= label )? END ASSOCIATE ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4219:7: (lbl= label )? END ASSOCIATE ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4219:7: (lbl= label )?
			int alt361=2;
			int LA361_0 = input.LA(1);
			if ( (LA361_0==DIGIT_STR) ) {
				alt361=1;
			}
			switch (alt361) {
				case 1 :
					// MFortranParser2018.g:4219:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_associate_stmt17225);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END319=(Token)match(input,END,FOLLOW_END_in_end_associate_stmt17236); if (state.failed) return;
			ASSOCIATE320=(Token)match(input,ASSOCIATE,FOLLOW_ASSOCIATE_in_end_associate_stmt17238); if (state.failed) return;
			// MFortranParser2018.g:4220:21: ( IDENT )?
			int alt362=2;
			int LA362_0 = input.LA(1);
			if ( (LA362_0==IDENT) ) {
				alt362=1;
			}
			switch (alt362) {
				case 1 :
					// MFortranParser2018.g:4220:22: IDENT
					{
					IDENT318=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_associate_stmt17241); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT318;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_associate_stmt17254);
			end_of_stmt321=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_associate_stmt(lbl, 
			            END319, ASSOCIATE320, id, end_of_stmt321);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_associate_stmt"



	// $ANTLR start "block_construct"
	// MFortranParser2018.g:4233:1: block_construct : block_stmt specification_part_and_block end_block_stmt ;
	public final void block_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4237:5: ( block_stmt specification_part_and_block end_block_stmt )
			// MFortranParser2018.g:4237:7: block_stmt specification_part_and_block end_block_stmt
			{
			pushFollow(FOLLOW_block_stmt_in_block_construct17287);
			block_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_and_block_in_block_construct17295);
			specification_part_and_block();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_block_stmt_in_block_construct17304);
			end_block_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.block_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "block_construct"



	// $ANTLR start "block_stmt"
	// MFortranParser2018.g:4245:1: block_stmt : (lbl= label )? ( IDENT COLON )? BLOCK end_of_stmt ;
	public final void block_stmt() throws RecognitionException {
		Token IDENT322=null;
		Token BLOCK323=null;
		Token lbl =null;
		Token end_of_stmt324 =null;


		  Token name = null;

		try {
			// MFortranParser2018.g:4252:5: ( (lbl= label )? ( IDENT COLON )? BLOCK end_of_stmt )
			// MFortranParser2018.g:4252:7: (lbl= label )? ( IDENT COLON )? BLOCK end_of_stmt
			{
			// MFortranParser2018.g:4252:7: (lbl= label )?
			int alt363=2;
			int LA363_0 = input.LA(1);
			if ( (LA363_0==DIGIT_STR) ) {
				alt363=1;
			}
			switch (alt363) {
				case 1 :
					// MFortranParser2018.g:4252:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_block_stmt17334);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4253:7: ( IDENT COLON )?
			int alt364=2;
			int LA364_0 = input.LA(1);
			if ( (LA364_0==IDENT) ) {
				alt364=1;
			}
			switch (alt364) {
				case 1 :
					// MFortranParser2018.g:4253:9: IDENT COLON
					{
					IDENT322=(Token)match(input,IDENT,FOLLOW_IDENT_in_block_stmt17347); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_block_stmt17349); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT322;}
					}
					break;

			}

			BLOCK323=(Token)match(input,BLOCK,FOLLOW_BLOCK_in_block_stmt17355); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_block_stmt17364);
			end_of_stmt324=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.block_stmt(lbl, 
			              name, BLOCK323, end_of_stmt324);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "block_stmt"



	// $ANTLR start "specification_part_and_block"
	// MFortranParser2018.g:4262:1: specification_part_and_block : ( use_stmt )* ( import_stmt )* declaration_construct_and_block ;
	public final void specification_part_and_block() throws RecognitionException {

		  int numUS = 0; 
		  int numIS = 0; 
		  gctr0 = 0;

		try {
			// MFortranParser2018.g:4268:5: ( ( use_stmt )* ( import_stmt )* declaration_construct_and_block )
			// MFortranParser2018.g:4268:7: ( use_stmt )* ( import_stmt )* declaration_construct_and_block
			{
			// MFortranParser2018.g:4268:7: ( use_stmt )*
			loop365:
			while (true) {
				int alt365=2;
				int LA365_0 = input.LA(1);
				if ( (LA365_0==DIGIT_STR) ) {
					int LA365_1 = input.LA(2);
					if ( (LA365_1==USE) ) {
						alt365=1;
					}

				}
				else if ( (LA365_0==USE) ) {
					alt365=1;
				}

				switch (alt365) {
				case 1 :
					// MFortranParser2018.g:4268:9: use_stmt
					{
					pushFollow(FOLLOW_use_stmt_in_specification_part_and_block17400);
					use_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numUS++;}
					}
					break;

				default :
					break loop365;
				}
			}

			// MFortranParser2018.g:4269:7: ( import_stmt )*
			loop366:
			while (true) {
				int alt366=2;
				int LA366_0 = input.LA(1);
				if ( (LA366_0==DIGIT_STR) ) {
					int LA366_1 = input.LA(2);
					if ( (LA366_1==IMPORT) ) {
						alt366=1;
					}

				}
				else if ( (LA366_0==IMPORT) ) {
					alt366=1;
				}

				switch (alt366) {
				case 1 :
					// MFortranParser2018.g:4269:9: import_stmt
					{
					pushFollow(FOLLOW_import_stmt_in_specification_part_and_block17416);
					import_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numIS++;}
					}
					break;

				default :
					break loop366;
				}
			}

			pushFollow(FOLLOW_declaration_construct_and_block_in_specification_part_and_block17430);
			declaration_construct_and_block();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.specification_part_and_block(
			              numUS, numIS, gctr0);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "specification_part_and_block"



	// $ANTLR start "declaration_construct_and_block"
	// MFortranParser2018.g:4275:1: declaration_construct_and_block : ( ( ( label )? ENTRY )=> entry_stmt declaration_construct_and_block | ( ( label )? ENUM )=> enum_def declaration_construct_and_block | ( ( label )? FORMAT )=> format_stmt declaration_construct_and_block | ( ( label )? INTERFACE )=> interface_block declaration_construct_and_block | ( ( label )? PARAMETER )=> parameter_stmt declaration_construct_and_block | ( ( label )? PROCEDURE )=> procedure_declaration_stmt declaration_construct_and_block | ( derived_type_stmt )=> derived_type_def declaration_construct_and_block | ( type_declaration_stmt )=> type_declaration_stmt declaration_construct_and_block | ( ( label )? access_spec )=> access_stmt declaration_construct_and_block | ( ( label )? ALLOCATABLE )=> allocatable_stmt declaration_construct_and_block | ( ( label )? ASYNCHRONOUS )=> asynchronous_stmt declaration_construct_and_block | ( ( label )? BIND )=> bind_stmt declaration_construct_and_block | ( ( label )? CODIMENSION )=> codimension_stmt declaration_construct_and_block | ( ( label )? DATA )=> data_stmt declaration_construct_and_block | ( ( label )? DIMENSION )=> dimension_stmt declaration_construct_and_block | ( ( label )? EXTERNAL )=> external_stmt declaration_construct_and_block | ( ( label )? INTRINSIC )=> intrinsic_stmt declaration_construct_and_block | ( ( label )? POINTER )=> pointer_stmt declaration_construct_and_block | ( ( label )? PROTECTED )=> protected_stmt declaration_construct_and_block | ( ( label )? SAVE )=> save_stmt declaration_construct_and_block | ( ( label )? TARGET )=> target_stmt declaration_construct_and_block | ( ( label )? VOLATILE )=> volatile_stmt declaration_construct_and_block | block );
	public final void declaration_construct_and_block() throws RecognitionException {

		  gctr0++;

		try {
			// MFortranParser2018.g:4279:5: ( ( ( label )? ENTRY )=> entry_stmt declaration_construct_and_block | ( ( label )? ENUM )=> enum_def declaration_construct_and_block | ( ( label )? FORMAT )=> format_stmt declaration_construct_and_block | ( ( label )? INTERFACE )=> interface_block declaration_construct_and_block | ( ( label )? PARAMETER )=> parameter_stmt declaration_construct_and_block | ( ( label )? PROCEDURE )=> procedure_declaration_stmt declaration_construct_and_block | ( derived_type_stmt )=> derived_type_def declaration_construct_and_block | ( type_declaration_stmt )=> type_declaration_stmt declaration_construct_and_block | ( ( label )? access_spec )=> access_stmt declaration_construct_and_block | ( ( label )? ALLOCATABLE )=> allocatable_stmt declaration_construct_and_block | ( ( label )? ASYNCHRONOUS )=> asynchronous_stmt declaration_construct_and_block | ( ( label )? BIND )=> bind_stmt declaration_construct_and_block | ( ( label )? CODIMENSION )=> codimension_stmt declaration_construct_and_block | ( ( label )? DATA )=> data_stmt declaration_construct_and_block | ( ( label )? DIMENSION )=> dimension_stmt declaration_construct_and_block | ( ( label )? EXTERNAL )=> external_stmt declaration_construct_and_block | ( ( label )? INTRINSIC )=> intrinsic_stmt declaration_construct_and_block | ( ( label )? POINTER )=> pointer_stmt declaration_construct_and_block | ( ( label )? PROTECTED )=> protected_stmt declaration_construct_and_block | ( ( label )? SAVE )=> save_stmt declaration_construct_and_block | ( ( label )? TARGET )=> target_stmt declaration_construct_and_block | ( ( label )? VOLATILE )=> volatile_stmt declaration_construct_and_block | block )
			int alt367=23;
			alt367 = dfa367.predict(input);
			switch (alt367) {
				case 1 :
					// MFortranParser2018.g:4279:7: ( ( label )? ENTRY )=> entry_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_entry_stmt_in_declaration_construct_and_block17482);
					entry_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17484);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:4281:7: ( ( label )? ENUM )=> enum_def declaration_construct_and_block
					{
					pushFollow(FOLLOW_enum_def_in_declaration_construct_and_block17513);
					enum_def();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17515);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:4283:7: ( ( label )? FORMAT )=> format_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_format_stmt_in_declaration_construct_and_block17544);
					format_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17546);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 4 :
					// MFortranParser2018.g:4285:7: ( ( label )? INTERFACE )=> interface_block declaration_construct_and_block
					{
					pushFollow(FOLLOW_interface_block_in_declaration_construct_and_block17575);
					interface_block();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17577);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 5 :
					// MFortranParser2018.g:4287:7: ( ( label )? PARAMETER )=> parameter_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_parameter_stmt_in_declaration_construct_and_block17606);
					parameter_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17608);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 6 :
					// MFortranParser2018.g:4289:7: ( ( label )? PROCEDURE )=> procedure_declaration_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_procedure_declaration_stmt_in_declaration_construct_and_block17638);
					procedure_declaration_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17640);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 7 :
					// MFortranParser2018.g:4291:7: ( derived_type_stmt )=> derived_type_def declaration_construct_and_block
					{
					pushFollow(FOLLOW_derived_type_def_in_declaration_construct_and_block17664);
					derived_type_def();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17666);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 8 :
					// MFortranParser2018.g:4293:7: ( type_declaration_stmt )=> type_declaration_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_type_declaration_stmt_in_declaration_construct_and_block17690);
					type_declaration_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17692);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 9 :
					// MFortranParser2018.g:4295:7: ( ( label )? access_spec )=> access_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_access_stmt_in_declaration_construct_and_block17721);
					access_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17723);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 10 :
					// MFortranParser2018.g:4297:7: ( ( label )? ALLOCATABLE )=> allocatable_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_allocatable_stmt_in_declaration_construct_and_block17752);
					allocatable_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17755);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 11 :
					// MFortranParser2018.g:4299:7: ( ( label )? ASYNCHRONOUS )=> asynchronous_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_asynchronous_stmt_in_declaration_construct_and_block17785);
					asynchronous_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17787);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 12 :
					// MFortranParser2018.g:4301:7: ( ( label )? BIND )=> bind_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_bind_stmt_in_declaration_construct_and_block17816);
					bind_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17818);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 13 :
					// MFortranParser2018.g:4303:7: ( ( label )? CODIMENSION )=> codimension_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_codimension_stmt_in_declaration_construct_and_block17847);
					codimension_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17849);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 14 :
					// MFortranParser2018.g:4305:7: ( ( label )? DATA )=> data_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_data_stmt_in_declaration_construct_and_block17879);
					data_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17881);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 15 :
					// MFortranParser2018.g:4307:7: ( ( label )? DIMENSION )=> dimension_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_dimension_stmt_in_declaration_construct_and_block17910);
					dimension_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17912);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 16 :
					// MFortranParser2018.g:4309:7: ( ( label )? EXTERNAL )=> external_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_external_stmt_in_declaration_construct_and_block17941);
					external_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17943);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 17 :
					// MFortranParser2018.g:4311:7: ( ( label )? INTRINSIC )=> intrinsic_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_intrinsic_stmt_in_declaration_construct_and_block17972);
					intrinsic_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17974);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 18 :
					// MFortranParser2018.g:4313:7: ( ( label )? POINTER )=> pointer_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_pointer_stmt_in_declaration_construct_and_block18004);
					pointer_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18006);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 19 :
					// MFortranParser2018.g:4315:7: ( ( label )? PROTECTED )=> protected_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_protected_stmt_in_declaration_construct_and_block18035);
					protected_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18037);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 20 :
					// MFortranParser2018.g:4317:7: ( ( label )? SAVE )=> save_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_save_stmt_in_declaration_construct_and_block18067);
					save_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18069);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 21 :
					// MFortranParser2018.g:4319:7: ( ( label )? TARGET )=> target_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_target_stmt_in_declaration_construct_and_block18099);
					target_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18101);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 22 :
					// MFortranParser2018.g:4321:7: ( ( label )? VOLATILE )=> volatile_stmt declaration_construct_and_block
					{
					pushFollow(FOLLOW_volatile_stmt_in_declaration_construct_and_block18131);
					volatile_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18133);
					declaration_construct_and_block();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 23 :
					// MFortranParser2018.g:4323:7: block
					{
					pushFollow(FOLLOW_block_in_declaration_construct_and_block18141);
					block();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {gctr0--;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "declaration_construct_and_block"



	// $ANTLR start "end_block_stmt"
	// MFortranParser2018.g:4329:1: end_block_stmt : (lbl= label )? END BLOCK ( IDENT )? end_of_stmt ;
	public final void end_block_stmt() throws RecognitionException {
		Token IDENT325=null;
		Token END326=null;
		Token BLOCK327=null;
		Token lbl =null;
		Token end_of_stmt328 =null;


		  Token name = null;

		try {
			// MFortranParser2018.g:4336:5: ( (lbl= label )? END BLOCK ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4336:7: (lbl= label )? END BLOCK ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4336:7: (lbl= label )?
			int alt368=2;
			int LA368_0 = input.LA(1);
			if ( (LA368_0==DIGIT_STR) ) {
				alt368=1;
			}
			switch (alt368) {
				case 1 :
					// MFortranParser2018.g:4336:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_block_stmt18176);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END326=(Token)match(input,END,FOLLOW_END_in_end_block_stmt18188); if (state.failed) return;
			BLOCK327=(Token)match(input,BLOCK,FOLLOW_BLOCK_in_end_block_stmt18190); if (state.failed) return;
			// MFortranParser2018.g:4337:17: ( IDENT )?
			int alt369=2;
			int LA369_0 = input.LA(1);
			if ( (LA369_0==IDENT) ) {
				alt369=1;
			}
			switch (alt369) {
				case 1 :
					// MFortranParser2018.g:4337:18: IDENT
					{
					IDENT325=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_block_stmt18193); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT325;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_block_stmt18206);
			end_of_stmt328=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_block_stmt(lbl, 
			              name, END326, BLOCK327, end_of_stmt328);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_block_stmt"



	// $ANTLR start "change_team_construct"
	// MFortranParser2018.g:4346:1: change_team_construct : change_team_stmt block end_change_team_stmt ;
	public final void change_team_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4350:5: ( change_team_stmt block end_change_team_stmt )
			// MFortranParser2018.g:4350:7: change_team_stmt block end_change_team_stmt
			{
			pushFollow(FOLLOW_change_team_stmt_in_change_team_construct18239);
			change_team_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_block_in_change_team_construct18241);
			block();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_change_team_stmt_in_change_team_construct18243);
			end_change_team_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.change_team_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "change_team_construct"



	// $ANTLR start "change_team_stmt"
	// MFortranParser2018.g:4356:1: change_team_stmt : (lbl= label )? ( IDENT COLON )? CHANGE TEAM LPAREN expr ( COMMA coarray_association_list )? ( COMMA sync_stat_list )? RPAREN ;
	public final void change_team_stmt() throws RecognitionException {
		Token IDENT329=null;
		Token CHANGE330=null;
		Token TEAM331=null;
		Token lbl =null;


		  Token name = null;
		  boolean hasCAL = false;
		  boolean hasSSL = false;

		try {
			// MFortranParser2018.g:4365:5: ( (lbl= label )? ( IDENT COLON )? CHANGE TEAM LPAREN expr ( COMMA coarray_association_list )? ( COMMA sync_stat_list )? RPAREN )
			// MFortranParser2018.g:4365:7: (lbl= label )? ( IDENT COLON )? CHANGE TEAM LPAREN expr ( COMMA coarray_association_list )? ( COMMA sync_stat_list )? RPAREN
			{
			// MFortranParser2018.g:4365:7: (lbl= label )?
			int alt370=2;
			int LA370_0 = input.LA(1);
			if ( (LA370_0==DIGIT_STR) ) {
				alt370=1;
			}
			switch (alt370) {
				case 1 :
					// MFortranParser2018.g:4365:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_change_team_stmt18273);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4366:7: ( IDENT COLON )?
			int alt371=2;
			int LA371_0 = input.LA(1);
			if ( (LA371_0==IDENT) ) {
				alt371=1;
			}
			switch (alt371) {
				case 1 :
					// MFortranParser2018.g:4366:9: IDENT COLON
					{
					IDENT329=(Token)match(input,IDENT,FOLLOW_IDENT_in_change_team_stmt18286); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_change_team_stmt18288); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT329;}
					}
					break;

			}

			CHANGE330=(Token)match(input,CHANGE,FOLLOW_CHANGE_in_change_team_stmt18294); if (state.failed) return;
			TEAM331=(Token)match(input,TEAM,FOLLOW_TEAM_in_change_team_stmt18296); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_change_team_stmt18305); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_change_team_stmt18307);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4367:19: ( COMMA coarray_association_list )?
			int alt372=2;
			int LA372_0 = input.LA(1);
			if ( (LA372_0==COMMA) ) {
				int LA372_1 = input.LA(2);
				if ( (LA372_1==IDENT) ) {
					int LA372_3 = input.LA(3);
					if ( (LA372_3==LBRACKET) ) {
						alt372=1;
					}
				}
			}
			switch (alt372) {
				case 1 :
					// MFortranParser2018.g:4367:20: COMMA coarray_association_list
					{
					match(input,COMMA,FOLLOW_COMMA_in_change_team_stmt18310); if (state.failed) return;
					pushFollow(FOLLOW_coarray_association_list_in_change_team_stmt18312);
					coarray_association_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasCAL = true;}
					}
					break;

			}

			// MFortranParser2018.g:4368:7: ( COMMA sync_stat_list )?
			int alt373=2;
			int LA373_0 = input.LA(1);
			if ( (LA373_0==COMMA) ) {
				alt373=1;
			}
			switch (alt373) {
				case 1 :
					// MFortranParser2018.g:4368:9: COMMA sync_stat_list
					{
					match(input,COMMA,FOLLOW_COMMA_in_change_team_stmt18326); if (state.failed) return;
					pushFollow(FOLLOW_sync_stat_list_in_change_team_stmt18328);
					sync_stat_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasSSL = true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_change_team_stmt18335); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.change_team_stmt(lbl, 
			              name, CHANGE330, TEAM331, hasCAL, hasSSL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "change_team_stmt"



	// $ANTLR start "coarray_association"
	// MFortranParser2018.g:4376:1: coarray_association : codimension_decl EQ_GT expr ;
	public final void coarray_association() throws RecognitionException {
		try {
			// MFortranParser2018.g:4377:5: ( codimension_decl EQ_GT expr )
			// MFortranParser2018.g:4377:7: codimension_decl EQ_GT expr
			{
			pushFollow(FOLLOW_codimension_decl_in_coarray_association18364);
			codimension_decl();
			state._fsp--;
			if (state.failed) return;
			match(input,EQ_GT,FOLLOW_EQ_GT_in_coarray_association18366); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_coarray_association18368);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.coarray_association(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "coarray_association"



	// $ANTLR start "coarray_association_list"
	// MFortranParser2018.g:4381:1: coarray_association_list : coarray_association ( COMMA coarray_association )* ;
	public final void coarray_association_list() throws RecognitionException {

		  int numCA = 1;

		try {
			// MFortranParser2018.g:4388:5: ( coarray_association ( COMMA coarray_association )* )
			// MFortranParser2018.g:4388:7: coarray_association ( COMMA coarray_association )*
			{
			pushFollow(FOLLOW_coarray_association_in_coarray_association_list18407);
			coarray_association();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4389:7: ( COMMA coarray_association )*
			loop374:
			while (true) {
				int alt374=2;
				int LA374_0 = input.LA(1);
				if ( (LA374_0==COMMA) ) {
					int LA374_1 = input.LA(2);
					if ( (LA374_1==IDENT) ) {
						int LA374_3 = input.LA(3);
						if ( (LA374_3==LBRACKET) ) {
							alt374=1;
						}

					}

				}

				switch (alt374) {
				case 1 :
					// MFortranParser2018.g:4389:9: COMMA coarray_association
					{
					match(input,COMMA,FOLLOW_COMMA_in_coarray_association_list18417); if (state.failed) return;
					pushFollow(FOLLOW_coarray_association_in_coarray_association_list18419);
					coarray_association();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCA++;}
					}
					break;

				default :
					break loop374;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.coarray_association_list(numCA);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "coarray_association_list"



	// $ANTLR start "end_change_team_stmt"
	// MFortranParser2018.g:4395:1: end_change_team_stmt : (lbl= label )? END TEAM ( LPAREN ( sync_stat_list )? RPAREN )? ( IDENT )? ;
	public final void end_change_team_stmt() throws RecognitionException {
		Token IDENT332=null;
		Token END333=null;
		Token TEAM334=null;
		Token lbl =null;


		  Token name = null;
		  boolean hasSSL = false;

		try {
			// MFortranParser2018.g:4400:5: ( (lbl= label )? END TEAM ( LPAREN ( sync_stat_list )? RPAREN )? ( IDENT )? )
			// MFortranParser2018.g:4400:7: (lbl= label )? END TEAM ( LPAREN ( sync_stat_list )? RPAREN )? ( IDENT )?
			{
			// MFortranParser2018.g:4400:7: (lbl= label )?
			int alt375=2;
			int LA375_0 = input.LA(1);
			if ( (LA375_0==DIGIT_STR) ) {
				alt375=1;
			}
			switch (alt375) {
				case 1 :
					// MFortranParser2018.g:4400:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_change_team_stmt18450);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END333=(Token)match(input,END,FOLLOW_END_in_end_change_team_stmt18461); if (state.failed) return;
			TEAM334=(Token)match(input,TEAM,FOLLOW_TEAM_in_end_change_team_stmt18463); if (state.failed) return;
			// MFortranParser2018.g:4402:7: ( LPAREN ( sync_stat_list )? RPAREN )?
			int alt377=2;
			int LA377_0 = input.LA(1);
			if ( (LA377_0==LPAREN) ) {
				alt377=1;
			}
			switch (alt377) {
				case 1 :
					// MFortranParser2018.g:4402:9: LPAREN ( sync_stat_list )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_end_change_team_stmt18474); if (state.failed) return;
					// MFortranParser2018.g:4402:16: ( sync_stat_list )?
					int alt376=2;
					int LA376_0 = input.LA(1);
					if ( (LA376_0==IDENT) ) {
						alt376=1;
					}
					switch (alt376) {
						case 1 :
							// MFortranParser2018.g:4402:17: sync_stat_list
							{
							pushFollow(FOLLOW_sync_stat_list_in_end_change_team_stmt18477);
							sync_stat_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSSL = true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_end_change_team_stmt18483); if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4403:7: ( IDENT )?
			int alt378=2;
			int LA378_0 = input.LA(1);
			if ( (LA378_0==IDENT) ) {
				alt378=1;
			}
			switch (alt378) {
				case 1 :
					// MFortranParser2018.g:4403:9: IDENT
					{
					IDENT332=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_change_team_stmt18496); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT332;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.end_change_team_stmt(lbl, 
			              END333, TEAM334, name, hasSSL);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_change_team_stmt"



	// $ANTLR start "critical_construct"
	// MFortranParser2018.g:4416:1: critical_construct : critical_stmt block end_critical_stmt ;
	public final void critical_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4417:5: ( critical_stmt block end_critical_stmt )
			// MFortranParser2018.g:4417:7: critical_stmt block end_critical_stmt
			{
			pushFollow(FOLLOW_critical_stmt_in_critical_construct18532);
			critical_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_block_in_critical_construct18534);
			block();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_critical_stmt_in_critical_construct18536);
			end_critical_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.critical_construct();}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "critical_construct"



	// $ANTLR start "critical_stmt"
	// MFortranParser2018.g:4424:1: critical_stmt : (lbl= label )? ( IDENT COLON )? CRITICAL end_of_stmt ;
	public final void critical_stmt() throws RecognitionException {
		Token IDENT335=null;
		Token CRITICAL336=null;
		Token lbl =null;
		Token end_of_stmt337 =null;


		  Token name = null;

		try {
			// MFortranParser2018.g:4431:5: ( (lbl= label )? ( IDENT COLON )? CRITICAL end_of_stmt )
			// MFortranParser2018.g:4431:7: (lbl= label )? ( IDENT COLON )? CRITICAL end_of_stmt
			{
			// MFortranParser2018.g:4431:7: (lbl= label )?
			int alt379=2;
			int LA379_0 = input.LA(1);
			if ( (LA379_0==DIGIT_STR) ) {
				alt379=1;
			}
			switch (alt379) {
				case 1 :
					// MFortranParser2018.g:4431:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_critical_stmt18576);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4432:7: ( IDENT COLON )?
			int alt380=2;
			int LA380_0 = input.LA(1);
			if ( (LA380_0==IDENT) ) {
				alt380=1;
			}
			switch (alt380) {
				case 1 :
					// MFortranParser2018.g:4432:8: IDENT COLON
					{
					IDENT335=(Token)match(input,IDENT,FOLLOW_IDENT_in_critical_stmt18588); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_critical_stmt18590); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT335;}
					}
					break;

			}

			CRITICAL336=(Token)match(input,CRITICAL,FOLLOW_CRITICAL_in_critical_stmt18596); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_critical_stmt18605);
			end_of_stmt337=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.critical_stmt(lbl, 
			              name, CRITICAL336, end_of_stmt337);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "critical_stmt"



	// $ANTLR start "end_critical_stmt"
	// MFortranParser2018.g:4441:1: end_critical_stmt : (lbl= label )? END CRITICAL ( IDENT )? end_of_stmt ;
	public final void end_critical_stmt() throws RecognitionException {
		Token IDENT338=null;
		Token END339=null;
		Token CRITICAL340=null;
		Token lbl =null;
		Token end_of_stmt341 =null;


		  Token name = null;

		try {
			// MFortranParser2018.g:4448:5: ( (lbl= label )? END CRITICAL ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4448:7: (lbl= label )? END CRITICAL ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4448:7: (lbl= label )?
			int alt381=2;
			int LA381_0 = input.LA(1);
			if ( (LA381_0==DIGIT_STR) ) {
				alt381=1;
			}
			switch (alt381) {
				case 1 :
					// MFortranParser2018.g:4448:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_critical_stmt18645);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END339=(Token)match(input,END,FOLLOW_END_in_end_critical_stmt18657); if (state.failed) return;
			CRITICAL340=(Token)match(input,CRITICAL,FOLLOW_CRITICAL_in_end_critical_stmt18659); if (state.failed) return;
			// MFortranParser2018.g:4449:20: ( IDENT )?
			int alt382=2;
			int LA382_0 = input.LA(1);
			if ( (LA382_0==IDENT) ) {
				alt382=1;
			}
			switch (alt382) {
				case 1 :
					// MFortranParser2018.g:4449:21: IDENT
					{
					IDENT338=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_critical_stmt18662); if (state.failed) return;
					if ( state.backtracking==0 ) {name=IDENT338;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_critical_stmt18675);
			end_of_stmt341=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_critical_stmt(lbl, 
			              name, END339, CRITICAL340, end_of_stmt341);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_critical_stmt"



	// $ANTLR start "do_construct"
	// MFortranParser2018.g:4462:1: do_construct : do_stmt block end_do ;
	public final void do_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4463:5: ( do_stmt block end_do )
			// MFortranParser2018.g:4463:7: do_stmt block end_do
			{
			pushFollow(FOLLOW_do_stmt_in_do_construct18705);
			do_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_block_in_do_construct18713);
			block();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_do_in_do_construct18721);
			end_do();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.do_construct(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "do_construct"



	// $ANTLR start "do_stmt"
	// MFortranParser2018.g:4475:1: do_stmt : (lbl= label )? ( IDENT COLON )? DO ( DIGIT_STR )? ( loop_control )? end_of_stmt ;
	public final void do_stmt() throws RecognitionException {
		Token IDENT342=null;
		Token DIGIT_STR343=null;
		Token DO344=null;
		Token lbl =null;
		Token end_of_stmt345 =null;


		  Token id=null;
		  Token doLbl =null;
		  boolean hasLC = false;

		try {
			// MFortranParser2018.g:4484:5: ( (lbl= label )? ( IDENT COLON )? DO ( DIGIT_STR )? ( loop_control )? end_of_stmt )
			// MFortranParser2018.g:4484:7: (lbl= label )? ( IDENT COLON )? DO ( DIGIT_STR )? ( loop_control )? end_of_stmt
			{
			// MFortranParser2018.g:4484:7: (lbl= label )?
			int alt383=2;
			int LA383_0 = input.LA(1);
			if ( (LA383_0==DIGIT_STR) ) {
				alt383=1;
			}
			switch (alt383) {
				case 1 :
					// MFortranParser2018.g:4484:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_do_stmt18762);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4485:7: ( IDENT COLON )?
			int alt384=2;
			int LA384_0 = input.LA(1);
			if ( (LA384_0==IDENT) ) {
				alt384=1;
			}
			switch (alt384) {
				case 1 :
					// MFortranParser2018.g:4485:9: IDENT COLON
					{
					IDENT342=(Token)match(input,IDENT,FOLLOW_IDENT_in_do_stmt18776); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_do_stmt18778); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT342;}
					}
					break;

			}

			DO344=(Token)match(input,DO,FOLLOW_DO_in_do_stmt18784); if (state.failed) return;
			// MFortranParser2018.g:4486:7: ( DIGIT_STR )?
			int alt385=2;
			int LA385_0 = input.LA(1);
			if ( (LA385_0==DIGIT_STR) ) {
				alt385=1;
			}
			switch (alt385) {
				case 1 :
					// MFortranParser2018.g:4486:9: DIGIT_STR
					{
					DIGIT_STR343=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_do_stmt18795); if (state.failed) return;
					if ( state.backtracking==0 ) {doLbl=DIGIT_STR343;}
					}
					break;

			}

			// MFortranParser2018.g:4487:7: ( loop_control )?
			int alt386=2;
			int LA386_0 = input.LA(1);
			if ( (LA386_0==COMMA||LA386_0==CONCURRENT||LA386_0==IDENT||LA386_0==WHILE) ) {
				alt386=1;
			}
			switch (alt386) {
				case 1 :
					// MFortranParser2018.g:4487:9: loop_control
					{
					pushFollow(FOLLOW_loop_control_in_do_stmt18810);
					loop_control();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasLC=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_do_stmt18823);
			end_of_stmt345=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.do_stmt(lbl, 
			              id, DO344, doLbl, end_of_stmt345, hasLC);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "do_stmt"



	// $ANTLR start "loop_control"
	// MFortranParser2018.g:4500:1: loop_control : ( ( COMMA )? IDENT EQUALS expr COMMA expr ( COMMA expr )? | ( COMMA )? WHILE LPAREN expr RPAREN | ( COMMA )? CONCURRENT concurrent_header );
	public final void loop_control() throws RecognitionException {
		Token IDENT346=null;
		Token WHILE347=null;
		Token CONCURRENT348=null;


		  boolean hasOE = false;

		try {
			// MFortranParser2018.g:4504:5: ( ( COMMA )? IDENT EQUALS expr COMMA expr ( COMMA expr )? | ( COMMA )? WHILE LPAREN expr RPAREN | ( COMMA )? CONCURRENT concurrent_header )
			int alt391=3;
			switch ( input.LA(1) ) {
			case COMMA:
				{
				switch ( input.LA(2) ) {
				case IDENT:
					{
					alt391=1;
					}
					break;
				case WHILE:
					{
					alt391=2;
					}
					break;
				case CONCURRENT:
					{
					alt391=3;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 391, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case IDENT:
				{
				alt391=1;
				}
				break;
			case WHILE:
				{
				alt391=2;
				}
				break;
			case CONCURRENT:
				{
				alt391=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 391, 0, input);
				throw nvae;
			}
			switch (alt391) {
				case 1 :
					// MFortranParser2018.g:4504:7: ( COMMA )? IDENT EQUALS expr COMMA expr ( COMMA expr )?
					{
					// MFortranParser2018.g:4504:7: ( COMMA )?
					int alt387=2;
					int LA387_0 = input.LA(1);
					if ( (LA387_0==COMMA) ) {
						alt387=1;
					}
					switch (alt387) {
						case 1 :
							// MFortranParser2018.g:4504:9: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_loop_control18858); if (state.failed) return;
							}
							break;

					}

					IDENT346=(Token)match(input,IDENT,FOLLOW_IDENT_in_loop_control18863); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_loop_control18865); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_loop_control18867);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,COMMA,FOLLOW_COMMA_in_loop_control18869); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_loop_control18871);
					expr();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:4505:7: ( COMMA expr )?
					int alt388=2;
					int LA388_0 = input.LA(1);
					if ( (LA388_0==COMMA) ) {
						alt388=1;
					}
					switch (alt388) {
						case 1 :
							// MFortranParser2018.g:4505:9: COMMA expr
							{
							match(input,COMMA,FOLLOW_COMMA_in_loop_control18882); if (state.failed) return;
							pushFollow(FOLLOW_expr_in_loop_control18884);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasOE=true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.loop_control(IDENT346, hasOE);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4507:7: ( COMMA )? WHILE LPAREN expr RPAREN
					{
					// MFortranParser2018.g:4507:7: ( COMMA )?
					int alt389=2;
					int LA389_0 = input.LA(1);
					if ( (LA389_0==COMMA) ) {
						alt389=1;
					}
					switch (alt389) {
						case 1 :
							// MFortranParser2018.g:4507:9: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_loop_control18909); if (state.failed) return;
							}
							break;

					}

					WHILE347=(Token)match(input,WHILE,FOLLOW_WHILE_in_loop_control18914); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_loop_control18916); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_loop_control18918);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_loop_control18920); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.loop_control(WHILE347, hasOE);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:4509:7: ( COMMA )? CONCURRENT concurrent_header
					{
					// MFortranParser2018.g:4509:7: ( COMMA )?
					int alt390=2;
					int LA390_0 = input.LA(1);
					if ( (LA390_0==COMMA) ) {
						alt390=1;
					}
					switch (alt390) {
						case 1 :
							// MFortranParser2018.g:4509:9: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_loop_control18941); if (state.failed) return;
							}
							break;

					}

					CONCURRENT348=(Token)match(input,CONCURRENT,FOLLOW_CONCURRENT_in_loop_control18946); if (state.failed) return;
					pushFollow(FOLLOW_concurrent_header_in_loop_control18948);
					concurrent_header();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.loop_control(CONCURRENT348, hasOE);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "loop_control"



	// $ANTLR start "concurrent_header"
	// MFortranParser2018.g:4518:1: concurrent_header : LPAREN ( intrinsic_type_spec COLON_COLON )? concurrent_control_list ( COMMA expr )? RPAREN ;
	public final void concurrent_header() throws RecognitionException {

		  boolean hasITS = false;
		  boolean hasME = false;

		try {
			// MFortranParser2018.g:4523:5: ( LPAREN ( intrinsic_type_spec COLON_COLON )? concurrent_control_list ( COMMA expr )? RPAREN )
			// MFortranParser2018.g:4523:7: LPAREN ( intrinsic_type_spec COLON_COLON )? concurrent_control_list ( COMMA expr )? RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_concurrent_header18981); if (state.failed) return;
			// MFortranParser2018.g:4524:7: ( intrinsic_type_spec COLON_COLON )?
			int alt392=2;
			int LA392_0 = input.LA(1);
			if ( (LA392_0==CHARACTER||LA392_0==COMPLEX||(LA392_0 >= DOUBLE && LA392_0 <= DOUBLEPRECISION)||LA392_0==INTEGER||LA392_0==LOGICAL||LA392_0==REAL) ) {
				alt392=1;
			}
			switch (alt392) {
				case 1 :
					// MFortranParser2018.g:4524:8: intrinsic_type_spec COLON_COLON
					{
					pushFollow(FOLLOW_intrinsic_type_spec_in_concurrent_header18991);
					intrinsic_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_concurrent_header18993); if (state.failed) return;
					if ( state.backtracking==0 ) {hasITS = true;}
					}
					break;

			}

			pushFollow(FOLLOW_concurrent_control_list_in_concurrent_header19006);
			concurrent_control_list();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4526:7: ( COMMA expr )?
			int alt393=2;
			int LA393_0 = input.LA(1);
			if ( (LA393_0==COMMA) ) {
				alt393=1;
			}
			switch (alt393) {
				case 1 :
					// MFortranParser2018.g:4526:9: COMMA expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_concurrent_header19017); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_concurrent_header19019);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasME = true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_concurrent_header19032); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.concurrent_header(hasITS, hasME); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "concurrent_header"



	// $ANTLR start "concurrent_control"
	// MFortranParser2018.g:4537:1: concurrent_control : IDENT EQUALS expr COLON expr ( COLON expr )? ;
	public final void concurrent_control() throws RecognitionException {
		Token IDENT349=null;


		  boolean hasStrd = false;

		try {
			// MFortranParser2018.g:4541:5: ( IDENT EQUALS expr COLON expr ( COLON expr )? )
			// MFortranParser2018.g:4541:7: IDENT EQUALS expr COLON expr ( COLON expr )?
			{
			IDENT349=(Token)match(input,IDENT,FOLLOW_IDENT_in_concurrent_control19065); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_concurrent_control19067); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_concurrent_control19069);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COLON,FOLLOW_COLON_in_concurrent_control19071); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_concurrent_control19073);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4542:7: ( COLON expr )?
			int alt394=2;
			int LA394_0 = input.LA(1);
			if ( (LA394_0==COLON) ) {
				alt394=1;
			}
			switch (alt394) {
				case 1 :
					// MFortranParser2018.g:4542:9: COLON expr
					{
					match(input,COLON,FOLLOW_COLON_in_concurrent_control19084); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_concurrent_control19086);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasStrd=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.concurrent_control(IDENT349, hasStrd);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "concurrent_control"



	// $ANTLR start "concurrent_control_list"
	// MFortranParser2018.g:4546:1: concurrent_control_list : concurrent_control ( COMMA concurrent_control )* ;
	public final void concurrent_control_list() throws RecognitionException {

		  int numCC = 1;

		try {
			// MFortranParser2018.g:4553:5: ( concurrent_control ( COMMA concurrent_control )* )
			// MFortranParser2018.g:4553:7: concurrent_control ( COMMA concurrent_control )*
			{
			pushFollow(FOLLOW_concurrent_control_in_concurrent_control_list19125);
			concurrent_control();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4554:7: ( COMMA concurrent_control )*
			loop395:
			while (true) {
				int alt395=2;
				int LA395_0 = input.LA(1);
				if ( (LA395_0==COMMA) ) {
					int LA395_1 = input.LA(2);
					if ( (LA395_1==IDENT) ) {
						int LA395_3 = input.LA(3);
						if ( (LA395_3==EQUALS) ) {
							alt395=1;
						}

					}

				}

				switch (alt395) {
				case 1 :
					// MFortranParser2018.g:4554:9: COMMA concurrent_control
					{
					match(input,COMMA,FOLLOW_COMMA_in_concurrent_control_list19135); if (state.failed) return;
					pushFollow(FOLLOW_concurrent_control_in_concurrent_control_list19137);
					concurrent_control();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCC++;}
					}
					break;

				default :
					break loop395;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.concurrent_control_list(numCC);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "concurrent_control_list"



	// $ANTLR start "concurrent_locality"
	// MFortranParser2018.g:4566:1: concurrent_locality : ( locality_spec )* ;
	public final void concurrent_locality() throws RecognitionException {

		  int numCL = 0;

		try {
			// MFortranParser2018.g:4573:5: ( ( locality_spec )* )
			// MFortranParser2018.g:4573:7: ( locality_spec )*
			{
			// MFortranParser2018.g:4573:7: ( locality_spec )*
			loop396:
			while (true) {
				int alt396=2;
				int LA396_0 = input.LA(1);
				if ( (LA396_0==DEFAULT||(LA396_0 >= LOCAL && LA396_0 <= LOCAL_INT)||LA396_0==SHARED) ) {
					alt396=1;
				}

				switch (alt396) {
				case 1 :
					// MFortranParser2018.g:4573:8: locality_spec
					{
					pushFollow(FOLLOW_locality_spec_in_concurrent_locality19173);
					locality_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCL++;}
					}
					break;

				default :
					break loop396;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.concurrent_locality(numCL);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "concurrent_locality"



	// $ANTLR start "locality_spec"
	// MFortranParser2018.g:4579:1: locality_spec : ( LOCAL LPAREN generic_name_list RPAREN | LOCAL_INT LPAREN generic_name_list RPAREN | SHARED LPAREN generic_name_list RPAREN | DEFAULT LPAREN NONE RPAREN );
	public final void locality_spec() throws RecognitionException {
		Token LOCAL350=null;
		Token LOCAL_INT351=null;
		Token SHARED352=null;
		Token DEFAULT353=null;
		Token NONE354=null;

		try {
			// MFortranParser2018.g:4580:5: ( LOCAL LPAREN generic_name_list RPAREN | LOCAL_INT LPAREN generic_name_list RPAREN | SHARED LPAREN generic_name_list RPAREN | DEFAULT LPAREN NONE RPAREN )
			int alt397=4;
			switch ( input.LA(1) ) {
			case LOCAL:
				{
				alt397=1;
				}
				break;
			case LOCAL_INT:
				{
				alt397=2;
				}
				break;
			case SHARED:
				{
				alt397=3;
				}
				break;
			case DEFAULT:
				{
				alt397=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 397, 0, input);
				throw nvae;
			}
			switch (alt397) {
				case 1 :
					// MFortranParser2018.g:4580:7: LOCAL LPAREN generic_name_list RPAREN
					{
					LOCAL350=(Token)match(input,LOCAL,FOLLOW_LOCAL_in_locality_spec19197); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_locality_spec19199); if (state.failed) return;
					pushFollow(FOLLOW_generic_name_list_in_locality_spec19201);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_locality_spec19203); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.locality_spec(LOCAL350, null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:4582:7: LOCAL_INT LPAREN generic_name_list RPAREN
					{
					LOCAL_INT351=(Token)match(input,LOCAL_INT,FOLLOW_LOCAL_INT_in_locality_spec19221); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_locality_spec19223); if (state.failed) return;
					pushFollow(FOLLOW_generic_name_list_in_locality_spec19225);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_locality_spec19227); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.locality_spec(LOCAL_INT351, null); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:4584:7: SHARED LPAREN generic_name_list RPAREN
					{
					SHARED352=(Token)match(input,SHARED,FOLLOW_SHARED_in_locality_spec19245); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_locality_spec19247); if (state.failed) return;
					pushFollow(FOLLOW_generic_name_list_in_locality_spec19249);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_locality_spec19251); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.locality_spec(SHARED352, null); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:4586:7: DEFAULT LPAREN NONE RPAREN
					{
					DEFAULT353=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_locality_spec19269); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_locality_spec19271); if (state.failed) return;
					NONE354=(Token)match(input,NONE,FOLLOW_NONE_in_locality_spec19273); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_locality_spec19275); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.locality_spec(DEFAULT353, NONE354); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "locality_spec"



	// $ANTLR start "end_do"
	// MFortranParser2018.g:4598:1: end_do : ( end_do_stmt | do_term_action_stmt );
	public final void end_do() throws RecognitionException {
		try {
			// MFortranParser2018.g:4602:5: ( end_do_stmt | do_term_action_stmt )
			int alt398=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA398_1 = input.LA(2);
				if ( (LA398_1==END) ) {
					alt398=1;
				}
				else if ( (LA398_1==M_LBL_DO_TERMINAL) ) {
					alt398=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 398, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case END:
				{
				alt398=1;
				}
				break;
			case M_LBL_DO_TERMINAL:
				{
				alt398=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 398, 0, input);
				throw nvae;
			}
			switch (alt398) {
				case 1 :
					// MFortranParser2018.g:4602:7: end_do_stmt
					{
					pushFollow(FOLLOW_end_do_stmt_in_end_do19308);
					end_do_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:4603:7: do_term_action_stmt
					{
					pushFollow(FOLLOW_do_term_action_stmt_in_end_do19316);
					do_term_action_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.end_do();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_do"



	// $ANTLR start "do_term_action_stmt"
	// MFortranParser2018.g:4614:1: do_term_action_stmt : (lbl= label )? M_LBL_DO_TERMINAL ( action_stmt | ( END DO ( IDENT )? ) end_of_stmt ) ;
	public final void do_term_action_stmt() throws RecognitionException {
		Token END355=null;
		Token DO356=null;
		Token IDENT357=null;
		Token lbl =null;
		Token end_of_stmt358 =null;


		  Token id=null;
		  Token endToken = null;
		  Token doToken = null;

		try {
			// MFortranParser2018.g:4623:5: ( (lbl= label )? M_LBL_DO_TERMINAL ( action_stmt | ( END DO ( IDENT )? ) end_of_stmt ) )
			// MFortranParser2018.g:4623:7: (lbl= label )? M_LBL_DO_TERMINAL ( action_stmt | ( END DO ( IDENT )? ) end_of_stmt )
			{
			// MFortranParser2018.g:4623:7: (lbl= label )?
			int alt399=2;
			int LA399_0 = input.LA(1);
			if ( (LA399_0==DIGIT_STR) ) {
				alt399=1;
			}
			switch (alt399) {
				case 1 :
					// MFortranParser2018.g:4623:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_do_term_action_stmt19346);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,M_LBL_DO_TERMINAL,FOLLOW_M_LBL_DO_TERMINAL_in_do_term_action_stmt19350); if (state.failed) return;
			// MFortranParser2018.g:4624:7: ( action_stmt | ( END DO ( IDENT )? ) end_of_stmt )
			int alt401=2;
			int LA401_0 = input.LA(1);
			if ( (LA401_0==ALLOCATE||LA401_0==BACKSPACE||LA401_0==CALL||LA401_0==CLOSE||LA401_0==CONTINUE||LA401_0==CYCLE||LA401_0==DEALLOCATE||LA401_0==DIGIT_STR||LA401_0==EXIT||LA401_0==FLUSH||(LA401_0 >= GO && LA401_0 <= GOTO)||LA401_0==INQUIRE||(LA401_0 >= M_ALLOCATE_STMT_1 && LA401_0 <= M_ASSIGNMENT_STMT)||(LA401_0 >= M_FORALL_STMT && LA401_0 <= M_IF_STMT)||LA401_0==M_INQUIRE_STMT_2||LA401_0==M_PTR_ASSIGNMENT_STMT||LA401_0==M_WHERE_STMT||LA401_0==NULLIFY||LA401_0==OPEN||LA401_0==PRINT||LA401_0==READ||(LA401_0 >= RETURN && LA401_0 <= REWIND)||LA401_0==STOP||LA401_0==SYNC||LA401_0==WAIT||LA401_0==WRITE) ) {
				alt401=1;
			}
			else if ( (LA401_0==END) ) {
				int LA401_2 = input.LA(2);
				if ( (LA401_2==FILE) ) {
					alt401=1;
				}
				else if ( (LA401_2==DO) ) {
					alt401=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 401, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 401, 0, input);
				throw nvae;
			}

			switch (alt401) {
				case 1 :
					// MFortranParser2018.g:4624:9: action_stmt
					{
					pushFollow(FOLLOW_action_stmt_in_do_term_action_stmt19360);
					action_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:4625:9: ( END DO ( IDENT )? ) end_of_stmt
					{
					// MFortranParser2018.g:4625:9: ( END DO ( IDENT )? )
					// MFortranParser2018.g:4625:11: END DO ( IDENT )?
					{
					END355=(Token)match(input,END,FOLLOW_END_in_do_term_action_stmt19373); if (state.failed) return;
					DO356=(Token)match(input,DO,FOLLOW_DO_in_do_term_action_stmt19375); if (state.failed) return;
					if ( state.backtracking==0 ) {endToken=END355; doToken=DO356;}
					// MFortranParser2018.g:4626:11: ( IDENT )?
					int alt400=2;
					int LA400_0 = input.LA(1);
					if ( (LA400_0==IDENT) ) {
						alt400=1;
					}
					switch (alt400) {
						case 1 :
							// MFortranParser2018.g:4626:12: IDENT
							{
							IDENT357=(Token)match(input,IDENT,FOLLOW_IDENT_in_do_term_action_stmt19391); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT357;}
							}
							break;

					}

					}

					pushFollow(FOLLOW_end_of_stmt_in_do_term_action_stmt19416);
					end_of_stmt358=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.do_term_action_stmt(lbl, id, 
			              endToken, doToken, end_of_stmt358);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "do_term_action_stmt"



	// $ANTLR start "end_do_stmt"
	// MFortranParser2018.g:4638:1: end_do_stmt : (lbl= label )? END DO ( IDENT )? end_of_stmt ;
	public final void end_do_stmt() throws RecognitionException {
		Token IDENT359=null;
		Token END360=null;
		Token DO361=null;
		Token lbl =null;
		Token end_of_stmt362 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4645:5: ( (lbl= label )? END DO ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4645:7: (lbl= label )? END DO ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4645:7: (lbl= label )?
			int alt402=2;
			int LA402_0 = input.LA(1);
			if ( (LA402_0==DIGIT_STR) ) {
				alt402=1;
			}
			switch (alt402) {
				case 1 :
					// MFortranParser2018.g:4645:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_do_stmt19464);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END360=(Token)match(input,END,FOLLOW_END_in_end_do_stmt19476); if (state.failed) return;
			DO361=(Token)match(input,DO,FOLLOW_DO_in_end_do_stmt19478); if (state.failed) return;
			// MFortranParser2018.g:4646:14: ( IDENT )?
			int alt403=2;
			int LA403_0 = input.LA(1);
			if ( (LA403_0==IDENT) ) {
				alt403=1;
			}
			switch (alt403) {
				case 1 :
					// MFortranParser2018.g:4646:16: IDENT
					{
					IDENT359=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_do_stmt19482); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT359;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_do_stmt19496);
			end_of_stmt362=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_do_stmt(lbl, id, 
			              END360, DO361, end_of_stmt362);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_do_stmt"



	// $ANTLR start "cycle_stmt"
	// MFortranParser2018.g:4656:1: cycle_stmt : (lbl= label )? CYCLE ( IDENT )? end_of_stmt ;
	public final void cycle_stmt() throws RecognitionException {
		Token IDENT363=null;
		Token CYCLE364=null;
		Token lbl =null;
		Token end_of_stmt365 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:4663:5: ( (lbl= label )? CYCLE ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4663:7: (lbl= label )? CYCLE ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4663:7: (lbl= label )?
			int alt404=2;
			int LA404_0 = input.LA(1);
			if ( (LA404_0==DIGIT_STR) ) {
				alt404=1;
			}
			switch (alt404) {
				case 1 :
					// MFortranParser2018.g:4663:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_cycle_stmt19536);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CYCLE364=(Token)match(input,CYCLE,FOLLOW_CYCLE_in_cycle_stmt19548); if (state.failed) return;
			// MFortranParser2018.g:4664:13: ( IDENT )?
			int alt405=2;
			int LA405_0 = input.LA(1);
			if ( (LA405_0==IDENT) ) {
				alt405=1;
			}
			switch (alt405) {
				case 1 :
					// MFortranParser2018.g:4664:14: IDENT
					{
					IDENT363=(Token)match(input,IDENT,FOLLOW_IDENT_in_cycle_stmt19551); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT363;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_cycle_stmt19564);
			end_of_stmt365=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.cycle_stmt(lbl, 
			              CYCLE364, id, end_of_stmt365); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "cycle_stmt"



	// $ANTLR start "if_construct"
	// MFortranParser2018.g:4673:1: if_construct : if_then_stmt block ( else_if_stmt block )* ( else_stmt block )? end_if_stmt ;
	public final void if_construct() throws RecognitionException {

		  int numB = 1;

		try {
			// MFortranParser2018.g:4680:5: ( if_then_stmt block ( else_if_stmt block )* ( else_stmt block )? end_if_stmt )
			// MFortranParser2018.g:4680:7: if_then_stmt block ( else_if_stmt block )* ( else_stmt block )? end_if_stmt
			{
			pushFollow(FOLLOW_if_then_stmt_in_if_construct19601);
			if_then_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_block_in_if_construct19603);
			block();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4681:7: ( else_if_stmt block )*
			loop406:
			while (true) {
				int alt406=2;
				switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA406_1 = input.LA(2);
					if ( (LA406_1==ELSE) ) {
						int LA406_2 = input.LA(3);
						if ( (LA406_2==IF) ) {
							alt406=1;
						}

					}
					else if ( (LA406_1==ELSEIF) ) {
						alt406=1;
					}

					}
					break;
				case ELSE:
					{
					int LA406_2 = input.LA(2);
					if ( (LA406_2==IF) ) {
						alt406=1;
					}

					}
					break;
				case ELSEIF:
					{
					alt406=1;
					}
					break;
				}
				switch (alt406) {
				case 1 :
					// MFortranParser2018.g:4681:9: else_if_stmt block
					{
					pushFollow(FOLLOW_else_if_stmt_in_if_construct19614);
					else_if_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_if_construct19616);
					block();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numB++;}
					}
					break;

				default :
					break loop406;
				}
			}

			// MFortranParser2018.g:4682:7: ( else_stmt block )?
			int alt407=2;
			int LA407_0 = input.LA(1);
			if ( (LA407_0==DIGIT_STR) ) {
				int LA407_1 = input.LA(2);
				if ( (LA407_1==ELSE) ) {
					alt407=1;
				}
			}
			else if ( (LA407_0==ELSE) ) {
				alt407=1;
			}
			switch (alt407) {
				case 1 :
					// MFortranParser2018.g:4682:9: else_stmt block
					{
					pushFollow(FOLLOW_else_stmt_in_if_construct19632);
					else_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_if_construct19634);
					block();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numB++;}
					}
					break;

			}

			pushFollow(FOLLOW_end_if_stmt_in_if_construct19647);
			end_if_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.if_construct(numB);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "if_construct"



	// $ANTLR start "if_then_stmt"
	// MFortranParser2018.g:4690:1: if_then_stmt : (lbl= label )? (id= IDENT COLON )? IF LPAREN expr RPAREN THEN end_of_stmt ;
	public final void if_then_stmt() throws RecognitionException {
		Token id=null;
		Token IF366=null;
		Token THEN367=null;
		Token lbl =null;
		Token end_of_stmt368 =null;

		try {
			// MFortranParser2018.g:4694:5: ( (lbl= label )? (id= IDENT COLON )? IF LPAREN expr RPAREN THEN end_of_stmt )
			// MFortranParser2018.g:4694:7: (lbl= label )? (id= IDENT COLON )? IF LPAREN expr RPAREN THEN end_of_stmt
			{
			// MFortranParser2018.g:4694:7: (lbl= label )?
			int alt408=2;
			int LA408_0 = input.LA(1);
			if ( (LA408_0==DIGIT_STR) ) {
				alt408=1;
			}
			switch (alt408) {
				case 1 :
					// MFortranParser2018.g:4694:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_if_then_stmt19673);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4695:7: (id= IDENT COLON )?
			int alt409=2;
			int LA409_0 = input.LA(1);
			if ( (LA409_0==IDENT) ) {
				alt409=1;
			}
			switch (alt409) {
				case 1 :
					// MFortranParser2018.g:4695:9: id= IDENT COLON
					{
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_if_then_stmt19688); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_if_then_stmt19690); if (state.failed) return;
					}
					break;

			}

			IF366=(Token)match(input,IF,FOLLOW_IF_in_if_then_stmt19701); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_if_then_stmt19703); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_if_then_stmt19705);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_if_then_stmt19707); if (state.failed) return;
			THEN367=(Token)match(input,THEN,FOLLOW_THEN_in_if_then_stmt19709); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_if_then_stmt19718);
			end_of_stmt368=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.if_then_stmt(lbl, id, 
			            IF366, THEN367, end_of_stmt368);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "if_then_stmt"



	// $ANTLR start "else_if_stmt"
	// MFortranParser2018.g:4706:1: else_if_stmt : ( (lbl= label )? ELSE IF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt | (lbl= label )? ELSEIF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt );
	public final void else_if_stmt() throws RecognitionException {
		Token id=null;
		Token ELSE369=null;
		Token IF370=null;
		Token THEN371=null;
		Token ELSEIF373=null;
		Token THEN374=null;
		Token lbl =null;
		Token end_of_stmt372 =null;
		Token end_of_stmt375 =null;

		try {
			// MFortranParser2018.g:4710:5: ( (lbl= label )? ELSE IF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt | (lbl= label )? ELSEIF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt )
			int alt414=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA414_1 = input.LA(2);
				if ( (LA414_1==ELSE) ) {
					alt414=1;
				}
				else if ( (LA414_1==ELSEIF) ) {
					alt414=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 414, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ELSE:
				{
				alt414=1;
				}
				break;
			case ELSEIF:
				{
				alt414=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 414, 0, input);
				throw nvae;
			}
			switch (alt414) {
				case 1 :
					// MFortranParser2018.g:4710:7: (lbl= label )? ELSE IF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4710:7: (lbl= label )?
					int alt410=2;
					int LA410_0 = input.LA(1);
					if ( (LA410_0==DIGIT_STR) ) {
						alt410=1;
					}
					switch (alt410) {
						case 1 :
							// MFortranParser2018.g:4710:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_else_if_stmt19754);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSE369=(Token)match(input,ELSE,FOLLOW_ELSE_in_else_if_stmt19766); if (state.failed) return;
					IF370=(Token)match(input,IF,FOLLOW_IF_in_else_if_stmt19768); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_else_if_stmt19770); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_else_if_stmt19772);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_else_if_stmt19774); if (state.failed) return;
					THEN371=(Token)match(input,THEN,FOLLOW_THEN_in_else_if_stmt19776); if (state.failed) return;
					// MFortranParser2018.g:4712:7: (id= IDENT )?
					int alt411=2;
					int LA411_0 = input.LA(1);
					if ( (LA411_0==IDENT) ) {
						alt411=1;
					}
					switch (alt411) {
						case 1 :
							// MFortranParser2018.g:4712:9: id= IDENT
							{
							id=(Token)match(input,IDENT,FOLLOW_IDENT_in_else_if_stmt19789); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_else_if_stmt19801);
					end_of_stmt372=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.else_if_stmt(lbl, id, 
					              ELSE369, IF370, THEN371, end_of_stmt372);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4716:7: (lbl= label )? ELSEIF LPAREN expr RPAREN THEN (id= IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4716:7: (lbl= label )?
					int alt412=2;
					int LA412_0 = input.LA(1);
					if ( (LA412_0==DIGIT_STR) ) {
						alt412=1;
					}
					switch (alt412) {
						case 1 :
							// MFortranParser2018.g:4716:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_else_if_stmt19822);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ELSEIF373=(Token)match(input,ELSEIF,FOLLOW_ELSEIF_in_else_if_stmt19833); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_else_if_stmt19835); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_else_if_stmt19837);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_else_if_stmt19839); if (state.failed) return;
					THEN374=(Token)match(input,THEN,FOLLOW_THEN_in_else_if_stmt19841); if (state.failed) return;
					// MFortranParser2018.g:4718:7: (id= IDENT )?
					int alt413=2;
					int LA413_0 = input.LA(1);
					if ( (LA413_0==IDENT) ) {
						alt413=1;
					}
					switch (alt413) {
						case 1 :
							// MFortranParser2018.g:4718:9: id= IDENT
							{
							id=(Token)match(input,IDENT,FOLLOW_IDENT_in_else_if_stmt19854); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_else_if_stmt19866);
					end_of_stmt375=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.else_if_stmt(lbl, id, 
					              ELSEIF373, null, THEN374, end_of_stmt375);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "else_if_stmt"



	// $ANTLR start "else_stmt"
	// MFortranParser2018.g:4727:1: else_stmt : (lbl= label )? ELSE (id= IDENT )? end_of_stmt ;
	public final void else_stmt() throws RecognitionException {
		Token id=null;
		Token ELSE376=null;
		Token lbl =null;
		Token end_of_stmt377 =null;

		try {
			// MFortranParser2018.g:4731:5: ( (lbl= label )? ELSE (id= IDENT )? end_of_stmt )
			// MFortranParser2018.g:4731:7: (lbl= label )? ELSE (id= IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4731:7: (lbl= label )?
			int alt415=2;
			int LA415_0 = input.LA(1);
			if ( (LA415_0==DIGIT_STR) ) {
				alt415=1;
			}
			switch (alt415) {
				case 1 :
					// MFortranParser2018.g:4731:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_else_stmt19902);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ELSE376=(Token)match(input,ELSE,FOLLOW_ELSE_in_else_stmt19913); if (state.failed) return;
			// MFortranParser2018.g:4732:12: (id= IDENT )?
			int alt416=2;
			int LA416_0 = input.LA(1);
			if ( (LA416_0==IDENT) ) {
				alt416=1;
			}
			switch (alt416) {
				case 1 :
					// MFortranParser2018.g:4732:14: id= IDENT
					{
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_else_stmt19919); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_else_stmt19930);
			end_of_stmt377=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.else_stmt(lbl, id, 
			              ELSE376, end_of_stmt377); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "else_stmt"



	// $ANTLR start "end_if_stmt"
	// MFortranParser2018.g:4741:1: end_if_stmt : (lbl= label )? END IF (id= IDENT )? end_of_stmt ;
	public final void end_if_stmt() throws RecognitionException {
		Token id=null;
		Token END378=null;
		Token IF379=null;
		Token lbl =null;
		Token end_of_stmt380 =null;

		try {
			// MFortranParser2018.g:4745:5: ( (lbl= label )? END IF (id= IDENT )? end_of_stmt )
			// MFortranParser2018.g:4745:7: (lbl= label )? END IF (id= IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4745:7: (lbl= label )?
			int alt417=2;
			int LA417_0 = input.LA(1);
			if ( (LA417_0==DIGIT_STR) ) {
				alt417=1;
			}
			switch (alt417) {
				case 1 :
					// MFortranParser2018.g:4745:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_if_stmt19966);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END378=(Token)match(input,END,FOLLOW_END_in_end_if_stmt19977); if (state.failed) return;
			IF379=(Token)match(input,IF,FOLLOW_IF_in_end_if_stmt19979); if (state.failed) return;
			// MFortranParser2018.g:4746:14: (id= IDENT )?
			int alt418=2;
			int LA418_0 = input.LA(1);
			if ( (LA418_0==IDENT) ) {
				alt418=1;
			}
			switch (alt418) {
				case 1 :
					// MFortranParser2018.g:4746:16: id= IDENT
					{
					id=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_if_stmt19985); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_if_stmt19997);
			end_of_stmt380=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_if_stmt(lbl, id, END378, IF379, end_of_stmt380);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_if_stmt"



	// $ANTLR start "if_stmt"
	// MFortranParser2018.g:4756:1: if_stmt : (lbl= label )? M_IF_STMT IF LPAREN expr RPAREN action_stmt ;
	public final void if_stmt() throws RecognitionException {
		Token IF381=null;
		Token lbl =null;



		try {
			// MFortranParser2018.g:4762:5: ( (lbl= label )? M_IF_STMT IF LPAREN expr RPAREN action_stmt )
			// MFortranParser2018.g:4762:7: (lbl= label )? M_IF_STMT IF LPAREN expr RPAREN action_stmt
			{
			// MFortranParser2018.g:4762:7: (lbl= label )?
			int alt419=2;
			int LA419_0 = input.LA(1);
			if ( (LA419_0==DIGIT_STR) ) {
				alt419=1;
			}
			switch (alt419) {
				case 1 :
					// MFortranParser2018.g:4762:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_if_stmt20037);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,M_IF_STMT,FOLLOW_M_IF_STMT_in_if_stmt20049); if (state.failed) return;
			IF381=(Token)match(input,IF,FOLLOW_IF_in_if_stmt20051); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_if_stmt20053); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_if_stmt20055);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_if_stmt20057); if (state.failed) return;
			pushFollow(FOLLOW_action_stmt_in_if_stmt20066);
			action_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.if_stmt(lbl, IF381); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "if_stmt"



	// $ANTLR start "case_construct"
	// MFortranParser2018.g:4771:1: case_construct : select_case_stmt ( case_stmt block )* end_select_stmt ;
	public final void case_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4775:5: ( select_case_stmt ( case_stmt block )* end_select_stmt )
			// MFortranParser2018.g:4775:7: select_case_stmt ( case_stmt block )* end_select_stmt
			{
			pushFollow(FOLLOW_select_case_stmt_in_case_construct20100);
			select_case_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4775:24: ( case_stmt block )*
			loop420:
			while (true) {
				int alt420=2;
				int LA420_0 = input.LA(1);
				if ( (LA420_0==DIGIT_STR) ) {
					int LA420_1 = input.LA(2);
					if ( (LA420_1==CASE) ) {
						alt420=1;
					}

				}
				else if ( (LA420_0==CASE) ) {
					alt420=1;
				}

				switch (alt420) {
				case 1 :
					// MFortranParser2018.g:4775:26: case_stmt block
					{
					pushFollow(FOLLOW_case_stmt_in_case_construct20104);
					case_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_case_construct20106);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop420;
				}
			}

			pushFollow(FOLLOW_end_select_stmt_in_case_construct20111);
			end_select_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.case_construct();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_construct"



	// $ANTLR start "select_case_stmt"
	// MFortranParser2018.g:4782:1: select_case_stmt : (lbl= label )? ( IDENT COLON )? ( SELECT CASE | SELECTCASE ) LPAREN expr RPAREN end_of_stmt ;
	public final void select_case_stmt() throws RecognitionException {
		Token IDENT382=null;
		Token SELECT383=null;
		Token CASE384=null;
		Token SELECTCASE385=null;
		Token lbl =null;
		Token end_of_stmt386 =null;


		  Token id = null;
		  Token t0 = null;
		  Token t1 = null;

		try {
			// MFortranParser2018.g:4791:5: ( (lbl= label )? ( IDENT COLON )? ( SELECT CASE | SELECTCASE ) LPAREN expr RPAREN end_of_stmt )
			// MFortranParser2018.g:4791:7: (lbl= label )? ( IDENT COLON )? ( SELECT CASE | SELECTCASE ) LPAREN expr RPAREN end_of_stmt
			{
			// MFortranParser2018.g:4791:7: (lbl= label )?
			int alt421=2;
			int LA421_0 = input.LA(1);
			if ( (LA421_0==DIGIT_STR) ) {
				alt421=1;
			}
			switch (alt421) {
				case 1 :
					// MFortranParser2018.g:4791:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_select_case_stmt20141);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:4792:7: ( IDENT COLON )?
			int alt422=2;
			int LA422_0 = input.LA(1);
			if ( (LA422_0==IDENT) ) {
				alt422=1;
			}
			switch (alt422) {
				case 1 :
					// MFortranParser2018.g:4792:9: IDENT COLON
					{
					IDENT382=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_case_stmt20154); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_select_case_stmt20156); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT382;}
					}
					break;

			}

			// MFortranParser2018.g:4793:7: ( SELECT CASE | SELECTCASE )
			int alt423=2;
			int LA423_0 = input.LA(1);
			if ( (LA423_0==SELECT) ) {
				alt423=1;
			}
			else if ( (LA423_0==SELECTCASE) ) {
				alt423=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 423, 0, input);
				throw nvae;
			}

			switch (alt423) {
				case 1 :
					// MFortranParser2018.g:4793:9: SELECT CASE
					{
					SELECT383=(Token)match(input,SELECT,FOLLOW_SELECT_in_select_case_stmt20170); if (state.failed) return;
					CASE384=(Token)match(input,CASE,FOLLOW_CASE_in_select_case_stmt20172); if (state.failed) return;
					if ( state.backtracking==0 ) {t0=SELECT383; t1=CASE384;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4794:9: SELECTCASE
					{
					SELECTCASE385=(Token)match(input,SELECTCASE,FOLLOW_SELECTCASE_in_select_case_stmt20184); if (state.failed) return;
					if ( state.backtracking==0 ) {t0=SELECTCASE385; t1=null;}
					}
					break;

			}

			match(input,LPAREN,FOLLOW_LPAREN_in_select_case_stmt20197); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_select_case_stmt20199);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_select_case_stmt20201); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_select_case_stmt20210);
			end_of_stmt386=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.select_case_stmt(lbl, 
			              id, t0, t1, end_of_stmt386);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_case_stmt"



	// $ANTLR start "case_stmt"
	// MFortranParser2018.g:4804:1: case_stmt : (lbl= label )? CASE case_selector ( IDENT )? end_of_stmt ;
	public final void case_stmt() throws RecognitionException {
		Token IDENT387=null;
		Token CASE388=null;
		Token lbl =null;
		Token end_of_stmt389 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4811:5: ( (lbl= label )? CASE case_selector ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4811:7: (lbl= label )? CASE case_selector ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4811:7: (lbl= label )?
			int alt424=2;
			int LA424_0 = input.LA(1);
			if ( (LA424_0==DIGIT_STR) ) {
				alt424=1;
			}
			switch (alt424) {
				case 1 :
					// MFortranParser2018.g:4811:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_case_stmt20254);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CASE388=(Token)match(input,CASE,FOLLOW_CASE_in_case_stmt20265); if (state.failed) return;
			pushFollow(FOLLOW_case_selector_in_case_stmt20267);
			case_selector();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4812:26: ( IDENT )?
			int alt425=2;
			int LA425_0 = input.LA(1);
			if ( (LA425_0==IDENT) ) {
				alt425=1;
			}
			switch (alt425) {
				case 1 :
					// MFortranParser2018.g:4812:28: IDENT
					{
					IDENT387=(Token)match(input,IDENT,FOLLOW_IDENT_in_case_stmt20271); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT387;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_case_stmt20284);
			end_of_stmt389=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.case_stmt(lbl, 
			              CASE388, id, end_of_stmt389);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_stmt"



	// $ANTLR start "end_select_stmt"
	// MFortranParser2018.g:4821:1: end_select_stmt : (lbl= label )? END SELECT ( IDENT )? end_of_stmt ;
	public final void end_select_stmt() throws RecognitionException {
		Token IDENT390=null;
		Token END391=null;
		Token SELECT392=null;
		Token lbl =null;
		Token end_of_stmt393 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4828:5: ( (lbl= label )? END SELECT ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4828:7: (lbl= label )? END SELECT ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4828:7: (lbl= label )?
			int alt426=2;
			int LA426_0 = input.LA(1);
			if ( (LA426_0==DIGIT_STR) ) {
				alt426=1;
			}
			switch (alt426) {
				case 1 :
					// MFortranParser2018.g:4828:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_select_stmt20324);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END391=(Token)match(input,END,FOLLOW_END_in_end_select_stmt20335); if (state.failed) return;
			SELECT392=(Token)match(input,SELECT,FOLLOW_SELECT_in_end_select_stmt20337); if (state.failed) return;
			// MFortranParser2018.g:4829:18: ( IDENT )?
			int alt427=2;
			int LA427_0 = input.LA(1);
			if ( (LA427_0==IDENT) ) {
				alt427=1;
			}
			switch (alt427) {
				case 1 :
					// MFortranParser2018.g:4829:19: IDENT
					{
					IDENT390=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_select_stmt20340); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT390;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_select_stmt20353);
			end_of_stmt393=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_select_stmt(lbl, 
			              END391, SELECT392, id, end_of_stmt393);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_select_stmt"



	// $ANTLR start "case_selector"
	// MFortranParser2018.g:4843:1: case_selector : ( LPAREN case_value_range_list RPAREN | DEFAULT );
	public final void case_selector() throws RecognitionException {
		Token DEFAULT394=null;

		try {
			// MFortranParser2018.g:4844:5: ( LPAREN case_value_range_list RPAREN | DEFAULT )
			int alt428=2;
			int LA428_0 = input.LA(1);
			if ( (LA428_0==LPAREN) ) {
				alt428=1;
			}
			else if ( (LA428_0==DEFAULT) ) {
				alt428=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 428, 0, input);
				throw nvae;
			}

			switch (alt428) {
				case 1 :
					// MFortranParser2018.g:4844:7: LPAREN case_value_range_list RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_case_selector20385); if (state.failed) return;
					pushFollow(FOLLOW_case_value_range_list_in_case_selector20387);
					case_value_range_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_case_selector20389); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.case_selector(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:4846:7: DEFAULT
					{
					DEFAULT394=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_case_selector20407); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.case_selector(DEFAULT394); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_selector"



	// $ANTLR start "case_value_range"
	// MFortranParser2018.g:4853:1: case_value_range : ( COLON case_value | case_value case_value_range_suffix );
	public final void case_value_range() throws RecognitionException {
		try {
			// MFortranParser2018.g:4857:5: ( COLON case_value | case_value case_value_range_suffix )
			int alt429=2;
			int LA429_0 = input.LA(1);
			if ( (LA429_0==COLON) ) {
				alt429=1;
			}
			else if ( (LA429_0==BIN_CONST||LA429_0==CHAR_CONST||(LA429_0 >= DEFINED_OP && LA429_0 <= DIGIT_STR)||LA429_0==FALSE||(LA429_0 >= HEX_CONST && LA429_0 <= IDENT)||LA429_0==LBRACKET||LA429_0==LPAREN||LA429_0==MINUS||LA429_0==M_REAL_CONST||LA429_0==NOT||LA429_0==OCT_CONST||LA429_0==PLUS||LA429_0==TRUE) ) {
				alt429=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 429, 0, input);
				throw nvae;
			}

			switch (alt429) {
				case 1 :
					// MFortranParser2018.g:4857:7: COLON case_value
					{
					match(input,COLON,FOLLOW_COLON_in_case_value_range20440); if (state.failed) return;
					pushFollow(FOLLOW_case_value_in_case_value_range20442);
					case_value();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:4858:7: case_value case_value_range_suffix
					{
					pushFollow(FOLLOW_case_value_in_case_value_range20450);
					case_value();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_case_value_range_suffix_in_case_value_range20452);
					case_value_range_suffix();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.case_value_range();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_value_range"



	// $ANTLR start "case_value_range_suffix"
	// MFortranParser2018.g:4861:1: case_value_range_suffix : ( COLON ( case_value )? |);
	public final void case_value_range_suffix() throws RecognitionException {
		try {
			// MFortranParser2018.g:4865:5: ( COLON ( case_value )? |)
			int alt431=2;
			int LA431_0 = input.LA(1);
			if ( (LA431_0==COLON) ) {
				alt431=1;
			}
			else if ( (LA431_0==COMMA||LA431_0==RPAREN) ) {
				alt431=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 431, 0, input);
				throw nvae;
			}

			switch (alt431) {
				case 1 :
					// MFortranParser2018.g:4865:7: COLON ( case_value )?
					{
					match(input,COLON,FOLLOW_COLON_in_case_value_range_suffix20473); if (state.failed) return;
					// MFortranParser2018.g:4865:13: ( case_value )?
					int alt430=2;
					int LA430_0 = input.LA(1);
					if ( (LA430_0==BIN_CONST||LA430_0==CHAR_CONST||(LA430_0 >= DEFINED_OP && LA430_0 <= DIGIT_STR)||LA430_0==FALSE||(LA430_0 >= HEX_CONST && LA430_0 <= IDENT)||LA430_0==LBRACKET||LA430_0==LPAREN||LA430_0==MINUS||LA430_0==M_REAL_CONST||LA430_0==NOT||LA430_0==OCT_CONST||LA430_0==PLUS||LA430_0==TRUE) ) {
						alt430=1;
					}
					switch (alt430) {
						case 1 :
							// MFortranParser2018.g:4865:15: case_value
							{
							pushFollow(FOLLOW_case_value_in_case_value_range_suffix20477);
							case_value();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					}
					break;
				case 2 :
					// MFortranParser2018.g:4866:7: 
					{
					if ( state.backtracking==0 ) { /* empty */ }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.case_value_range_suffix();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_value_range_suffix"



	// $ANTLR start "case_value_range_list"
	// MFortranParser2018.g:4869:1: case_value_range_list : case_value_range ( COMMA case_value_range )* ;
	public final void case_value_range_list() throws RecognitionException {

		  int numCVR = 1;

		try {
			// MFortranParser2018.g:4876:5: ( case_value_range ( COMMA case_value_range )* )
			// MFortranParser2018.g:4876:7: case_value_range ( COMMA case_value_range )*
			{
			pushFollow(FOLLOW_case_value_range_in_case_value_range_list20513);
			case_value_range();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) {numCVR++;}
			// MFortranParser2018.g:4877:7: ( COMMA case_value_range )*
			loop432:
			while (true) {
				int alt432=2;
				int LA432_0 = input.LA(1);
				if ( (LA432_0==COMMA) ) {
					alt432=1;
				}

				switch (alt432) {
				case 1 :
					// MFortranParser2018.g:4877:9: COMMA case_value_range
					{
					match(input,COMMA,FOLLOW_COMMA_in_case_value_range_list20525); if (state.failed) return;
					pushFollow(FOLLOW_case_value_range_in_case_value_range_list20527);
					case_value_range();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCVR++;}
					}
					break;

				default :
					break loop432;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.case_value_range_list(numCVR);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_value_range_list"



	// $ANTLR start "case_value"
	// MFortranParser2018.g:4884:1: case_value : expr ;
	public final void case_value() throws RecognitionException {
		try {
			// MFortranParser2018.g:4885:5: ( expr )
			// MFortranParser2018.g:4885:7: expr
			{
			pushFollow(FOLLOW_expr_in_case_value20551);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.case_value(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "case_value"



	// $ANTLR start "select_rank_construct"
	// MFortranParser2018.g:4891:1: select_rank_construct : select_rank_stmt ( select_rank_case_stmt block )* end_select_rank_stmt ;
	public final void select_rank_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4892:5: ( select_rank_stmt ( select_rank_case_stmt block )* end_select_rank_stmt )
			// MFortranParser2018.g:4892:7: select_rank_stmt ( select_rank_case_stmt block )* end_select_rank_stmt
			{
			pushFollow(FOLLOW_select_rank_stmt_in_select_rank_construct20572);
			select_rank_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4893:7: ( select_rank_case_stmt block )*
			loop433:
			while (true) {
				int alt433=2;
				int LA433_0 = input.LA(1);
				if ( (LA433_0==DIGIT_STR) ) {
					int LA433_1 = input.LA(2);
					if ( (LA433_1==RANK) ) {
						alt433=1;
					}

				}
				else if ( (LA433_0==RANK) ) {
					alt433=1;
				}

				switch (alt433) {
				case 1 :
					// MFortranParser2018.g:4893:8: select_rank_case_stmt block
					{
					pushFollow(FOLLOW_select_rank_case_stmt_in_select_rank_construct20581);
					select_rank_case_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_select_rank_construct20583);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop433;
				}
			}

			pushFollow(FOLLOW_end_select_rank_stmt_in_select_rank_construct20593);
			end_select_rank_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.select_rank_construct(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_rank_construct"



	// $ANTLR start "select_rank_stmt"
	// MFortranParser2018.g:4901:1: select_rank_stmt : ( (lbl= label )? (sname= IDENT COLON )? SELECT RANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt | (lbl= label )? (sname= IDENT COLON )? SELECTRANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt );
	public final void select_rank_stmt() throws RecognitionException {
		Token sname=null;
		Token aname=null;
		Token SELECT395=null;
		Token RANK396=null;
		Token SELECTRANK398=null;
		Token lbl =null;
		Token end_of_stmt397 =null;
		Token end_of_stmt399 =null;

		try {
			// MFortranParser2018.g:4905:5: ( (lbl= label )? (sname= IDENT COLON )? SELECT RANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt | (lbl= label )? (sname= IDENT COLON )? SELECTRANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt )
			int alt440=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case IDENT:
					{
					int LA440_2 = input.LA(3);
					if ( (LA440_2==COLON) ) {
						int LA440_5 = input.LA(4);
						if ( (LA440_5==SELECT) ) {
							alt440=1;
						}
						else if ( (LA440_5==SELECTRANK) ) {
							alt440=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 440, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 440, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case SELECT:
					{
					alt440=1;
					}
					break;
				case SELECTRANK:
					{
					alt440=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 440, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case IDENT:
				{
				int LA440_2 = input.LA(2);
				if ( (LA440_2==COLON) ) {
					int LA440_5 = input.LA(3);
					if ( (LA440_5==SELECT) ) {
						alt440=1;
					}
					else if ( (LA440_5==SELECTRANK) ) {
						alt440=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 440, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 440, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case SELECT:
				{
				alt440=1;
				}
				break;
			case SELECTRANK:
				{
				alt440=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 440, 0, input);
				throw nvae;
			}
			switch (alt440) {
				case 1 :
					// MFortranParser2018.g:4905:7: (lbl= label )? (sname= IDENT COLON )? SELECT RANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt
					{
					// MFortranParser2018.g:4905:7: (lbl= label )?
					int alt434=2;
					int LA434_0 = input.LA(1);
					if ( (LA434_0==DIGIT_STR) ) {
						alt434=1;
					}
					switch (alt434) {
						case 1 :
							// MFortranParser2018.g:4905:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_rank_stmt20629);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// MFortranParser2018.g:4906:7: (sname= IDENT COLON )?
					int alt435=2;
					int LA435_0 = input.LA(1);
					if ( (LA435_0==IDENT) ) {
						alt435=1;
					}
					switch (alt435) {
						case 1 :
							// MFortranParser2018.g:4906:8: sname= IDENT COLON
							{
							sname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_stmt20643); if (state.failed) return;
							match(input,COLON,FOLLOW_COLON_in_select_rank_stmt20645); if (state.failed) return;
							}
							break;

					}

					SELECT395=(Token)match(input,SELECT,FOLLOW_SELECT_in_select_rank_stmt20655); if (state.failed) return;
					RANK396=(Token)match(input,RANK,FOLLOW_RANK_in_select_rank_stmt20657); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_rank_stmt20659); if (state.failed) return;
					// MFortranParser2018.g:4908:7: (aname= IDENT EQ_GT )?
					int alt436=2;
					int LA436_0 = input.LA(1);
					if ( (LA436_0==IDENT) ) {
						int LA436_1 = input.LA(2);
						if ( (LA436_1==EQ_GT) ) {
							alt436=1;
						}
					}
					switch (alt436) {
						case 1 :
							// MFortranParser2018.g:4908:8: aname= IDENT EQ_GT
							{
							aname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_stmt20671); if (state.failed) return;
							match(input,EQ_GT,FOLLOW_EQ_GT_in_select_rank_stmt20673); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_selector_in_select_rank_stmt20677);
					selector();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_rank_stmt20679); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_select_rank_stmt20687);
					end_of_stmt397=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.select_rank_stmt(lbl, 
					              sname, SELECT395, RANK396, aname, end_of_stmt397); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:4912:7: (lbl= label )? (sname= IDENT COLON )? SELECTRANK LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt
					{
					// MFortranParser2018.g:4912:7: (lbl= label )?
					int alt437=2;
					int LA437_0 = input.LA(1);
					if ( (LA437_0==DIGIT_STR) ) {
						alt437=1;
					}
					switch (alt437) {
						case 1 :
							// MFortranParser2018.g:4912:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_rank_stmt20708);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// MFortranParser2018.g:4913:7: (sname= IDENT COLON )?
					int alt438=2;
					int LA438_0 = input.LA(1);
					if ( (LA438_0==IDENT) ) {
						alt438=1;
					}
					switch (alt438) {
						case 1 :
							// MFortranParser2018.g:4913:8: sname= IDENT COLON
							{
							sname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_stmt20723); if (state.failed) return;
							match(input,COLON,FOLLOW_COLON_in_select_rank_stmt20725); if (state.failed) return;
							}
							break;

					}

					SELECTRANK398=(Token)match(input,SELECTRANK,FOLLOW_SELECTRANK_in_select_rank_stmt20735); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_rank_stmt20737); if (state.failed) return;
					// MFortranParser2018.g:4915:7: (aname= IDENT EQ_GT )?
					int alt439=2;
					int LA439_0 = input.LA(1);
					if ( (LA439_0==IDENT) ) {
						int LA439_1 = input.LA(2);
						if ( (LA439_1==EQ_GT) ) {
							alt439=1;
						}
					}
					switch (alt439) {
						case 1 :
							// MFortranParser2018.g:4915:8: aname= IDENT EQ_GT
							{
							aname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_stmt20749); if (state.failed) return;
							match(input,EQ_GT,FOLLOW_EQ_GT_in_select_rank_stmt20751); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_selector_in_select_rank_stmt20755);
					selector();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_rank_stmt20757); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_select_rank_stmt20765);
					end_of_stmt399=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.select_rank_stmt(lbl, 
					              sname, SELECTRANK398, null, aname, end_of_stmt399); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_rank_stmt"



	// $ANTLR start "select_rank_case_stmt"
	// MFortranParser2018.g:4924:1: select_rank_case_stmt : ( (lbl= label )? RANK LPAREN expr RPAREN ( IDENT )? | (lbl= label )? RANK LPAREN ASTERISK RPAREN ( IDENT )? | (lbl= label )? RANK DEFAULT ( IDENT )? );
	public final void select_rank_case_stmt() throws RecognitionException {
		Token IDENT400=null;
		Token RANK401=null;
		Token IDENT402=null;
		Token RANK403=null;
		Token ASTERISK404=null;
		Token IDENT405=null;
		Token RANK406=null;
		Token DEFAULT407=null;
		Token lbl =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:4928:5: ( (lbl= label )? RANK LPAREN expr RPAREN ( IDENT )? | (lbl= label )? RANK LPAREN ASTERISK RPAREN ( IDENT )? | (lbl= label )? RANK DEFAULT ( IDENT )? )
			int alt447=3;
			int LA447_0 = input.LA(1);
			if ( (LA447_0==DIGIT_STR) ) {
				int LA447_1 = input.LA(2);
				if ( (LA447_1==RANK) ) {
					int LA447_2 = input.LA(3);
					if ( (LA447_2==LPAREN) ) {
						int LA447_3 = input.LA(4);
						if ( (LA447_3==ASTERISK) ) {
							alt447=2;
						}
						else if ( (LA447_3==BIN_CONST||LA447_3==CHAR_CONST||(LA447_3 >= DEFINED_OP && LA447_3 <= DIGIT_STR)||LA447_3==FALSE||(LA447_3 >= HEX_CONST && LA447_3 <= IDENT)||LA447_3==LBRACKET||LA447_3==LPAREN||LA447_3==MINUS||LA447_3==M_REAL_CONST||LA447_3==NOT||LA447_3==OCT_CONST||LA447_3==PLUS||LA447_3==TRUE) ) {
							alt447=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 447, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA447_2==DEFAULT) ) {
						alt447=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 447, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 447, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA447_0==RANK) ) {
				int LA447_2 = input.LA(2);
				if ( (LA447_2==LPAREN) ) {
					int LA447_3 = input.LA(3);
					if ( (LA447_3==ASTERISK) ) {
						alt447=2;
					}
					else if ( (LA447_3==BIN_CONST||LA447_3==CHAR_CONST||(LA447_3 >= DEFINED_OP && LA447_3 <= DIGIT_STR)||LA447_3==FALSE||(LA447_3 >= HEX_CONST && LA447_3 <= IDENT)||LA447_3==LBRACKET||LA447_3==LPAREN||LA447_3==MINUS||LA447_3==M_REAL_CONST||LA447_3==NOT||LA447_3==OCT_CONST||LA447_3==PLUS||LA447_3==TRUE) ) {
						alt447=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 447, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA447_2==DEFAULT) ) {
					alt447=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 447, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 447, 0, input);
				throw nvae;
			}

			switch (alt447) {
				case 1 :
					// MFortranParser2018.g:4928:7: (lbl= label )? RANK LPAREN expr RPAREN ( IDENT )?
					{
					// MFortranParser2018.g:4928:7: (lbl= label )?
					int alt441=2;
					int LA441_0 = input.LA(1);
					if ( (LA441_0==DIGIT_STR) ) {
						alt441=1;
					}
					switch (alt441) {
						case 1 :
							// MFortranParser2018.g:4928:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_rank_case_stmt20801);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					RANK401=(Token)match(input,RANK,FOLLOW_RANK_in_select_rank_case_stmt20813); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_rank_case_stmt20815); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_select_rank_case_stmt20817);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_rank_case_stmt20819); if (state.failed) return;
					// MFortranParser2018.g:4929:31: ( IDENT )?
					int alt442=2;
					int LA442_0 = input.LA(1);
					if ( (LA442_0==IDENT) ) {
						int LA442_1 = input.LA(2);
						if ( (LA442_1==ALLOCATE||LA442_1==ASSOCIATE||LA442_1==BACKSPACE||LA442_1==BLOCK||LA442_1==CALL||LA442_1==CLOSE||LA442_1==CONTINUE||(LA442_1 >= CRITICAL && LA442_1 <= DEALLOCATE)||LA442_1==DIGIT_STR||LA442_1==DO||(LA442_1 >= END && LA442_1 <= ENTRY)||LA442_1==EXIT||LA442_1==FLUSH||LA442_1==FORMAT||(LA442_1 >= GO && LA442_1 <= GOTO)||(LA442_1 >= IDENT && LA442_1 <= IF)||LA442_1==INQUIRE||(LA442_1 >= M_ALLOCATE_STMT_1 && LA442_1 <= M_ASSIGNMENT_STMT)||(LA442_1 >= M_FORALL_CONSTRUCT_STMT && LA442_1 <= M_IF_STMT)||LA442_1==M_INQUIRE_STMT_2||LA442_1==M_PTR_ASSIGNMENT_STMT||(LA442_1 >= M_WHERE_CONSTRUCT_STMT && LA442_1 <= M_WHERE_STMT)||LA442_1==NULLIFY||LA442_1==OPEN||LA442_1==PRAGMA||LA442_1==PRINT||LA442_1==RANK||LA442_1==READ||(LA442_1 >= RETURN && LA442_1 <= REWIND)||(LA442_1 >= SELECT && LA442_1 <= SELECTTYPE)||LA442_1==STOP||LA442_1==SYNC||LA442_1==WAIT||LA442_1==WRITE) ) {
							alt442=1;
						}
					}
					switch (alt442) {
						case 1 :
							// MFortranParser2018.g:4929:33: IDENT
							{
							IDENT400=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_case_stmt20823); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT400;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.select_rank_case_stmt(lbl, RANK401, null, id); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:4931:7: (lbl= label )? RANK LPAREN ASTERISK RPAREN ( IDENT )?
					{
					// MFortranParser2018.g:4931:7: (lbl= label )?
					int alt443=2;
					int LA443_0 = input.LA(1);
					if ( (LA443_0==DIGIT_STR) ) {
						alt443=1;
					}
					switch (alt443) {
						case 1 :
							// MFortranParser2018.g:4931:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_rank_case_stmt20849);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					RANK403=(Token)match(input,RANK,FOLLOW_RANK_in_select_rank_case_stmt20860); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_rank_case_stmt20862); if (state.failed) return;
					ASTERISK404=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_select_rank_case_stmt20864); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_rank_case_stmt20866); if (state.failed) return;
					// MFortranParser2018.g:4932:35: ( IDENT )?
					int alt444=2;
					int LA444_0 = input.LA(1);
					if ( (LA444_0==IDENT) ) {
						int LA444_1 = input.LA(2);
						if ( (LA444_1==ALLOCATE||LA444_1==ASSOCIATE||LA444_1==BACKSPACE||LA444_1==BLOCK||LA444_1==CALL||LA444_1==CLOSE||LA444_1==CONTINUE||(LA444_1 >= CRITICAL && LA444_1 <= DEALLOCATE)||LA444_1==DIGIT_STR||LA444_1==DO||(LA444_1 >= END && LA444_1 <= ENTRY)||LA444_1==EXIT||LA444_1==FLUSH||LA444_1==FORMAT||(LA444_1 >= GO && LA444_1 <= GOTO)||(LA444_1 >= IDENT && LA444_1 <= IF)||LA444_1==INQUIRE||(LA444_1 >= M_ALLOCATE_STMT_1 && LA444_1 <= M_ASSIGNMENT_STMT)||(LA444_1 >= M_FORALL_CONSTRUCT_STMT && LA444_1 <= M_IF_STMT)||LA444_1==M_INQUIRE_STMT_2||LA444_1==M_PTR_ASSIGNMENT_STMT||(LA444_1 >= M_WHERE_CONSTRUCT_STMT && LA444_1 <= M_WHERE_STMT)||LA444_1==NULLIFY||LA444_1==OPEN||LA444_1==PRAGMA||LA444_1==PRINT||LA444_1==RANK||LA444_1==READ||(LA444_1 >= RETURN && LA444_1 <= REWIND)||(LA444_1 >= SELECT && LA444_1 <= SELECTTYPE)||LA444_1==STOP||LA444_1==SYNC||LA444_1==WAIT||LA444_1==WRITE) ) {
							alt444=1;
						}
					}
					switch (alt444) {
						case 1 :
							// MFortranParser2018.g:4932:37: IDENT
							{
							IDENT402=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_case_stmt20870); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT402;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.select_rank_case_stmt(lbl, RANK403, ASTERISK404, id); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:4934:7: (lbl= label )? RANK DEFAULT ( IDENT )?
					{
					// MFortranParser2018.g:4934:7: (lbl= label )?
					int alt445=2;
					int LA445_0 = input.LA(1);
					if ( (LA445_0==DIGIT_STR) ) {
						alt445=1;
					}
					switch (alt445) {
						case 1 :
							// MFortranParser2018.g:4934:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_rank_case_stmt20895);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					RANK406=(Token)match(input,RANK,FOLLOW_RANK_in_select_rank_case_stmt20906); if (state.failed) return;
					DEFAULT407=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_select_rank_case_stmt20908); if (state.failed) return;
					// MFortranParser2018.g:4935:20: ( IDENT )?
					int alt446=2;
					int LA446_0 = input.LA(1);
					if ( (LA446_0==IDENT) ) {
						int LA446_1 = input.LA(2);
						if ( (LA446_1==ALLOCATE||LA446_1==ASSOCIATE||LA446_1==BACKSPACE||LA446_1==BLOCK||LA446_1==CALL||LA446_1==CLOSE||LA446_1==CONTINUE||(LA446_1 >= CRITICAL && LA446_1 <= DEALLOCATE)||LA446_1==DIGIT_STR||LA446_1==DO||(LA446_1 >= END && LA446_1 <= ENTRY)||LA446_1==EXIT||LA446_1==FLUSH||LA446_1==FORMAT||(LA446_1 >= GO && LA446_1 <= GOTO)||(LA446_1 >= IDENT && LA446_1 <= IF)||LA446_1==INQUIRE||(LA446_1 >= M_ALLOCATE_STMT_1 && LA446_1 <= M_ASSIGNMENT_STMT)||(LA446_1 >= M_FORALL_CONSTRUCT_STMT && LA446_1 <= M_IF_STMT)||LA446_1==M_INQUIRE_STMT_2||LA446_1==M_PTR_ASSIGNMENT_STMT||(LA446_1 >= M_WHERE_CONSTRUCT_STMT && LA446_1 <= M_WHERE_STMT)||LA446_1==NULLIFY||LA446_1==OPEN||LA446_1==PRAGMA||LA446_1==PRINT||LA446_1==RANK||LA446_1==READ||(LA446_1 >= RETURN && LA446_1 <= REWIND)||(LA446_1 >= SELECT && LA446_1 <= SELECTTYPE)||LA446_1==STOP||LA446_1==SYNC||LA446_1==WAIT||LA446_1==WRITE) ) {
							alt446=1;
						}
					}
					switch (alt446) {
						case 1 :
							// MFortranParser2018.g:4935:22: IDENT
							{
							IDENT405=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_rank_case_stmt20912); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT405;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.select_rank_case_stmt(lbl, RANK406, DEFAULT407, id); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_rank_case_stmt"



	// $ANTLR start "end_select_rank_stmt"
	// MFortranParser2018.g:4942:1: end_select_rank_stmt : (lbl= label )? END SELECT ( IDENT )? end_of_stmt ;
	public final void end_select_rank_stmt() throws RecognitionException {
		Token IDENT408=null;
		Token END409=null;
		Token SELECT410=null;
		Token lbl =null;
		Token end_of_stmt411 =null;


		  Token id=null;

		try {
			// MFortranParser2018.g:4949:5: ( (lbl= label )? END SELECT ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:4949:7: (lbl= label )? END SELECT ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:4949:7: (lbl= label )?
			int alt448=2;
			int LA448_0 = input.LA(1);
			if ( (LA448_0==DIGIT_STR) ) {
				alt448=1;
			}
			switch (alt448) {
				case 1 :
					// MFortranParser2018.g:4949:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_select_rank_stmt20956);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END409=(Token)match(input,END,FOLLOW_END_in_end_select_rank_stmt20968); if (state.failed) return;
			SELECT410=(Token)match(input,SELECT,FOLLOW_SELECT_in_end_select_rank_stmt20970); if (state.failed) return;
			// MFortranParser2018.g:4950:18: ( IDENT )?
			int alt449=2;
			int LA449_0 = input.LA(1);
			if ( (LA449_0==IDENT) ) {
				alt449=1;
			}
			switch (alt449) {
				case 1 :
					// MFortranParser2018.g:4950:20: IDENT
					{
					IDENT408=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_select_rank_stmt20974); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT408;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_select_rank_stmt20988);
			end_of_stmt411=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_select_rank_stmt(lbl, 
			              END409, SELECT410, id, end_of_stmt411);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_select_rank_stmt"



	// $ANTLR start "select_type_construct"
	// MFortranParser2018.g:4959:1: select_type_construct : select_type_stmt ( type_guard_stmt block )* end_select_type_stmt ;
	public final void select_type_construct() throws RecognitionException {
		try {
			// MFortranParser2018.g:4960:5: ( select_type_stmt ( type_guard_stmt block )* end_select_type_stmt )
			// MFortranParser2018.g:4960:7: select_type_stmt ( type_guard_stmt block )* end_select_type_stmt
			{
			pushFollow(FOLLOW_select_type_stmt_in_select_type_construct21017);
			select_type_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:4960:24: ( type_guard_stmt block )*
			loop450:
			while (true) {
				int alt450=2;
				int LA450_0 = input.LA(1);
				if ( (LA450_0==DIGIT_STR) ) {
					int LA450_1 = input.LA(2);
					if ( (LA450_1==CLASS||LA450_1==TYPE) ) {
						alt450=1;
					}

				}
				else if ( (LA450_0==CLASS||LA450_0==TYPE) ) {
					alt450=1;
				}

				switch (alt450) {
				case 1 :
					// MFortranParser2018.g:4960:26: type_guard_stmt block
					{
					pushFollow(FOLLOW_type_guard_stmt_in_select_type_construct21021);
					type_guard_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_block_in_select_type_construct21023);
					block();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop450;
				}
			}

			pushFollow(FOLLOW_end_select_type_stmt_in_select_type_construct21035);
			end_select_type_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.select_type_construct(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_type_construct"



	// $ANTLR start "select_type_stmt"
	// MFortranParser2018.g:4969:1: select_type_stmt : ( (lbl= label )? (sname= IDENT COLON )? SELECT TYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt | (lbl= label )? (sname= IDENT COLON )? SELECTTYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt );
	public final void select_type_stmt() throws RecognitionException {
		Token sname=null;
		Token aname=null;
		Token SELECT412=null;
		Token TYPE413=null;
		Token SELECTTYPE415=null;
		Token lbl =null;
		Token end_of_stmt414 =null;
		Token end_of_stmt416 =null;

		try {
			// MFortranParser2018.g:4971:5: ( (lbl= label )? (sname= IDENT COLON )? SELECT TYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt | (lbl= label )? (sname= IDENT COLON )? SELECTTYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt )
			int alt457=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case IDENT:
					{
					int LA457_2 = input.LA(3);
					if ( (LA457_2==COLON) ) {
						int LA457_5 = input.LA(4);
						if ( (LA457_5==SELECT) ) {
							alt457=1;
						}
						else if ( (LA457_5==SELECTTYPE) ) {
							alt457=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 457, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 457, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case SELECT:
					{
					alt457=1;
					}
					break;
				case SELECTTYPE:
					{
					alt457=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 457, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case IDENT:
				{
				int LA457_2 = input.LA(2);
				if ( (LA457_2==COLON) ) {
					int LA457_5 = input.LA(3);
					if ( (LA457_5==SELECT) ) {
						alt457=1;
					}
					else if ( (LA457_5==SELECTTYPE) ) {
						alt457=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 457, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 457, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case SELECT:
				{
				alt457=1;
				}
				break;
			case SELECTTYPE:
				{
				alt457=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 457, 0, input);
				throw nvae;
			}
			switch (alt457) {
				case 1 :
					// MFortranParser2018.g:4971:7: (lbl= label )? (sname= IDENT COLON )? SELECT TYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt
					{
					// MFortranParser2018.g:4971:7: (lbl= label )?
					int alt451=2;
					int LA451_0 = input.LA(1);
					if ( (LA451_0==DIGIT_STR) ) {
						alt451=1;
					}
					switch (alt451) {
						case 1 :
							// MFortranParser2018.g:4971:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_type_stmt21072);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// MFortranParser2018.g:4972:7: (sname= IDENT COLON )?
					int alt452=2;
					int LA452_0 = input.LA(1);
					if ( (LA452_0==IDENT) ) {
						alt452=1;
					}
					switch (alt452) {
						case 1 :
							// MFortranParser2018.g:4972:8: sname= IDENT COLON
							{
							sname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_type_stmt21085); if (state.failed) return;
							match(input,COLON,FOLLOW_COLON_in_select_type_stmt21087); if (state.failed) return;
							}
							break;

					}

					SELECT412=(Token)match(input,SELECT,FOLLOW_SELECT_in_select_type_stmt21098); if (state.failed) return;
					TYPE413=(Token)match(input,TYPE,FOLLOW_TYPE_in_select_type_stmt21100); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_type_stmt21102); if (state.failed) return;
					// MFortranParser2018.g:4974:7: (aname= IDENT EQ_GT )?
					int alt453=2;
					int LA453_0 = input.LA(1);
					if ( (LA453_0==IDENT) ) {
						int LA453_1 = input.LA(2);
						if ( (LA453_1==EQ_GT) ) {
							alt453=1;
						}
					}
					switch (alt453) {
						case 1 :
							// MFortranParser2018.g:4974:8: aname= IDENT EQ_GT
							{
							aname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_type_stmt21114); if (state.failed) return;
							match(input,EQ_GT,FOLLOW_EQ_GT_in_select_type_stmt21116); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_selector_in_select_type_stmt21120);
					selector();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_type_stmt21122); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_select_type_stmt21131);
					end_of_stmt414=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.select_type_stmt(lbl, 
					              sname, SELECT412, TYPE413, aname, end_of_stmt414);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:4978:7: (lbl= label )? (sname= IDENT COLON )? SELECTTYPE LPAREN (aname= IDENT EQ_GT )? selector RPAREN end_of_stmt
					{
					// MFortranParser2018.g:4978:7: (lbl= label )?
					int alt454=2;
					int LA454_0 = input.LA(1);
					if ( (LA454_0==DIGIT_STR) ) {
						alt454=1;
					}
					switch (alt454) {
						case 1 :
							// MFortranParser2018.g:4978:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_select_type_stmt21152);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					// MFortranParser2018.g:4979:7: (sname= IDENT COLON )?
					int alt455=2;
					int LA455_0 = input.LA(1);
					if ( (LA455_0==IDENT) ) {
						alt455=1;
					}
					switch (alt455) {
						case 1 :
							// MFortranParser2018.g:4979:8: sname= IDENT COLON
							{
							sname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_type_stmt21166); if (state.failed) return;
							match(input,COLON,FOLLOW_COLON_in_select_type_stmt21168); if (state.failed) return;
							}
							break;

					}

					SELECTTYPE415=(Token)match(input,SELECTTYPE,FOLLOW_SELECTTYPE_in_select_type_stmt21179); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_select_type_stmt21181); if (state.failed) return;
					// MFortranParser2018.g:4981:7: (aname= IDENT EQ_GT )?
					int alt456=2;
					int LA456_0 = input.LA(1);
					if ( (LA456_0==IDENT) ) {
						int LA456_1 = input.LA(2);
						if ( (LA456_1==EQ_GT) ) {
							alt456=1;
						}
					}
					switch (alt456) {
						case 1 :
							// MFortranParser2018.g:4981:8: aname= IDENT EQ_GT
							{
							aname=(Token)match(input,IDENT,FOLLOW_IDENT_in_select_type_stmt21193); if (state.failed) return;
							match(input,EQ_GT,FOLLOW_EQ_GT_in_select_type_stmt21195); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_selector_in_select_type_stmt21199);
					selector();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_select_type_stmt21201); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_select_type_stmt21210);
					end_of_stmt416=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.select_type_stmt(lbl, 
					              sname, SELECTTYPE415, null, aname, end_of_stmt416);}
					}
					break;

			}
			if ( state.backtracking==0 ) {checkForInclude();}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "select_type_stmt"



	// $ANTLR start "type_guard_stmt"
	// MFortranParser2018.g:4992:1: type_guard_stmt : ( (lbl= label )? TYPE IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt | (lbl= label )? CLASS IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt | (lbl= label )? CLASS DEFAULT ( IDENT )? end_of_stmt );
	public final void type_guard_stmt() throws RecognitionException {
		Token IDENT417=null;
		Token TYPE418=null;
		Token IS419=null;
		Token IDENT421=null;
		Token CLASS422=null;
		Token IS423=null;
		Token IDENT425=null;
		Token CLASS426=null;
		Token DEFAULT427=null;
		Token lbl =null;
		Token end_of_stmt420 =null;
		Token end_of_stmt424 =null;
		Token end_of_stmt428 =null;


		  Token sname = null;

		try {
			// MFortranParser2018.g:4999:5: ( (lbl= label )? TYPE IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt | (lbl= label )? CLASS IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt | (lbl= label )? CLASS DEFAULT ( IDENT )? end_of_stmt )
			int alt464=3;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA464_1 = input.LA(2);
				if ( (LA464_1==TYPE) ) {
					alt464=1;
				}
				else if ( (LA464_1==CLASS) ) {
					int LA464_3 = input.LA(3);
					if ( (LA464_3==IS) ) {
						alt464=2;
					}
					else if ( (LA464_3==DEFAULT) ) {
						alt464=3;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 464, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 464, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case TYPE:
				{
				alt464=1;
				}
				break;
			case CLASS:
				{
				int LA464_3 = input.LA(2);
				if ( (LA464_3==IS) ) {
					alt464=2;
				}
				else if ( (LA464_3==DEFAULT) ) {
					alt464=3;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 464, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 464, 0, input);
				throw nvae;
			}
			switch (alt464) {
				case 1 :
					// MFortranParser2018.g:4999:7: (lbl= label )? TYPE IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:4999:7: (lbl= label )?
					int alt458=2;
					int LA458_0 = input.LA(1);
					if ( (LA458_0==DIGIT_STR) ) {
						alt458=1;
					}
					switch (alt458) {
						case 1 :
							// MFortranParser2018.g:4999:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_guard_stmt21250);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					TYPE418=(Token)match(input,TYPE,FOLLOW_TYPE_in_type_guard_stmt21262); if (state.failed) return;
					IS419=(Token)match(input,IS,FOLLOW_IS_in_type_guard_stmt21264); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_type_guard_stmt21266); if (state.failed) return;
					pushFollow(FOLLOW_type_spec_in_type_guard_stmt21268);
					type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_type_guard_stmt21270); if (state.failed) return;
					// MFortranParser2018.g:5001:7: ( IDENT )?
					int alt459=2;
					int LA459_0 = input.LA(1);
					if ( (LA459_0==IDENT) ) {
						alt459=1;
					}
					switch (alt459) {
						case 1 :
							// MFortranParser2018.g:5001:9: IDENT
							{
							IDENT417=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_guard_stmt21280); if (state.failed) return;
							if ( state.backtracking==0 ) {sname=IDENT417;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_type_guard_stmt21294);
					end_of_stmt420=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_guard_stmt(lbl, 
					              TYPE418, IS419, sname, end_of_stmt420);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:5005:7: (lbl= label )? CLASS IS LPAREN type_spec RPAREN ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:5005:7: (lbl= label )?
					int alt460=2;
					int LA460_0 = input.LA(1);
					if ( (LA460_0==DIGIT_STR) ) {
						alt460=1;
					}
					switch (alt460) {
						case 1 :
							// MFortranParser2018.g:5005:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_guard_stmt21315);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					CLASS422=(Token)match(input,CLASS,FOLLOW_CLASS_in_type_guard_stmt21326); if (state.failed) return;
					IS423=(Token)match(input,IS,FOLLOW_IS_in_type_guard_stmt21328); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_type_guard_stmt21330); if (state.failed) return;
					pushFollow(FOLLOW_type_spec_in_type_guard_stmt21332);
					type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_type_guard_stmt21334); if (state.failed) return;
					// MFortranParser2018.g:5007:7: ( IDENT )?
					int alt461=2;
					int LA461_0 = input.LA(1);
					if ( (LA461_0==IDENT) ) {
						alt461=1;
					}
					switch (alt461) {
						case 1 :
							// MFortranParser2018.g:5007:9: IDENT
							{
							IDENT421=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_guard_stmt21344); if (state.failed) return;
							if ( state.backtracking==0 ) {sname=IDENT421;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_type_guard_stmt21358);
					end_of_stmt424=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_guard_stmt(lbl, 
					              CLASS422, IS423, sname, end_of_stmt424);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:5011:7: (lbl= label )? CLASS DEFAULT ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:5011:7: (lbl= label )?
					int alt462=2;
					int LA462_0 = input.LA(1);
					if ( (LA462_0==DIGIT_STR) ) {
						alt462=1;
					}
					switch (alt462) {
						case 1 :
							// MFortranParser2018.g:5011:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_type_guard_stmt21379);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					CLASS426=(Token)match(input,CLASS,FOLLOW_CLASS_in_type_guard_stmt21391); if (state.failed) return;
					DEFAULT427=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_type_guard_stmt21393); if (state.failed) return;
					// MFortranParser2018.g:5013:7: ( IDENT )?
					int alt463=2;
					int LA463_0 = input.LA(1);
					if ( (LA463_0==IDENT) ) {
						alt463=1;
					}
					switch (alt463) {
						case 1 :
							// MFortranParser2018.g:5013:9: IDENT
							{
							IDENT425=(Token)match(input,IDENT,FOLLOW_IDENT_in_type_guard_stmt21404); if (state.failed) return;
							if ( state.backtracking==0 ) {sname=IDENT425;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_type_guard_stmt21417);
					end_of_stmt428=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.type_guard_stmt(lbl, 
					              CLASS426, DEFAULT427, sname, end_of_stmt428);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "type_guard_stmt"



	// $ANTLR start "end_select_type_stmt"
	// MFortranParser2018.g:5023:1: end_select_type_stmt : (lbl= label )? END SELECT ( IDENT )? end_of_stmt ;
	public final void end_select_type_stmt() throws RecognitionException {
		Token IDENT429=null;
		Token END430=null;
		Token SELECT431=null;
		Token lbl =null;
		Token end_of_stmt432 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:5030:5: ( (lbl= label )? END SELECT ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:5030:7: (lbl= label )? END SELECT ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:5030:7: (lbl= label )?
			int alt465=2;
			int LA465_0 = input.LA(1);
			if ( (LA465_0==DIGIT_STR) ) {
				alt465=1;
			}
			switch (alt465) {
				case 1 :
					// MFortranParser2018.g:5030:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_select_type_stmt21457);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END430=(Token)match(input,END,FOLLOW_END_in_end_select_type_stmt21468); if (state.failed) return;
			SELECT431=(Token)match(input,SELECT,FOLLOW_SELECT_in_end_select_type_stmt21470); if (state.failed) return;
			// MFortranParser2018.g:5031:18: ( IDENT )?
			int alt466=2;
			int LA466_0 = input.LA(1);
			if ( (LA466_0==IDENT) ) {
				alt466=1;
			}
			switch (alt466) {
				case 1 :
					// MFortranParser2018.g:5031:20: IDENT
					{
					IDENT429=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_select_type_stmt21474); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT429;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_select_type_stmt21487);
			end_of_stmt432=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_select_type_stmt(lbl, 
			              END430, SELECT431, id, end_of_stmt432);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_select_type_stmt"



	// $ANTLR start "exit_stmt"
	// MFortranParser2018.g:5041:1: exit_stmt : (lbl= label )? EXIT ( IDENT )? end_of_stmt ;
	public final void exit_stmt() throws RecognitionException {
		Token IDENT433=null;
		Token EXIT434=null;
		Token lbl =null;
		Token end_of_stmt435 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:5048:5: ( (lbl= label )? EXIT ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:5048:7: (lbl= label )? EXIT ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:5048:7: (lbl= label )?
			int alt467=2;
			int LA467_0 = input.LA(1);
			if ( (LA467_0==DIGIT_STR) ) {
				alt467=1;
			}
			switch (alt467) {
				case 1 :
					// MFortranParser2018.g:5048:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_exit_stmt21527);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			EXIT434=(Token)match(input,EXIT,FOLLOW_EXIT_in_exit_stmt21539); if (state.failed) return;
			// MFortranParser2018.g:5049:12: ( IDENT )?
			int alt468=2;
			int LA468_0 = input.LA(1);
			if ( (LA468_0==IDENT) ) {
				alt468=1;
			}
			switch (alt468) {
				case 1 :
					// MFortranParser2018.g:5049:13: IDENT
					{
					IDENT433=(Token)match(input,IDENT,FOLLOW_IDENT_in_exit_stmt21542); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT433;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_exit_stmt21555);
			end_of_stmt435=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.exit_stmt(lbl, 
			              EXIT434, id, end_of_stmt435); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "exit_stmt"



	// $ANTLR start "goto_stmt"
	// MFortranParser2018.g:5058:1: goto_stmt : ( (lbl= label )? GO TO DIGIT_STR end_of_stmt | (lbl= label )? GOTO DIGIT_STR end_of_stmt );
	public final void goto_stmt() throws RecognitionException {
		Token GO436=null;
		Token TO437=null;
		Token DIGIT_STR438=null;
		Token GOTO440=null;
		Token DIGIT_STR441=null;
		Token lbl =null;
		Token end_of_stmt439 =null;
		Token end_of_stmt442 =null;


		  Token toLbl=null;

		try {
			// MFortranParser2018.g:5065:5: ( (lbl= label )? GO TO DIGIT_STR end_of_stmt | (lbl= label )? GOTO DIGIT_STR end_of_stmt )
			int alt471=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA471_1 = input.LA(2);
				if ( (LA471_1==GO) ) {
					alt471=1;
				}
				else if ( (LA471_1==GOTO) ) {
					alt471=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 471, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GO:
				{
				alt471=1;
				}
				break;
			case GOTO:
				{
				alt471=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 471, 0, input);
				throw nvae;
			}
			switch (alt471) {
				case 1 :
					// MFortranParser2018.g:5065:7: (lbl= label )? GO TO DIGIT_STR end_of_stmt
					{
					// MFortranParser2018.g:5065:7: (lbl= label )?
					int alt469=2;
					int LA469_0 = input.LA(1);
					if ( (LA469_0==DIGIT_STR) ) {
						alt469=1;
					}
					switch (alt469) {
						case 1 :
							// MFortranParser2018.g:5065:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_goto_stmt21595);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					GO436=(Token)match(input,GO,FOLLOW_GO_in_goto_stmt21606); if (state.failed) return;
					TO437=(Token)match(input,TO,FOLLOW_TO_in_goto_stmt21608); if (state.failed) return;
					DIGIT_STR438=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_goto_stmt21610); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_goto_stmt21619);
					end_of_stmt439=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.goto_stmt(lbl, 
					              GO436, TO437, DIGIT_STR438, end_of_stmt439); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5070:7: (lbl= label )? GOTO DIGIT_STR end_of_stmt
					{
					// MFortranParser2018.g:5070:7: (lbl= label )?
					int alt470=2;
					int LA470_0 = input.LA(1);
					if ( (LA470_0==DIGIT_STR) ) {
						alt470=1;
					}
					switch (alt470) {
						case 1 :
							// MFortranParser2018.g:5070:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_goto_stmt21640);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					GOTO440=(Token)match(input,GOTO,FOLLOW_GOTO_in_goto_stmt21651); if (state.failed) return;
					DIGIT_STR441=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_goto_stmt21653); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_goto_stmt21662);
					end_of_stmt442=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.goto_stmt(lbl, 
					              GOTO440, null, DIGIT_STR441, end_of_stmt442); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "goto_stmt"



	// $ANTLR start "computed_goto_stmt"
	// MFortranParser2018.g:5080:1: computed_goto_stmt : ( (lbl= label )? GO TO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt | (lbl= label )? GOTO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt );
	public final void computed_goto_stmt() throws RecognitionException {
		Token GO443=null;
		Token TO444=null;
		Token GOTO446=null;
		Token lbl =null;
		Token end_of_stmt445 =null;
		Token end_of_stmt447 =null;

		try {
			// MFortranParser2018.g:5084:5: ( (lbl= label )? GO TO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt | (lbl= label )? GOTO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt )
			int alt476=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA476_1 = input.LA(2);
				if ( (LA476_1==GO) ) {
					alt476=1;
				}
				else if ( (LA476_1==GOTO) ) {
					alt476=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 476, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GO:
				{
				alt476=1;
				}
				break;
			case GOTO:
				{
				alt476=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 476, 0, input);
				throw nvae;
			}
			switch (alt476) {
				case 1 :
					// MFortranParser2018.g:5084:7: (lbl= label )? GO TO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt
					{
					// MFortranParser2018.g:5084:7: (lbl= label )?
					int alt472=2;
					int LA472_0 = input.LA(1);
					if ( (LA472_0==DIGIT_STR) ) {
						alt472=1;
					}
					switch (alt472) {
						case 1 :
							// MFortranParser2018.g:5084:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_computed_goto_stmt21698);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					GO443=(Token)match(input,GO,FOLLOW_GO_in_computed_goto_stmt21709); if (state.failed) return;
					TO444=(Token)match(input,TO,FOLLOW_TO_in_computed_goto_stmt21711); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_computed_goto_stmt21713); if (state.failed) return;
					pushFollow(FOLLOW_label_list_in_computed_goto_stmt21715);
					label_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_computed_goto_stmt21717); if (state.failed) return;
					// MFortranParser2018.g:5085:38: ( COMMA )?
					int alt473=2;
					int LA473_0 = input.LA(1);
					if ( (LA473_0==COMMA) ) {
						alt473=1;
					}
					switch (alt473) {
						case 1 :
							// MFortranParser2018.g:5085:40: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_computed_goto_stmt21721); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_expr_in_computed_goto_stmt21726);
					expr();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_computed_goto_stmt21735);
					end_of_stmt445=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.computed_goto_stmt(lbl, 
					              GO443, TO444, end_of_stmt445); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5089:7: (lbl= label )? GOTO LPAREN label_list RPAREN ( COMMA )? expr end_of_stmt
					{
					// MFortranParser2018.g:5089:7: (lbl= label )?
					int alt474=2;
					int LA474_0 = input.LA(1);
					if ( (LA474_0==DIGIT_STR) ) {
						alt474=1;
					}
					switch (alt474) {
						case 1 :
							// MFortranParser2018.g:5089:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_computed_goto_stmt21756);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					GOTO446=(Token)match(input,GOTO,FOLLOW_GOTO_in_computed_goto_stmt21767); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_computed_goto_stmt21769); if (state.failed) return;
					pushFollow(FOLLOW_label_list_in_computed_goto_stmt21771);
					label_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_computed_goto_stmt21773); if (state.failed) return;
					// MFortranParser2018.g:5090:37: ( COMMA )?
					int alt475=2;
					int LA475_0 = input.LA(1);
					if ( (LA475_0==COMMA) ) {
						alt475=1;
					}
					switch (alt475) {
						case 1 :
							// MFortranParser2018.g:5090:39: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_computed_goto_stmt21777); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_expr_in_computed_goto_stmt21782);
					expr();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_computed_goto_stmt21792);
					end_of_stmt447=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.computed_goto_stmt(lbl, 
					              GOTO446, null, end_of_stmt447); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "computed_goto_stmt"



	// $ANTLR start "continue_stmt"
	// MFortranParser2018.g:5099:1: continue_stmt : (lbl= label )? CONTINUE end_of_stmt ;
	public final void continue_stmt() throws RecognitionException {
		Token CONTINUE448=null;
		Token lbl =null;
		Token end_of_stmt449 =null;

		try {
			// MFortranParser2018.g:5103:5: ( (lbl= label )? CONTINUE end_of_stmt )
			// MFortranParser2018.g:5103:7: (lbl= label )? CONTINUE end_of_stmt
			{
			// MFortranParser2018.g:5103:7: (lbl= label )?
			int alt477=2;
			int LA477_0 = input.LA(1);
			if ( (LA477_0==DIGIT_STR) ) {
				alt477=1;
			}
			switch (alt477) {
				case 1 :
					// MFortranParser2018.g:5103:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_continue_stmt21828);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CONTINUE448=(Token)match(input,CONTINUE,FOLLOW_CONTINUE_in_continue_stmt21839); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_continue_stmt21848);
			end_of_stmt449=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.continue_stmt(lbl, 
			              CONTINUE448, end_of_stmt449); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "continue_stmt"



	// $ANTLR start "stop_stmt"
	// MFortranParser2018.g:5115:1: stop_stmt : (lbl= label )? STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt ;
	public final void stop_stmt() throws RecognitionException {
		Token quiet=null;
		Token STOP450=null;
		Token lbl =null;
		Token end_of_stmt451 =null;


		  boolean hasSC = false;

		try {
			// MFortranParser2018.g:5122:5: ( (lbl= label )? STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt )
			// MFortranParser2018.g:5122:7: (lbl= label )? STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt
			{
			// MFortranParser2018.g:5122:7: (lbl= label )?
			int alt478=2;
			int LA478_0 = input.LA(1);
			if ( (LA478_0==DIGIT_STR) ) {
				alt478=1;
			}
			switch (alt478) {
				case 1 :
					// MFortranParser2018.g:5122:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_stop_stmt21889);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			STOP450=(Token)match(input,STOP,FOLLOW_STOP_in_stop_stmt21900); if (state.failed) return;
			// MFortranParser2018.g:5123:12: ( stop_code )?
			int alt479=2;
			int LA479_0 = input.LA(1);
			if ( (LA479_0==CHAR_CONST||LA479_0==DIGIT_STR||LA479_0==IDENT) ) {
				alt479=1;
			}
			switch (alt479) {
				case 1 :
					// MFortranParser2018.g:5123:13: stop_code
					{
					pushFollow(FOLLOW_stop_code_in_stop_stmt21903);
					stop_code();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasSC=true;}
					}
					break;

			}

			// MFortranParser2018.g:5124:7: ( COMMA quiet= QUIET EQUALS expr )?
			int alt480=2;
			int LA480_0 = input.LA(1);
			if ( (LA480_0==COMMA) ) {
				alt480=1;
			}
			switch (alt480) {
				case 1 :
					// MFortranParser2018.g:5124:8: COMMA quiet= QUIET EQUALS expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_stop_stmt21917); if (state.failed) return;
					quiet=(Token)match(input,QUIET,FOLLOW_QUIET_in_stop_stmt21921); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_stop_stmt21923); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_stop_stmt21925);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_stop_stmt21935);
			end_of_stmt451=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.stop_stmt(lbl, 
			              STOP450, quiet, end_of_stmt451, hasSC); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "stop_stmt"



	// $ANTLR start "error_stop_stmt"
	// MFortranParser2018.g:5135:1: error_stop_stmt : ( (lbl= label )? ERROR STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt | (lbl= label )? ERRORSTOP ( expr )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt );
	public final void error_stop_stmt() throws RecognitionException {
		Token quiet=null;
		Token ERROR452=null;
		Token STOP453=null;
		Token ERRORSTOP455=null;
		Token lbl =null;
		Token end_of_stmt454 =null;
		Token end_of_stmt456 =null;


		  boolean hasSC = false;

		try {
			// MFortranParser2018.g:5142:5: ( (lbl= label )? ERROR STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt | (lbl= label )? ERRORSTOP ( expr )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt )
			int alt487=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA487_1 = input.LA(2);
				if ( (LA487_1==ERROR) ) {
					alt487=1;
				}
				else if ( (LA487_1==ERRORSTOP) ) {
					alt487=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 487, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ERROR:
				{
				alt487=1;
				}
				break;
			case ERRORSTOP:
				{
				alt487=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 487, 0, input);
				throw nvae;
			}
			switch (alt487) {
				case 1 :
					// MFortranParser2018.g:5142:7: (lbl= label )? ERROR STOP ( stop_code )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt
					{
					// MFortranParser2018.g:5142:7: (lbl= label )?
					int alt481=2;
					int LA481_0 = input.LA(1);
					if ( (LA481_0==DIGIT_STR) ) {
						alt481=1;
					}
					switch (alt481) {
						case 1 :
							// MFortranParser2018.g:5142:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_error_stop_stmt21975);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ERROR452=(Token)match(input,ERROR,FOLLOW_ERROR_in_error_stop_stmt21986); if (state.failed) return;
					STOP453=(Token)match(input,STOP,FOLLOW_STOP_in_error_stop_stmt21988); if (state.failed) return;
					// MFortranParser2018.g:5143:18: ( stop_code )?
					int alt482=2;
					int LA482_0 = input.LA(1);
					if ( (LA482_0==CHAR_CONST||LA482_0==DIGIT_STR||LA482_0==IDENT) ) {
						alt482=1;
					}
					switch (alt482) {
						case 1 :
							// MFortranParser2018.g:5143:19: stop_code
							{
							pushFollow(FOLLOW_stop_code_in_error_stop_stmt21991);
							stop_code();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSC=true;}
							}
							break;

					}

					// MFortranParser2018.g:5144:7: ( COMMA quiet= QUIET EQUALS expr )?
					int alt483=2;
					int LA483_0 = input.LA(1);
					if ( (LA483_0==COMMA) ) {
						alt483=1;
					}
					switch (alt483) {
						case 1 :
							// MFortranParser2018.g:5144:8: COMMA quiet= QUIET EQUALS expr
							{
							match(input,COMMA,FOLLOW_COMMA_in_error_stop_stmt22004); if (state.failed) return;
							quiet=(Token)match(input,QUIET,FOLLOW_QUIET_in_error_stop_stmt22008); if (state.failed) return;
							match(input,EQUALS,FOLLOW_EQUALS_in_error_stop_stmt22010); if (state.failed) return;
							pushFollow(FOLLOW_expr_in_error_stop_stmt22012);
							expr();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_error_stop_stmt22022);
					end_of_stmt454=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.error_stop_stmt(lbl, 
					              ERROR452, STOP453, quiet, end_of_stmt454, hasSC); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5148:8: (lbl= label )? ERRORSTOP ( expr )? ( COMMA quiet= QUIET EQUALS expr )? end_of_stmt
					{
					// MFortranParser2018.g:5148:8: (lbl= label )?
					int alt484=2;
					int LA484_0 = input.LA(1);
					if ( (LA484_0==DIGIT_STR) ) {
						alt484=1;
					}
					switch (alt484) {
						case 1 :
							// MFortranParser2018.g:5148:9: lbl= label
							{
							pushFollow(FOLLOW_label_in_error_stop_stmt22044);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ERRORSTOP455=(Token)match(input,ERRORSTOP,FOLLOW_ERRORSTOP_in_error_stop_stmt22055); if (state.failed) return;
					// MFortranParser2018.g:5149:17: ( expr )?
					int alt485=2;
					int LA485_0 = input.LA(1);
					if ( (LA485_0==BIN_CONST||LA485_0==CHAR_CONST||(LA485_0 >= DEFINED_OP && LA485_0 <= DIGIT_STR)||LA485_0==FALSE||(LA485_0 >= HEX_CONST && LA485_0 <= IDENT)||LA485_0==LBRACKET||LA485_0==LPAREN||LA485_0==MINUS||LA485_0==M_REAL_CONST||LA485_0==NOT||LA485_0==OCT_CONST||LA485_0==PLUS||LA485_0==TRUE) ) {
						alt485=1;
					}
					switch (alt485) {
						case 1 :
							// MFortranParser2018.g:5149:18: expr
							{
							pushFollow(FOLLOW_expr_in_error_stop_stmt22058);
							expr();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSC=true;}
							}
							break;

					}

					// MFortranParser2018.g:5150:7: ( COMMA quiet= QUIET EQUALS expr )?
					int alt486=2;
					int LA486_0 = input.LA(1);
					if ( (LA486_0==COMMA) ) {
						alt486=1;
					}
					switch (alt486) {
						case 1 :
							// MFortranParser2018.g:5150:8: COMMA quiet= QUIET EQUALS expr
							{
							match(input,COMMA,FOLLOW_COMMA_in_error_stop_stmt22071); if (state.failed) return;
							quiet=(Token)match(input,QUIET,FOLLOW_QUIET_in_error_stop_stmt22075); if (state.failed) return;
							match(input,EQUALS,FOLLOW_EQUALS_in_error_stop_stmt22077); if (state.failed) return;
							pushFollow(FOLLOW_expr_in_error_stop_stmt22079);
							expr();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_error_stop_stmt22089);
					end_of_stmt456=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.error_stop_stmt(lbl, 
					              ERRORSTOP455, null, quiet, end_of_stmt456, hasSC); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "error_stop_stmt"



	// $ANTLR start "stop_code"
	// MFortranParser2018.g:5161:1: stop_code : ( char_constant | DIGIT_STR );
	public final void stop_code() throws RecognitionException {
		Token DIGIT_STR457=null;

		try {
			// MFortranParser2018.g:5162:5: ( char_constant | DIGIT_STR )
			int alt488=2;
			int LA488_0 = input.LA(1);
			if ( (LA488_0==DIGIT_STR) ) {
				int LA488_1 = input.LA(2);
				if ( (LA488_1==UNDERSCORE) ) {
					alt488=1;
				}
				else if ( (LA488_1==EOF||LA488_1==COMMA||LA488_1==EOS) ) {
					alt488=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 488, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA488_0==CHAR_CONST||LA488_0==IDENT) ) {
				alt488=1;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 488, 0, input);
				throw nvae;
			}

			switch (alt488) {
				case 1 :
					// MFortranParser2018.g:5162:7: char_constant
					{
					pushFollow(FOLLOW_char_constant_in_stop_code22118);
					char_constant();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.stop_code(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5164:7: DIGIT_STR
					{
					DIGIT_STR457=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_stop_code22136); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.stop_code(DIGIT_STR457); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "stop_code"



	// $ANTLR start "sync_all_stmt"
	// MFortranParser2018.g:5185:1: sync_all_stmt : ( (lbl= label )? SYNC ALL ( LPAREN RPAREN )? end_of_stmt | (lbl= label )? SYNC ALL LPAREN sync_stat_list RPAREN end_of_stmt );
	public final void sync_all_stmt() throws RecognitionException {
		Token SYNC458=null;
		Token ALL459=null;
		Token SYNC461=null;
		Token ALL462=null;
		Token lbl =null;
		Token end_of_stmt460 =null;
		Token end_of_stmt463 =null;


		  boolean hasSSL = false;

		try {
			// MFortranParser2018.g:5192:5: ( (lbl= label )? SYNC ALL ( LPAREN RPAREN )? end_of_stmt | (lbl= label )? SYNC ALL LPAREN sync_stat_list RPAREN end_of_stmt )
			int alt492=2;
			int LA492_0 = input.LA(1);
			if ( (LA492_0==DIGIT_STR) ) {
				int LA492_1 = input.LA(2);
				if ( (LA492_1==SYNC) ) {
					int LA492_2 = input.LA(3);
					if ( (LA492_2==ALL) ) {
						int LA492_3 = input.LA(4);
						if ( (LA492_3==LPAREN) ) {
							int LA492_4 = input.LA(5);
							if ( (LA492_4==RPAREN) ) {
								alt492=1;
							}
							else if ( (LA492_4==IDENT) ) {
								alt492=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 492, 4, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA492_3==EOF||LA492_3==EOS) ) {
							alt492=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 492, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 492, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 492, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA492_0==SYNC) ) {
				int LA492_2 = input.LA(2);
				if ( (LA492_2==ALL) ) {
					int LA492_3 = input.LA(3);
					if ( (LA492_3==LPAREN) ) {
						int LA492_4 = input.LA(4);
						if ( (LA492_4==RPAREN) ) {
							alt492=1;
						}
						else if ( (LA492_4==IDENT) ) {
							alt492=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 492, 4, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA492_3==EOF||LA492_3==EOS) ) {
						alt492=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 492, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 492, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 492, 0, input);
				throw nvae;
			}

			switch (alt492) {
				case 1 :
					// MFortranParser2018.g:5192:7: (lbl= label )? SYNC ALL ( LPAREN RPAREN )? end_of_stmt
					{
					// MFortranParser2018.g:5192:7: (lbl= label )?
					int alt489=2;
					int LA489_0 = input.LA(1);
					if ( (LA489_0==DIGIT_STR) ) {
						alt489=1;
					}
					switch (alt489) {
						case 1 :
							// MFortranParser2018.g:5192:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_sync_all_stmt22182);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					SYNC458=(Token)match(input,SYNC,FOLLOW_SYNC_in_sync_all_stmt22193); if (state.failed) return;
					ALL459=(Token)match(input,ALL,FOLLOW_ALL_in_sync_all_stmt22195); if (state.failed) return;
					// MFortranParser2018.g:5193:16: ( LPAREN RPAREN )?
					int alt490=2;
					int LA490_0 = input.LA(1);
					if ( (LA490_0==LPAREN) ) {
						alt490=1;
					}
					switch (alt490) {
						case 1 :
							// MFortranParser2018.g:5193:17: LPAREN RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_sync_all_stmt22198); if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_sync_all_stmt22200); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_sync_all_stmt22211);
					end_of_stmt460=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.sync_all_stmt(lbl, 
					              SYNC458, ALL459, end_of_stmt460, hasSSL); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5197:7: (lbl= label )? SYNC ALL LPAREN sync_stat_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5197:7: (lbl= label )?
					int alt491=2;
					int LA491_0 = input.LA(1);
					if ( (LA491_0==DIGIT_STR) ) {
						alt491=1;
					}
					switch (alt491) {
						case 1 :
							// MFortranParser2018.g:5197:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_sync_all_stmt22232);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					SYNC461=(Token)match(input,SYNC,FOLLOW_SYNC_in_sync_all_stmt22243); if (state.failed) return;
					ALL462=(Token)match(input,ALL,FOLLOW_ALL_in_sync_all_stmt22245); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_sync_all_stmt22247); if (state.failed) return;
					pushFollow(FOLLOW_sync_stat_list_in_sync_all_stmt22249);
					sync_stat_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_sync_all_stmt22251); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_sync_all_stmt22260);
					end_of_stmt463=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.sync_all_stmt(lbl, 
					              SYNC461, ALL462, end_of_stmt463, true); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sync_all_stmt"



	// $ANTLR start "sync_stat"
	// MFortranParser2018.g:5209:1: sync_stat : IDENT EQUALS expr ;
	public final void sync_stat() throws RecognitionException {
		Token IDENT464=null;

		try {
			// MFortranParser2018.g:5210:5: ( IDENT EQUALS expr )
			// MFortranParser2018.g:5210:7: IDENT EQUALS expr
			{
			IDENT464=(Token)match(input,IDENT,FOLLOW_IDENT_in_sync_stat22289); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_sync_stat22291); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_sync_stat22293);
			expr();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.sync_stat(IDENT464); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sync_stat"



	// $ANTLR start "sync_stat_list"
	// MFortranParser2018.g:5214:1: sync_stat_list : sync_stat ( COMMA sync_stat )* ;
	public final void sync_stat_list() throws RecognitionException {

		  int numSS = 1;

		try {
			// MFortranParser2018.g:5221:5: ( sync_stat ( COMMA sync_stat )* )
			// MFortranParser2018.g:5221:7: sync_stat ( COMMA sync_stat )*
			{
			pushFollow(FOLLOW_sync_stat_in_sync_stat_list22328);
			sync_stat();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5222:7: ( COMMA sync_stat )*
			loop493:
			while (true) {
				int alt493=2;
				int LA493_0 = input.LA(1);
				if ( (LA493_0==COMMA) ) {
					alt493=1;
				}

				switch (alt493) {
				case 1 :
					// MFortranParser2018.g:5222:9: COMMA sync_stat
					{
					match(input,COMMA,FOLLOW_COMMA_in_sync_stat_list22339); if (state.failed) return;
					pushFollow(FOLLOW_sync_stat_in_sync_stat_list22341);
					sync_stat();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numSS++;}
					}
					break;

				default :
					break loop493;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.sync_stat_list(numSS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sync_stat_list"



	// $ANTLR start "sync_images_stmt"
	// MFortranParser2018.g:5228:1: sync_images_stmt : (lbl= label )? SYNC IMAGES LPAREN image_set ( COMMA sync_stat_list )? RPAREN end_of_stmt ;
	public final void sync_images_stmt() throws RecognitionException {
		Token SYNC465=null;
		Token IMAGES466=null;
		Token lbl =null;
		Token end_of_stmt467 =null;


		  boolean hasSSL = false;

		try {
			// MFortranParser2018.g:5235:5: ( (lbl= label )? SYNC IMAGES LPAREN image_set ( COMMA sync_stat_list )? RPAREN end_of_stmt )
			// MFortranParser2018.g:5235:7: (lbl= label )? SYNC IMAGES LPAREN image_set ( COMMA sync_stat_list )? RPAREN end_of_stmt
			{
			// MFortranParser2018.g:5235:7: (lbl= label )?
			int alt494=2;
			int LA494_0 = input.LA(1);
			if ( (LA494_0==DIGIT_STR) ) {
				alt494=1;
			}
			switch (alt494) {
				case 1 :
					// MFortranParser2018.g:5235:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_sync_images_stmt22376);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			SYNC465=(Token)match(input,SYNC,FOLLOW_SYNC_in_sync_images_stmt22387); if (state.failed) return;
			IMAGES466=(Token)match(input,IMAGES,FOLLOW_IMAGES_in_sync_images_stmt22389); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_sync_images_stmt22391); if (state.failed) return;
			pushFollow(FOLLOW_image_set_in_sync_images_stmt22393);
			image_set();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5237:7: ( COMMA sync_stat_list )?
			int alt495=2;
			int LA495_0 = input.LA(1);
			if ( (LA495_0==COMMA) ) {
				alt495=1;
			}
			switch (alt495) {
				case 1 :
					// MFortranParser2018.g:5237:8: COMMA sync_stat_list
					{
					match(input,COMMA,FOLLOW_COMMA_in_sync_images_stmt22403); if (state.failed) return;
					pushFollow(FOLLOW_sync_stat_list_in_sync_images_stmt22405);
					sync_stat_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasSSL=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_sync_images_stmt22411); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_sync_images_stmt22420);
			end_of_stmt467=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.sync_images_stmt(lbl, 
			              SYNC465, IMAGES466, end_of_stmt467, hasSSL); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sync_images_stmt"



	// $ANTLR start "image_set"
	// MFortranParser2018.g:5246:1: image_set : ( expr | ASTERISK );
	public final void image_set() throws RecognitionException {
		Token ASTERISK468=null;

		try {
			// MFortranParser2018.g:5247:5: ( expr | ASTERISK )
			int alt496=2;
			int LA496_0 = input.LA(1);
			if ( (LA496_0==BIN_CONST||LA496_0==CHAR_CONST||(LA496_0 >= DEFINED_OP && LA496_0 <= DIGIT_STR)||LA496_0==FALSE||(LA496_0 >= HEX_CONST && LA496_0 <= IDENT)||LA496_0==LBRACKET||LA496_0==LPAREN||LA496_0==MINUS||LA496_0==M_REAL_CONST||LA496_0==NOT||LA496_0==OCT_CONST||LA496_0==PLUS||LA496_0==TRUE) ) {
				alt496=1;
			}
			else if ( (LA496_0==ASTERISK) ) {
				alt496=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 496, 0, input);
				throw nvae;
			}

			switch (alt496) {
				case 1 :
					// MFortranParser2018.g:5247:7: expr
					{
					pushFollow(FOLLOW_expr_in_image_set22449);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.image_set(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5248:7: ASTERISK
					{
					ASTERISK468=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_image_set22459); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.image_set(ASTERISK468); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "image_set"



	// $ANTLR start "sync_memory_stmt"
	// MFortranParser2018.g:5254:1: sync_memory_stmt : ( (lbl= label )? SYNC MEMORY ( LPAREN RPAREN )? end_of_stmt | (lbl= label )? SYNC MEMORY LPAREN sync_stat_list RPAREN end_of_stmt );
	public final void sync_memory_stmt() throws RecognitionException {
		Token SYNC469=null;
		Token MEMORY470=null;
		Token SYNC472=null;
		Token MEMORY473=null;
		Token lbl =null;
		Token end_of_stmt471 =null;
		Token end_of_stmt474 =null;


		  boolean hasSSL = false;

		try {
			// MFortranParser2018.g:5261:5: ( (lbl= label )? SYNC MEMORY ( LPAREN RPAREN )? end_of_stmt | (lbl= label )? SYNC MEMORY LPAREN sync_stat_list RPAREN end_of_stmt )
			int alt500=2;
			int LA500_0 = input.LA(1);
			if ( (LA500_0==DIGIT_STR) ) {
				int LA500_1 = input.LA(2);
				if ( (LA500_1==SYNC) ) {
					int LA500_2 = input.LA(3);
					if ( (LA500_2==MEMORY) ) {
						int LA500_3 = input.LA(4);
						if ( (LA500_3==LPAREN) ) {
							int LA500_4 = input.LA(5);
							if ( (LA500_4==RPAREN) ) {
								alt500=1;
							}
							else if ( (LA500_4==IDENT) ) {
								alt500=2;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 500, 4, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA500_3==EOF||LA500_3==EOS) ) {
							alt500=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 500, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 500, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 500, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA500_0==SYNC) ) {
				int LA500_2 = input.LA(2);
				if ( (LA500_2==MEMORY) ) {
					int LA500_3 = input.LA(3);
					if ( (LA500_3==LPAREN) ) {
						int LA500_4 = input.LA(4);
						if ( (LA500_4==RPAREN) ) {
							alt500=1;
						}
						else if ( (LA500_4==IDENT) ) {
							alt500=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 500, 4, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA500_3==EOF||LA500_3==EOS) ) {
						alt500=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 500, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 500, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 500, 0, input);
				throw nvae;
			}

			switch (alt500) {
				case 1 :
					// MFortranParser2018.g:5261:7: (lbl= label )? SYNC MEMORY ( LPAREN RPAREN )? end_of_stmt
					{
					// MFortranParser2018.g:5261:7: (lbl= label )?
					int alt497=2;
					int LA497_0 = input.LA(1);
					if ( (LA497_0==DIGIT_STR) ) {
						alt497=1;
					}
					switch (alt497) {
						case 1 :
							// MFortranParser2018.g:5261:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_sync_memory_stmt22491);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					SYNC469=(Token)match(input,SYNC,FOLLOW_SYNC_in_sync_memory_stmt22503); if (state.failed) return;
					MEMORY470=(Token)match(input,MEMORY,FOLLOW_MEMORY_in_sync_memory_stmt22505); if (state.failed) return;
					// MFortranParser2018.g:5262:19: ( LPAREN RPAREN )?
					int alt498=2;
					int LA498_0 = input.LA(1);
					if ( (LA498_0==LPAREN) ) {
						alt498=1;
					}
					switch (alt498) {
						case 1 :
							// MFortranParser2018.g:5262:20: LPAREN RPAREN
							{
							match(input,LPAREN,FOLLOW_LPAREN_in_sync_memory_stmt22508); if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_sync_memory_stmt22510); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_sync_memory_stmt22521);
					end_of_stmt471=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.sync_memory_stmt(lbl, 
					              SYNC469, MEMORY470, end_of_stmt471, hasSSL); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5266:7: (lbl= label )? SYNC MEMORY LPAREN sync_stat_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5266:7: (lbl= label )?
					int alt499=2;
					int LA499_0 = input.LA(1);
					if ( (LA499_0==DIGIT_STR) ) {
						alt499=1;
					}
					switch (alt499) {
						case 1 :
							// MFortranParser2018.g:5266:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_sync_memory_stmt22542);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					SYNC472=(Token)match(input,SYNC,FOLLOW_SYNC_in_sync_memory_stmt22554); if (state.failed) return;
					MEMORY473=(Token)match(input,MEMORY,FOLLOW_MEMORY_in_sync_memory_stmt22556); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_sync_memory_stmt22558); if (state.failed) return;
					pushFollow(FOLLOW_sync_stat_list_in_sync_memory_stmt22560);
					sync_stat_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_sync_memory_stmt22562); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_sync_memory_stmt22571);
					end_of_stmt474=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.sync_memory_stmt(lbl, 
					              SYNC472, MEMORY473, end_of_stmt474, true); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "sync_memory_stmt"



	// $ANTLR start "io_unit"
	// MFortranParser2018.g:5525:1: io_unit : ( expr |asterisk= ASTERISK );
	public final void io_unit() throws RecognitionException {
		Token asterisk=null;

		try {
			// MFortranParser2018.g:5529:5: ( expr |asterisk= ASTERISK )
			int alt501=2;
			int LA501_0 = input.LA(1);
			if ( (LA501_0==BIN_CONST||LA501_0==CHAR_CONST||(LA501_0 >= DEFINED_OP && LA501_0 <= DIGIT_STR)||LA501_0==FALSE||(LA501_0 >= HEX_CONST && LA501_0 <= IDENT)||LA501_0==LBRACKET||LA501_0==LPAREN||LA501_0==MINUS||LA501_0==M_REAL_CONST||LA501_0==NOT||LA501_0==OCT_CONST||LA501_0==PLUS||LA501_0==TRUE) ) {
				alt501=1;
			}
			else if ( (LA501_0==ASTERISK) ) {
				alt501=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 501, 0, input);
				throw nvae;
			}

			switch (alt501) {
				case 1 :
					// MFortranParser2018.g:5529:7: expr
					{
					pushFollow(FOLLOW_expr_in_io_unit22664);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:5530:7: asterisk= ASTERISK
					{
					asterisk=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_io_unit22674); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.io_unit(asterisk);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_unit"



	// $ANTLR start "file_unit_number"
	// MFortranParser2018.g:5537:1: file_unit_number : expr ;
	public final void file_unit_number() throws RecognitionException {
		try {
			// MFortranParser2018.g:5541:5: ( expr )
			// MFortranParser2018.g:5541:7: expr
			{
			pushFollow(FOLLOW_expr_in_file_unit_number22697);
			expr();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.file_unit_number();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "file_unit_number"



	// $ANTLR start "open_stmt"
	// MFortranParser2018.g:5552:1: open_stmt : (lbl= label )? OPEN LPAREN connect_spec_list RPAREN end_of_stmt ;
	public final void open_stmt() throws RecognitionException {
		Token OPEN475=null;
		Token lbl =null;
		Token end_of_stmt476 =null;



		try {
			// MFortranParser2018.g:5558:5: ( (lbl= label )? OPEN LPAREN connect_spec_list RPAREN end_of_stmt )
			// MFortranParser2018.g:5558:7: (lbl= label )? OPEN LPAREN connect_spec_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:5558:7: (lbl= label )?
			int alt502=2;
			int LA502_0 = input.LA(1);
			if ( (LA502_0==DIGIT_STR) ) {
				alt502=1;
			}
			switch (alt502) {
				case 1 :
					// MFortranParser2018.g:5558:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_open_stmt22730);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			OPEN475=(Token)match(input,OPEN,FOLLOW_OPEN_in_open_stmt22742); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_open_stmt22744); if (state.failed) return;
			pushFollow(FOLLOW_connect_spec_list_in_open_stmt22746);
			connect_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_open_stmt22748); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_open_stmt22757);
			end_of_stmt476=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.open_stmt(lbl, 
			              OPEN475, end_of_stmt476);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "open_stmt"



	// $ANTLR start "connect_spec"
	// MFortranParser2018.g:5574:1: connect_spec : ( expr | IDENT EQUALS expr );
	public final void connect_spec() throws RecognitionException {
		Token IDENT477=null;

		try {
			// MFortranParser2018.g:5575:5: ( expr | IDENT EQUALS expr )
			int alt503=2;
			int LA503_0 = input.LA(1);
			if ( (LA503_0==BIN_CONST||LA503_0==CHAR_CONST||(LA503_0 >= DEFINED_OP && LA503_0 <= DIGIT_STR)||LA503_0==FALSE||LA503_0==HEX_CONST||LA503_0==LBRACKET||LA503_0==LPAREN||LA503_0==MINUS||LA503_0==M_REAL_CONST||LA503_0==NOT||LA503_0==OCT_CONST||LA503_0==PLUS||LA503_0==TRUE) ) {
				alt503=1;
			}
			else if ( (LA503_0==IDENT) ) {
				int LA503_2 = input.LA(2);
				if ( (LA503_2==AND||LA503_2==ASTERISK||LA503_2==CHAR_CONST||LA503_2==COMMA||LA503_2==DEFINED_OP||LA503_2==EQ||(LA503_2 >= EQV && LA503_2 <= EQ_EQ)||LA503_2==GE||(LA503_2 >= GREATERTHAN && LA503_2 <= GT)||(LA503_2 >= LBRACKET && LA503_2 <= LE)||(LA503_2 >= LESSTHAN && LA503_2 <= LESSTHAN_EQ)||(LA503_2 >= LPAREN && LA503_2 <= LT)||LA503_2==MINUS||(LA503_2 >= NE && LA503_2 <= NEQV)||LA503_2==OR||LA503_2==PERCENT||LA503_2==PLUS||LA503_2==POWER||LA503_2==RPAREN||(LA503_2 >= SLASH && LA503_2 <= SLASH_SLASH)) ) {
					alt503=1;
				}
				else if ( (LA503_2==EQUALS) ) {
					alt503=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 503, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 503, 0, input);
				throw nvae;
			}

			switch (alt503) {
				case 1 :
					// MFortranParser2018.g:5575:7: expr
					{
					pushFollow(FOLLOW_expr_in_connect_spec22786);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.connect_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5577:7: IDENT EQUALS expr
					{
					IDENT477=(Token)match(input,IDENT,FOLLOW_IDENT_in_connect_spec22804); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_connect_spec22806); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_connect_spec22808);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.connect_spec(IDENT477); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "connect_spec"



	// $ANTLR start "connect_spec_list"
	// MFortranParser2018.g:5581:1: connect_spec_list : connect_spec ( COMMA connect_spec )* ;
	public final void connect_spec_list() throws RecognitionException {

		  int numCS = 1;

		try {
			// MFortranParser2018.g:5588:5: ( connect_spec ( COMMA connect_spec )* )
			// MFortranParser2018.g:5588:7: connect_spec ( COMMA connect_spec )*
			{
			pushFollow(FOLLOW_connect_spec_in_connect_spec_list22843);
			connect_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5589:7: ( COMMA connect_spec )*
			loop504:
			while (true) {
				int alt504=2;
				int LA504_0 = input.LA(1);
				if ( (LA504_0==COMMA) ) {
					alt504=1;
				}

				switch (alt504) {
				case 1 :
					// MFortranParser2018.g:5589:9: COMMA connect_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_connect_spec_list22853); if (state.failed) return;
					pushFollow(FOLLOW_connect_spec_in_connect_spec_list22855);
					connect_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCS++;}
					}
					break;

				default :
					break loop504;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.connect_spec_list(numCS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "connect_spec_list"



	// $ANTLR start "close_stmt"
	// MFortranParser2018.g:5606:1: close_stmt : (lbl= label )? CLOSE LPAREN close_spec_list RPAREN end_of_stmt ;
	public final void close_stmt() throws RecognitionException {
		Token CLOSE478=null;
		Token lbl =null;
		Token end_of_stmt479 =null;



		try {
			// MFortranParser2018.g:5612:5: ( (lbl= label )? CLOSE LPAREN close_spec_list RPAREN end_of_stmt )
			// MFortranParser2018.g:5612:7: (lbl= label )? CLOSE LPAREN close_spec_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:5612:7: (lbl= label )?
			int alt505=2;
			int LA505_0 = input.LA(1);
			if ( (LA505_0==DIGIT_STR) ) {
				alt505=1;
			}
			switch (alt505) {
				case 1 :
					// MFortranParser2018.g:5612:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_close_stmt22896);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CLOSE478=(Token)match(input,CLOSE,FOLLOW_CLOSE_in_close_stmt22907); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_close_stmt22909); if (state.failed) return;
			pushFollow(FOLLOW_close_spec_list_in_close_stmt22911);
			close_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_close_stmt22913); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_close_stmt22922);
			end_of_stmt479=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.close_stmt(lbl, 
			              CLOSE478, end_of_stmt479);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "close_stmt"



	// $ANTLR start "close_spec"
	// MFortranParser2018.g:5625:1: close_spec : ( expr | IDENT EQUALS expr );
	public final void close_spec() throws RecognitionException {
		Token IDENT480=null;

		try {
			// MFortranParser2018.g:5626:5: ( expr | IDENT EQUALS expr )
			int alt506=2;
			int LA506_0 = input.LA(1);
			if ( (LA506_0==BIN_CONST||LA506_0==CHAR_CONST||(LA506_0 >= DEFINED_OP && LA506_0 <= DIGIT_STR)||LA506_0==FALSE||LA506_0==HEX_CONST||LA506_0==LBRACKET||LA506_0==LPAREN||LA506_0==MINUS||LA506_0==M_REAL_CONST||LA506_0==NOT||LA506_0==OCT_CONST||LA506_0==PLUS||LA506_0==TRUE) ) {
				alt506=1;
			}
			else if ( (LA506_0==IDENT) ) {
				int LA506_2 = input.LA(2);
				if ( (LA506_2==AND||LA506_2==ASTERISK||LA506_2==CHAR_CONST||LA506_2==COMMA||LA506_2==DEFINED_OP||LA506_2==EQ||(LA506_2 >= EQV && LA506_2 <= EQ_EQ)||LA506_2==GE||(LA506_2 >= GREATERTHAN && LA506_2 <= GT)||(LA506_2 >= LBRACKET && LA506_2 <= LE)||(LA506_2 >= LESSTHAN && LA506_2 <= LESSTHAN_EQ)||(LA506_2 >= LPAREN && LA506_2 <= LT)||LA506_2==MINUS||(LA506_2 >= NE && LA506_2 <= NEQV)||LA506_2==OR||LA506_2==PERCENT||LA506_2==PLUS||LA506_2==POWER||LA506_2==RPAREN||(LA506_2 >= SLASH && LA506_2 <= SLASH_SLASH)) ) {
					alt506=1;
				}
				else if ( (LA506_2==EQUALS) ) {
					alt506=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 506, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 506, 0, input);
				throw nvae;
			}

			switch (alt506) {
				case 1 :
					// MFortranParser2018.g:5626:7: expr
					{
					pushFollow(FOLLOW_expr_in_close_spec22952);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.close_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5628:7: IDENT EQUALS expr
					{
					IDENT480=(Token)match(input,IDENT,FOLLOW_IDENT_in_close_spec22970); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_close_spec22972); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_close_spec22974);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.close_spec(IDENT480); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "close_spec"



	// $ANTLR start "close_spec_list"
	// MFortranParser2018.g:5632:1: close_spec_list : close_spec ( COMMA close_spec )* ;
	public final void close_spec_list() throws RecognitionException {

		  int numCS = 1;

		try {
			// MFortranParser2018.g:5636:5: ( close_spec ( COMMA close_spec )* )
			// MFortranParser2018.g:5636:7: close_spec ( COMMA close_spec )*
			{
			pushFollow(FOLLOW_close_spec_in_close_spec_list23005);
			close_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5637:7: ( COMMA close_spec )*
			loop507:
			while (true) {
				int alt507=2;
				int LA507_0 = input.LA(1);
				if ( (LA507_0==COMMA) ) {
					alt507=1;
				}

				switch (alt507) {
				case 1 :
					// MFortranParser2018.g:5637:9: COMMA close_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_close_spec_list23015); if (state.failed) return;
					pushFollow(FOLLOW_close_spec_in_close_spec_list23017);
					close_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numCS++;}
					}
					break;

				default :
					break loop507;
				}
			}

			if ( state.backtracking==0 ) { MFPA.close_spec_list(numCS); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "close_spec_list"



	// $ANTLR start "read_stmt"
	// MFortranParser2018.g:5644:1: read_stmt options {k=3; } : ( ( ( label )? READ LPAREN )=> (lbl= label )? READ LPAREN io_control_spec_list RPAREN ( input_item_list )? end_of_stmt | ( ( label )? READ )=> (lbl= label )? READ format ( COMMA input_item_list )? end_of_stmt );
	public final void read_stmt() throws RecognitionException {
		Token READ481=null;
		Token READ483=null;
		Token lbl =null;
		Token end_of_stmt482 =null;
		Token end_of_stmt484 =null;


		  boolean hasIIL = false;

		try {
			// MFortranParser2018.g:5652:5: ( ( ( label )? READ LPAREN )=> (lbl= label )? READ LPAREN io_control_spec_list RPAREN ( input_item_list )? end_of_stmt | ( ( label )? READ )=> (lbl= label )? READ format ( COMMA input_item_list )? end_of_stmt )
			int alt512=2;
			int LA512_0 = input.LA(1);
			if ( (LA512_0==DIGIT_STR) ) {
				int LA512_1 = input.LA(2);
				if ( (LA512_1==READ) ) {
					int LA512_3 = input.LA(3);
					if ( (LA512_3==LPAREN) ) {
						int LA512_20 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 20, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_3==NOT) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==PLUS) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==MINUS) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==DEFINED_OP) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==IDENT) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==DIGIT_STR) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==CHAR_CONST) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==M_REAL_CONST) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==TRUE) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==FALSE) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==BIN_CONST) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==OCT_CONST) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==HEX_CONST) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==LBRACKET) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_3==ASTERISK) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 512, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA512_0==READ) ) {
				int LA512_2 = input.LA(2);
				if ( (LA512_2==LPAREN) ) {
					int LA512_4 = input.LA(3);
					if ( (LA512_4==SLASH) && (synpred59_MFortranParser2018())) {
						alt512=2;
					}
					else if ( (LA512_4==NOT) ) {
						int LA512_37 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 37, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==PLUS) ) {
						int LA512_38 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 38, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==MINUS) ) {
						int LA512_39 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 39, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==DEFINED_OP) ) {
						int LA512_40 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 40, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==IDENT) ) {
						int LA512_41 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 41, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==DIGIT_STR) ) {
						int LA512_42 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 42, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==CHAR_CONST) ) {
						int LA512_43 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 43, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==M_REAL_CONST) ) {
						int LA512_44 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 44, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==LPAREN) ) {
						int LA512_45 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 45, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==TRUE) ) {
						int LA512_46 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 46, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==FALSE) ) {
						int LA512_47 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 47, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==BIN_CONST) ) {
						int LA512_48 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 48, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==OCT_CONST) ) {
						int LA512_49 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 49, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==HEX_CONST) ) {
						int LA512_50 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 50, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==LBRACKET) ) {
						int LA512_51 = input.LA(4);
						if ( (synpred58_MFortranParser2018()) ) {
							alt512=1;
						}
						else if ( (synpred59_MFortranParser2018()) ) {
							alt512=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 512, 51, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA512_4==ASTERISK) && (synpred58_MFortranParser2018())) {
						alt512=1;
					}

				}
				else if ( (LA512_2==NOT) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==PLUS) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==MINUS) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==DEFINED_OP) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==IDENT) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==DIGIT_STR) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==CHAR_CONST) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==M_REAL_CONST) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==TRUE) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==FALSE) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==BIN_CONST) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==OCT_CONST) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==HEX_CONST) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==LBRACKET) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}
				else if ( (LA512_2==ASTERISK) && (synpred59_MFortranParser2018())) {
					alt512=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 512, 0, input);
				throw nvae;
			}

			switch (alt512) {
				case 1 :
					// MFortranParser2018.g:5652:7: ( ( label )? READ LPAREN )=> (lbl= label )? READ LPAREN io_control_spec_list RPAREN ( input_item_list )? end_of_stmt
					{
					// MFortranParser2018.g:5653:11: (lbl= label )?
					int alt508=2;
					int LA508_0 = input.LA(1);
					if ( (LA508_0==DIGIT_STR) ) {
						alt508=1;
					}
					switch (alt508) {
						case 1 :
							// MFortranParser2018.g:5653:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_read_stmt23092);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					READ481=(Token)match(input,READ,FOLLOW_READ_in_read_stmt23108); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_read_stmt23110); if (state.failed) return;
					pushFollow(FOLLOW_io_control_spec_list_in_read_stmt23112);
					io_control_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_read_stmt23114); if (state.failed) return;
					// MFortranParser2018.g:5655:11: ( input_item_list )?
					int alt509=2;
					int LA509_0 = input.LA(1);
					if ( (LA509_0==CHAR_CONST||LA509_0==DIGIT_STR||LA509_0==IDENT||LA509_0==LPAREN) ) {
						alt509=1;
					}
					switch (alt509) {
						case 1 :
							// MFortranParser2018.g:5655:13: input_item_list
							{
							pushFollow(FOLLOW_input_item_list_in_read_stmt23128);
							input_item_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasIIL=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_read_stmt23144);
					end_of_stmt482=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.read_stmt(lbl, 
					                  READ481, end_of_stmt482, hasIIL);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:5659:7: ( ( label )? READ )=> (lbl= label )? READ format ( COMMA input_item_list )? end_of_stmt
					{
					// MFortranParser2018.g:5660:11: (lbl= label )?
					int alt510=2;
					int LA510_0 = input.LA(1);
					if ( (LA510_0==DIGIT_STR) ) {
						alt510=1;
					}
					switch (alt510) {
						case 1 :
							// MFortranParser2018.g:5660:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_read_stmt23190);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					READ483=(Token)match(input,READ,FOLLOW_READ_in_read_stmt23206); if (state.failed) return;
					pushFollow(FOLLOW_format_in_read_stmt23208);
					format();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:5662:11: ( COMMA input_item_list )?
					int alt511=2;
					int LA511_0 = input.LA(1);
					if ( (LA511_0==COMMA) ) {
						alt511=1;
					}
					switch (alt511) {
						case 1 :
							// MFortranParser2018.g:5662:13: COMMA input_item_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_read_stmt23223); if (state.failed) return;
							pushFollow(FOLLOW_input_item_list_in_read_stmt23225);
							input_item_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasIIL=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_read_stmt23243);
					end_of_stmt484=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.read_stmt(lbl, 
					                  READ483, end_of_stmt484, hasIIL);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "read_stmt"



	// $ANTLR start "write_stmt"
	// MFortranParser2018.g:5671:1: write_stmt : (lbl= label )? WRITE LPAREN io_control_spec_list RPAREN ( output_item_list )? end_of_stmt ;
	public final void write_stmt() throws RecognitionException {
		Token WRITE485=null;
		Token lbl =null;
		Token end_of_stmt486 =null;


		  boolean hasOIL=false;

		try {
			// MFortranParser2018.g:5678:5: ( (lbl= label )? WRITE LPAREN io_control_spec_list RPAREN ( output_item_list )? end_of_stmt )
			// MFortranParser2018.g:5678:7: (lbl= label )? WRITE LPAREN io_control_spec_list RPAREN ( output_item_list )? end_of_stmt
			{
			// MFortranParser2018.g:5678:7: (lbl= label )?
			int alt513=2;
			int LA513_0 = input.LA(1);
			if ( (LA513_0==DIGIT_STR) ) {
				alt513=1;
			}
			switch (alt513) {
				case 1 :
					// MFortranParser2018.g:5678:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_write_stmt23287);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			WRITE485=(Token)match(input,WRITE,FOLLOW_WRITE_in_write_stmt23298); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_write_stmt23300); if (state.failed) return;
			pushFollow(FOLLOW_io_control_spec_list_in_write_stmt23302);
			io_control_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_write_stmt23304); if (state.failed) return;
			// MFortranParser2018.g:5680:7: ( output_item_list )?
			int alt514=2;
			int LA514_0 = input.LA(1);
			if ( (LA514_0==BIN_CONST||LA514_0==CHAR_CONST||(LA514_0 >= DEFINED_OP && LA514_0 <= DIGIT_STR)||LA514_0==FALSE||(LA514_0 >= HEX_CONST && LA514_0 <= IDENT)||LA514_0==LBRACKET||LA514_0==LPAREN||LA514_0==MINUS||LA514_0==M_REAL_CONST||LA514_0==NOT||LA514_0==OCT_CONST||LA514_0==PLUS||LA514_0==TRUE) ) {
				alt514=1;
			}
			switch (alt514) {
				case 1 :
					// MFortranParser2018.g:5680:9: output_item_list
					{
					pushFollow(FOLLOW_output_item_list_in_write_stmt23314);
					output_item_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasOIL=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_write_stmt23327);
			end_of_stmt486=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.write_stmt(lbl, 
			              WRITE485, end_of_stmt486, hasOIL); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "write_stmt"



	// $ANTLR start "print_stmt"
	// MFortranParser2018.g:5689:1: print_stmt : (lbl= label )? PRINT format ( COMMA output_item_list )? end_of_stmt ;
	public final void print_stmt() throws RecognitionException {
		Token PRINT487=null;
		Token lbl =null;
		Token end_of_stmt488 =null;


		  boolean hasOIL =false;

		try {
			// MFortranParser2018.g:5696:5: ( (lbl= label )? PRINT format ( COMMA output_item_list )? end_of_stmt )
			// MFortranParser2018.g:5696:7: (lbl= label )? PRINT format ( COMMA output_item_list )? end_of_stmt
			{
			// MFortranParser2018.g:5696:7: (lbl= label )?
			int alt515=2;
			int LA515_0 = input.LA(1);
			if ( (LA515_0==DIGIT_STR) ) {
				alt515=1;
			}
			switch (alt515) {
				case 1 :
					// MFortranParser2018.g:5696:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_print_stmt23367);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PRINT487=(Token)match(input,PRINT,FOLLOW_PRINT_in_print_stmt23378); if (state.failed) return;
			pushFollow(FOLLOW_format_in_print_stmt23380);
			format();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5698:7: ( COMMA output_item_list )?
			int alt516=2;
			int LA516_0 = input.LA(1);
			if ( (LA516_0==COMMA) ) {
				alt516=1;
			}
			switch (alt516) {
				case 1 :
					// MFortranParser2018.g:5698:9: COMMA output_item_list
					{
					match(input,COMMA,FOLLOW_COMMA_in_print_stmt23391); if (state.failed) return;
					pushFollow(FOLLOW_output_item_list_in_print_stmt23393);
					output_item_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasOIL=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_print_stmt23406);
			end_of_stmt488=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.print_stmt(lbl, 
			              PRINT487, end_of_stmt488, hasOIL); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "print_stmt"



	// $ANTLR start "io_control_spec"
	// MFortranParser2018.g:5711:1: io_control_spec : ( expr | ASTERISK | IDENT EQUALS ASTERISK | IDENT EQUALS expr );
	public final void io_control_spec() throws RecognitionException {
		Token ASTERISK489=null;
		Token IDENT490=null;
		Token ASTERISK491=null;
		Token IDENT492=null;

		try {
			// MFortranParser2018.g:5712:5: ( expr | ASTERISK | IDENT EQUALS ASTERISK | IDENT EQUALS expr )
			int alt517=4;
			switch ( input.LA(1) ) {
			case BIN_CONST:
			case CHAR_CONST:
			case DEFINED_OP:
			case DIGIT_STR:
			case FALSE:
			case HEX_CONST:
			case LBRACKET:
			case LPAREN:
			case MINUS:
			case M_REAL_CONST:
			case NOT:
			case OCT_CONST:
			case PLUS:
			case TRUE:
				{
				alt517=1;
				}
				break;
			case IDENT:
				{
				int LA517_2 = input.LA(2);
				if ( (LA517_2==AND||LA517_2==ASTERISK||LA517_2==CHAR_CONST||LA517_2==COMMA||LA517_2==DEFINED_OP||LA517_2==EQ||(LA517_2 >= EQV && LA517_2 <= EQ_EQ)||LA517_2==GE||(LA517_2 >= GREATERTHAN && LA517_2 <= GT)||(LA517_2 >= LBRACKET && LA517_2 <= LE)||(LA517_2 >= LESSTHAN && LA517_2 <= LESSTHAN_EQ)||(LA517_2 >= LPAREN && LA517_2 <= LT)||LA517_2==MINUS||(LA517_2 >= NE && LA517_2 <= NEQV)||LA517_2==OR||LA517_2==PERCENT||LA517_2==PLUS||LA517_2==POWER||LA517_2==RPAREN||(LA517_2 >= SLASH && LA517_2 <= SLASH_SLASH)) ) {
					alt517=1;
				}
				else if ( (LA517_2==EQUALS) ) {
					int LA517_4 = input.LA(3);
					if ( (LA517_4==ASTERISK) ) {
						alt517=3;
					}
					else if ( (LA517_4==BIN_CONST||LA517_4==CHAR_CONST||(LA517_4 >= DEFINED_OP && LA517_4 <= DIGIT_STR)||LA517_4==FALSE||(LA517_4 >= HEX_CONST && LA517_4 <= IDENT)||LA517_4==LBRACKET||LA517_4==LPAREN||LA517_4==MINUS||LA517_4==M_REAL_CONST||LA517_4==NOT||LA517_4==OCT_CONST||LA517_4==PLUS||LA517_4==TRUE) ) {
						alt517=4;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 517, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 517, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ASTERISK:
				{
				alt517=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 517, 0, input);
				throw nvae;
			}
			switch (alt517) {
				case 1 :
					// MFortranParser2018.g:5712:7: expr
					{
					pushFollow(FOLLOW_expr_in_io_control_spec23435);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.io_control_spec(null, null); 
					        }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5715:7: ASTERISK
					{
					ASTERISK489=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_io_control_spec23455); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.io_control_spec(null, ASTERISK489); 
					        }
					}
					break;
				case 3 :
					// MFortranParser2018.g:5718:7: IDENT EQUALS ASTERISK
					{
					IDENT490=(Token)match(input,IDENT,FOLLOW_IDENT_in_io_control_spec23475); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_io_control_spec23477); if (state.failed) return;
					ASTERISK491=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_io_control_spec23479); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.io_control_spec(IDENT490, ASTERISK491); 
					        }
					}
					break;
				case 4 :
					// MFortranParser2018.g:5721:7: IDENT EQUALS expr
					{
					IDENT492=(Token)match(input,IDENT,FOLLOW_IDENT_in_io_control_spec23500); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_io_control_spec23502); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_io_control_spec23504);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.io_control_spec(IDENT492, null); 
					        }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_control_spec"



	// $ANTLR start "io_control_spec_list"
	// MFortranParser2018.g:5731:1: io_control_spec_list : io_control_spec ( COMMA io_control_spec )* ;
	public final void io_control_spec_list() throws RecognitionException {

		  int numICS = 1;

		try {
			// MFortranParser2018.g:5738:5: ( io_control_spec ( COMMA io_control_spec )* )
			// MFortranParser2018.g:5738:7: io_control_spec ( COMMA io_control_spec )*
			{
			pushFollow(FOLLOW_io_control_spec_in_io_control_spec_list23601);
			io_control_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5739:7: ( COMMA io_control_spec )*
			loop518:
			while (true) {
				int alt518=2;
				int LA518_0 = input.LA(1);
				if ( (LA518_0==COMMA) ) {
					alt518=1;
				}

				switch (alt518) {
				case 1 :
					// MFortranParser2018.g:5739:9: COMMA io_control_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_io_control_spec_list23611); if (state.failed) return;
					pushFollow(FOLLOW_io_control_spec_in_io_control_spec_list23613);
					io_control_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numICS++;}
					}
					break;

				default :
					break loop518;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.io_control_spec_list(numICS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_control_spec_list"



	// $ANTLR start "format"
	// MFortranParser2018.g:5747:1: format : ( expr |asterisk= ASTERISK );
	public final void format() throws RecognitionException {
		Token asterisk=null;

		try {
			// MFortranParser2018.g:5751:5: ( expr |asterisk= ASTERISK )
			int alt519=2;
			int LA519_0 = input.LA(1);
			if ( (LA519_0==BIN_CONST||LA519_0==CHAR_CONST||(LA519_0 >= DEFINED_OP && LA519_0 <= DIGIT_STR)||LA519_0==FALSE||(LA519_0 >= HEX_CONST && LA519_0 <= IDENT)||LA519_0==LBRACKET||LA519_0==LPAREN||LA519_0==MINUS||LA519_0==M_REAL_CONST||LA519_0==NOT||LA519_0==OCT_CONST||LA519_0==PLUS||LA519_0==TRUE) ) {
				alt519=1;
			}
			else if ( (LA519_0==ASTERISK) ) {
				alt519=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 519, 0, input);
				throw nvae;
			}

			switch (alt519) {
				case 1 :
					// MFortranParser2018.g:5751:7: expr
					{
					pushFollow(FOLLOW_expr_in_format23642);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:5752:7: asterisk= ASTERISK
					{
					asterisk=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_format23652); if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.format(asterisk);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "format"



	// $ANTLR start "input_item"
	// MFortranParser2018.g:5758:1: input_item : ( variable | io_implied_do );
	public final void input_item() throws RecognitionException {
		try {
			// MFortranParser2018.g:5762:5: ( variable | io_implied_do )
			int alt520=2;
			int LA520_0 = input.LA(1);
			if ( (LA520_0==CHAR_CONST||LA520_0==DIGIT_STR||LA520_0==IDENT) ) {
				alt520=1;
			}
			else if ( (LA520_0==LPAREN) ) {
				alt520=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 520, 0, input);
				throw nvae;
			}

			switch (alt520) {
				case 1 :
					// MFortranParser2018.g:5762:7: variable
					{
					pushFollow(FOLLOW_variable_in_input_item23676);
					variable();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:5763:7: io_implied_do
					{
					pushFollow(FOLLOW_io_implied_do_in_input_item23684);
					io_implied_do();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.input_item();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "input_item"



	// $ANTLR start "input_item_list"
	// MFortranParser2018.g:5766:1: input_item_list : input_item ( COMMA input_item )* ;
	public final void input_item_list() throws RecognitionException {

		  int numII = 1;

		try {
			// MFortranParser2018.g:5773:5: ( input_item ( COMMA input_item )* )
			// MFortranParser2018.g:5773:7: input_item ( COMMA input_item )*
			{
			pushFollow(FOLLOW_input_item_in_input_item_list23709);
			input_item();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5774:7: ( COMMA input_item )*
			loop521:
			while (true) {
				int alt521=2;
				int LA521_0 = input.LA(1);
				if ( (LA521_0==COMMA) ) {
					alt521=1;
				}

				switch (alt521) {
				case 1 :
					// MFortranParser2018.g:5774:9: COMMA input_item
					{
					match(input,COMMA,FOLLOW_COMMA_in_input_item_list23719); if (state.failed) return;
					pushFollow(FOLLOW_input_item_in_input_item_list23721);
					input_item();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numII++;}
					}
					break;

				default :
					break loop521;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.input_item_list(numII);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "input_item_list"



	// $ANTLR start "output_item"
	// MFortranParser2018.g:5780:1: output_item options {backtrack=true; } : ( expr | io_implied_do );
	public final void output_item() throws RecognitionException {
		try {
			// MFortranParser2018.g:5785:5: ( expr | io_implied_do )
			int alt522=2;
			int LA522_0 = input.LA(1);
			if ( (LA522_0==BIN_CONST||LA522_0==CHAR_CONST||(LA522_0 >= DEFINED_OP && LA522_0 <= DIGIT_STR)||LA522_0==FALSE||(LA522_0 >= HEX_CONST && LA522_0 <= IDENT)||LA522_0==LBRACKET||LA522_0==MINUS||LA522_0==M_REAL_CONST||LA522_0==NOT||LA522_0==OCT_CONST||LA522_0==PLUS||LA522_0==TRUE) ) {
				alt522=1;
			}
			else if ( (LA522_0==LPAREN) ) {
				int LA522_9 = input.LA(2);
				if ( (synpred60_MFortranParser2018()) ) {
					alt522=1;
				}
				else if ( (true) ) {
					alt522=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 522, 0, input);
				throw nvae;
			}

			switch (alt522) {
				case 1 :
					// MFortranParser2018.g:5785:7: expr
					{
					pushFollow(FOLLOW_expr_in_output_item23756);
					expr();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:5786:7: io_implied_do
					{
					pushFollow(FOLLOW_io_implied_do_in_output_item23764);
					io_implied_do();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.output_item();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "output_item"



	// $ANTLR start "output_item_list"
	// MFortranParser2018.g:5789:1: output_item_list : output_item ( COMMA output_item )* ;
	public final void output_item_list() throws RecognitionException {

		  int numOI = 1;

		try {
			// MFortranParser2018.g:5796:5: ( output_item ( COMMA output_item )* )
			// MFortranParser2018.g:5796:7: output_item ( COMMA output_item )*
			{
			pushFollow(FOLLOW_output_item_in_output_item_list23789);
			output_item();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5797:7: ( COMMA output_item )*
			loop523:
			while (true) {
				int alt523=2;
				int LA523_0 = input.LA(1);
				if ( (LA523_0==COMMA) ) {
					alt523=1;
				}

				switch (alt523) {
				case 1 :
					// MFortranParser2018.g:5797:9: COMMA output_item
					{
					match(input,COMMA,FOLLOW_COMMA_in_output_item_list23799); if (state.failed) return;
					pushFollow(FOLLOW_output_item_in_output_item_list23801);
					output_item();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numOI++;}
					}
					break;

				default :
					break loop523;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.output_item_list(numOI);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "output_item_list"



	// $ANTLR start "io_implied_do"
	// MFortranParser2018.g:5803:1: io_implied_do : LPAREN io_implied_do_object io_implied_do_suffix RPAREN ;
	public final void io_implied_do() throws RecognitionException {
		try {
			// MFortranParser2018.g:5804:5: ( LPAREN io_implied_do_object io_implied_do_suffix RPAREN )
			// MFortranParser2018.g:5804:7: LPAREN io_implied_do_object io_implied_do_suffix RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_io_implied_do23825); if (state.failed) return;
			pushFollow(FOLLOW_io_implied_do_object_in_io_implied_do23827);
			io_implied_do_object();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_io_implied_do_suffix_in_io_implied_do23829);
			io_implied_do_suffix();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_io_implied_do23831); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.io_implied_do(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_implied_do"



	// $ANTLR start "io_implied_do_object"
	// MFortranParser2018.g:5812:1: io_implied_do_object : output_item ;
	public final void io_implied_do_object() throws RecognitionException {
		try {
			// MFortranParser2018.g:5813:5: ( output_item )
			// MFortranParser2018.g:5813:7: output_item
			{
			pushFollow(FOLLOW_output_item_in_io_implied_do_object23860);
			output_item();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.io_implied_do_object(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_implied_do_object"



	// $ANTLR start "io_implied_do_suffix"
	// MFortranParser2018.g:5817:1: io_implied_do_suffix options {backtrack=true; } : ( COMMA io_implied_do_object io_implied_do_suffix | COMMA io_implied_do_control );
	public final void io_implied_do_suffix() throws RecognitionException {
		try {
			// MFortranParser2018.g:5819:5: ( COMMA io_implied_do_object io_implied_do_suffix | COMMA io_implied_do_control )
			int alt524=2;
			int LA524_0 = input.LA(1);
			if ( (LA524_0==COMMA) ) {
				int LA524_1 = input.LA(2);
				if ( (LA524_1==BIN_CONST||LA524_1==CHAR_CONST||(LA524_1 >= DEFINED_OP && LA524_1 <= DIGIT_STR)||LA524_1==FALSE||LA524_1==HEX_CONST||LA524_1==LBRACKET||LA524_1==LPAREN||LA524_1==MINUS||LA524_1==M_REAL_CONST||LA524_1==NOT||LA524_1==OCT_CONST||LA524_1==PLUS||LA524_1==TRUE) ) {
					alt524=1;
				}
				else if ( (LA524_1==IDENT) ) {
					int LA524_3 = input.LA(3);
					if ( (LA524_3==AND||LA524_3==ASTERISK||LA524_3==CHAR_CONST||LA524_3==COMMA||LA524_3==DEFINED_OP||LA524_3==EQ||(LA524_3 >= EQV && LA524_3 <= EQ_EQ)||LA524_3==GE||(LA524_3 >= GREATERTHAN && LA524_3 <= GT)||(LA524_3 >= LBRACKET && LA524_3 <= LE)||(LA524_3 >= LESSTHAN && LA524_3 <= LESSTHAN_EQ)||(LA524_3 >= LPAREN && LA524_3 <= LT)||LA524_3==MINUS||(LA524_3 >= NE && LA524_3 <= NEQV)||LA524_3==OR||LA524_3==PERCENT||LA524_3==PLUS||LA524_3==POWER||(LA524_3 >= SLASH && LA524_3 <= SLASH_SLASH)) ) {
						alt524=1;
					}
					else if ( (LA524_3==EQUALS) ) {
						alt524=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 524, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 524, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 524, 0, input);
				throw nvae;
			}

			switch (alt524) {
				case 1 :
					// MFortranParser2018.g:5819:7: COMMA io_implied_do_object io_implied_do_suffix
					{
					match(input,COMMA,FOLLOW_COMMA_in_io_implied_do_suffix23893); if (state.failed) return;
					pushFollow(FOLLOW_io_implied_do_object_in_io_implied_do_suffix23895);
					io_implied_do_object();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_io_implied_do_suffix_in_io_implied_do_suffix23897);
					io_implied_do_suffix();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:5820:7: COMMA io_implied_do_control
					{
					match(input,COMMA,FOLLOW_COMMA_in_io_implied_do_suffix23905); if (state.failed) return;
					pushFollow(FOLLOW_io_implied_do_control_in_io_implied_do_suffix23907);
					io_implied_do_control();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_implied_do_suffix"



	// $ANTLR start "io_implied_do_control"
	// MFortranParser2018.g:5827:1: io_implied_do_control : IDENT EQUALS expr COMMA expr ( COMMA expr )? ;
	public final void io_implied_do_control() throws RecognitionException {
		Token IDENT493=null;


		  boolean hasStrd=false;

		try {
			// MFortranParser2018.g:5831:5: ( IDENT EQUALS expr COMMA expr ( COMMA expr )? )
			// MFortranParser2018.g:5831:7: IDENT EQUALS expr COMMA expr ( COMMA expr )?
			{
			IDENT493=(Token)match(input,IDENT,FOLLOW_IDENT_in_io_implied_do_control23930); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_io_implied_do_control23932); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_io_implied_do_control23934);
			expr();
			state._fsp--;
			if (state.failed) return;
			match(input,COMMA,FOLLOW_COMMA_in_io_implied_do_control23936); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_io_implied_do_control23938);
			expr();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5832:7: ( COMMA expr )?
			int alt525=2;
			int LA525_0 = input.LA(1);
			if ( (LA525_0==COMMA) ) {
				alt525=1;
			}
			switch (alt525) {
				case 1 :
					// MFortranParser2018.g:5832:9: COMMA expr
					{
					match(input,COMMA,FOLLOW_COMMA_in_io_implied_do_control23949); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_io_implied_do_control23951);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasStrd=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.io_implied_do_control(IDENT493, hasStrd); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "io_implied_do_control"



	// $ANTLR start "dtv_type_spec"
	// MFortranParser2018.g:5840:1: dtv_type_spec : ( TYPE LPAREN derived_type_spec RPAREN | CLASS LPAREN derived_type_spec RPAREN );
	public final void dtv_type_spec() throws RecognitionException {
		Token TYPE494=null;
		Token CLASS495=null;

		try {
			// MFortranParser2018.g:5841:5: ( TYPE LPAREN derived_type_spec RPAREN | CLASS LPAREN derived_type_spec RPAREN )
			int alt526=2;
			int LA526_0 = input.LA(1);
			if ( (LA526_0==TYPE) ) {
				alt526=1;
			}
			else if ( (LA526_0==CLASS) ) {
				alt526=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 526, 0, input);
				throw nvae;
			}

			switch (alt526) {
				case 1 :
					// MFortranParser2018.g:5841:7: TYPE LPAREN derived_type_spec RPAREN
					{
					TYPE494=(Token)match(input,TYPE,FOLLOW_TYPE_in_dtv_type_spec23985); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_dtv_type_spec23987); if (state.failed) return;
					pushFollow(FOLLOW_derived_type_spec_in_dtv_type_spec23989);
					derived_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_dtv_type_spec23991); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.dtv_type_spec(TYPE494); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5843:7: CLASS LPAREN derived_type_spec RPAREN
					{
					CLASS495=(Token)match(input,CLASS,FOLLOW_CLASS_in_dtv_type_spec24009); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_dtv_type_spec24011); if (state.failed) return;
					pushFollow(FOLLOW_derived_type_spec_in_dtv_type_spec24013);
					derived_type_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_dtv_type_spec24015); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.dtv_type_spec(CLASS495); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dtv_type_spec"



	// $ANTLR start "wait_stmt"
	// MFortranParser2018.g:5850:1: wait_stmt : (lbl= label )? WAIT LPAREN wait_spec_list RPAREN end_of_stmt ;
	public final void wait_stmt() throws RecognitionException {
		Token WAIT496=null;
		Token lbl =null;
		Token end_of_stmt497 =null;



		try {
			// MFortranParser2018.g:5856:5: ( (lbl= label )? WAIT LPAREN wait_spec_list RPAREN end_of_stmt )
			// MFortranParser2018.g:5856:7: (lbl= label )? WAIT LPAREN wait_spec_list RPAREN end_of_stmt
			{
			// MFortranParser2018.g:5856:7: (lbl= label )?
			int alt527=2;
			int LA527_0 = input.LA(1);
			if ( (LA527_0==DIGIT_STR) ) {
				alt527=1;
			}
			switch (alt527) {
				case 1 :
					// MFortranParser2018.g:5856:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_wait_stmt24055);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			WAIT496=(Token)match(input,WAIT,FOLLOW_WAIT_in_wait_stmt24067); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_wait_stmt24069); if (state.failed) return;
			pushFollow(FOLLOW_wait_spec_list_in_wait_stmt24071);
			wait_spec_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_wait_stmt24073); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_wait_stmt24081);
			end_of_stmt497=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.wait_stmt(lbl, 
			              WAIT496, end_of_stmt497); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "wait_stmt"



	// $ANTLR start "wait_spec"
	// MFortranParser2018.g:5869:1: wait_spec : ( expr | IDENT EQUALS expr );
	public final void wait_spec() throws RecognitionException {
		Token IDENT498=null;

		try {
			// MFortranParser2018.g:5870:5: ( expr | IDENT EQUALS expr )
			int alt528=2;
			int LA528_0 = input.LA(1);
			if ( (LA528_0==BIN_CONST||LA528_0==CHAR_CONST||(LA528_0 >= DEFINED_OP && LA528_0 <= DIGIT_STR)||LA528_0==FALSE||LA528_0==HEX_CONST||LA528_0==LBRACKET||LA528_0==LPAREN||LA528_0==MINUS||LA528_0==M_REAL_CONST||LA528_0==NOT||LA528_0==OCT_CONST||LA528_0==PLUS||LA528_0==TRUE) ) {
				alt528=1;
			}
			else if ( (LA528_0==IDENT) ) {
				int LA528_2 = input.LA(2);
				if ( (LA528_2==AND||LA528_2==ASTERISK||LA528_2==CHAR_CONST||LA528_2==COMMA||LA528_2==DEFINED_OP||LA528_2==EQ||(LA528_2 >= EQV && LA528_2 <= EQ_EQ)||LA528_2==GE||(LA528_2 >= GREATERTHAN && LA528_2 <= GT)||(LA528_2 >= LBRACKET && LA528_2 <= LE)||(LA528_2 >= LESSTHAN && LA528_2 <= LESSTHAN_EQ)||(LA528_2 >= LPAREN && LA528_2 <= LT)||LA528_2==MINUS||(LA528_2 >= NE && LA528_2 <= NEQV)||LA528_2==OR||LA528_2==PERCENT||LA528_2==PLUS||LA528_2==POWER||LA528_2==RPAREN||(LA528_2 >= SLASH && LA528_2 <= SLASH_SLASH)) ) {
					alt528=1;
				}
				else if ( (LA528_2==EQUALS) ) {
					alt528=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 528, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 528, 0, input);
				throw nvae;
			}

			switch (alt528) {
				case 1 :
					// MFortranParser2018.g:5870:7: expr
					{
					pushFollow(FOLLOW_expr_in_wait_spec24110);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.wait_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5872:7: IDENT EQUALS expr
					{
					IDENT498=(Token)match(input,IDENT,FOLLOW_IDENT_in_wait_spec24128); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_wait_spec24130); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_wait_spec24132);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.wait_spec(IDENT498); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "wait_spec"



	// $ANTLR start "wait_spec_list"
	// MFortranParser2018.g:5876:1: wait_spec_list : wait_spec ( COMMA wait_spec )* ;
	public final void wait_spec_list() throws RecognitionException {

		  int numWS = 1;

		try {
			// MFortranParser2018.g:5883:5: ( wait_spec ( COMMA wait_spec )* )
			// MFortranParser2018.g:5883:7: wait_spec ( COMMA wait_spec )*
			{
			pushFollow(FOLLOW_wait_spec_in_wait_spec_list24167);
			wait_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5884:7: ( COMMA wait_spec )*
			loop529:
			while (true) {
				int alt529=2;
				int LA529_0 = input.LA(1);
				if ( (LA529_0==COMMA) ) {
					alt529=1;
				}

				switch (alt529) {
				case 1 :
					// MFortranParser2018.g:5884:9: COMMA wait_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_wait_spec_list24177); if (state.failed) return;
					pushFollow(FOLLOW_wait_spec_in_wait_spec_list24179);
					wait_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numWS++;}
					}
					break;

				default :
					break loop529;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.wait_spec_list(numWS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "wait_spec_list"



	// $ANTLR start "backspace_stmt"
	// MFortranParser2018.g:5890:1: backspace_stmt options {k=3; } : ( ( ( label )? BACKSPACE LPAREN )=> (lbl= label )? BACKSPACE LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? BACKSPACE )=> (lbl= label )? BACKSPACE file_unit_number end_of_stmt );
	public final void backspace_stmt() throws RecognitionException {
		Token BACKSPACE499=null;
		Token BACKSPACE501=null;
		Token lbl =null;
		Token end_of_stmt500 =null;
		Token end_of_stmt502 =null;



		try {
			// MFortranParser2018.g:5897:5: ( ( ( label )? BACKSPACE LPAREN )=> (lbl= label )? BACKSPACE LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? BACKSPACE )=> (lbl= label )? BACKSPACE file_unit_number end_of_stmt )
			int alt532=2;
			int LA532_0 = input.LA(1);
			if ( (LA532_0==DIGIT_STR) ) {
				int LA532_1 = input.LA(2);
				if ( (LA532_1==BACKSPACE) ) {
					int LA532_3 = input.LA(3);
					if ( (LA532_3==LPAREN) ) {
						int LA532_19 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 19, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_3==NOT) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==PLUS) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==MINUS) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==DEFINED_OP) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==IDENT) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==DIGIT_STR) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==CHAR_CONST) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==M_REAL_CONST) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==TRUE) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==FALSE) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==BIN_CONST) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==OCT_CONST) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==HEX_CONST) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_3==LBRACKET) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 532, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA532_0==BACKSPACE) ) {
				int LA532_2 = input.LA(2);
				if ( (LA532_2==LPAREN) ) {
					int LA532_4 = input.LA(3);
					if ( (LA532_4==SLASH) && (synpred63_MFortranParser2018())) {
						alt532=2;
					}
					else if ( (LA532_4==NOT) ) {
						int LA532_35 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 35, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==PLUS) ) {
						int LA532_36 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 36, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==MINUS) ) {
						int LA532_37 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 37, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==DEFINED_OP) ) {
						int LA532_38 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 38, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==IDENT) ) {
						int LA532_39 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 39, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==DIGIT_STR) ) {
						int LA532_40 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 40, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==CHAR_CONST) ) {
						int LA532_41 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 41, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==M_REAL_CONST) ) {
						int LA532_42 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 42, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==LPAREN) ) {
						int LA532_43 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 43, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==TRUE) ) {
						int LA532_44 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 44, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==FALSE) ) {
						int LA532_45 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 45, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==BIN_CONST) ) {
						int LA532_46 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 46, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==OCT_CONST) ) {
						int LA532_47 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 47, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==HEX_CONST) ) {
						int LA532_48 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 48, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA532_4==LBRACKET) ) {
						int LA532_49 = input.LA(4);
						if ( (synpred62_MFortranParser2018()) ) {
							alt532=1;
						}
						else if ( (synpred63_MFortranParser2018()) ) {
							alt532=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 532, 49, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 532, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA532_2==NOT) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==PLUS) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==MINUS) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==DEFINED_OP) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==IDENT) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==DIGIT_STR) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==CHAR_CONST) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==M_REAL_CONST) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==TRUE) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==FALSE) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==BIN_CONST) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==OCT_CONST) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==HEX_CONST) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}
				else if ( (LA532_2==LBRACKET) && (synpred63_MFortranParser2018())) {
					alt532=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 532, 0, input);
				throw nvae;
			}

			switch (alt532) {
				case 1 :
					// MFortranParser2018.g:5897:7: ( ( label )? BACKSPACE LPAREN )=> (lbl= label )? BACKSPACE LPAREN position_spec_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5898:11: (lbl= label )?
					int alt530=2;
					int LA530_0 = input.LA(1);
					if ( (LA530_0==DIGIT_STR) ) {
						alt530=1;
					}
					switch (alt530) {
						case 1 :
							// MFortranParser2018.g:5898:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_backspace_stmt24244);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					BACKSPACE499=(Token)match(input,BACKSPACE,FOLLOW_BACKSPACE_in_backspace_stmt24260); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_backspace_stmt24262); if (state.failed) return;
					pushFollow(FOLLOW_position_spec_list_in_backspace_stmt24264);
					position_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_backspace_stmt24266); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_backspace_stmt24278);
					end_of_stmt500=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.backspace_stmt(lbl, 
					                  BACKSPACE499, end_of_stmt500, true);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:5903:7: ( ( label )? BACKSPACE )=> (lbl= label )? BACKSPACE file_unit_number end_of_stmt
					{
					// MFortranParser2018.g:5904:11: (lbl= label )?
					int alt531=2;
					int LA531_0 = input.LA(1);
					if ( (LA531_0==DIGIT_STR) ) {
						alt531=1;
					}
					switch (alt531) {
						case 1 :
							// MFortranParser2018.g:5904:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_backspace_stmt24324);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					BACKSPACE501=(Token)match(input,BACKSPACE,FOLLOW_BACKSPACE_in_backspace_stmt24340); if (state.failed) return;
					pushFollow(FOLLOW_file_unit_number_in_backspace_stmt24342);
					file_unit_number();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_backspace_stmt24355);
					end_of_stmt502=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.backspace_stmt(lbl, 
					                  BACKSPACE501, end_of_stmt502, false);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "backspace_stmt"



	// $ANTLR start "endfile_stmt"
	// MFortranParser2018.g:5914:1: endfile_stmt options {k=3; } : ( ( ( label )? END FILE LPAREN )=> (lbl= label )? END FILE LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? END FILE )=> (lbl= label )? END FILE file_unit_number end_of_stmt );
	public final void endfile_stmt() throws RecognitionException {
		Token END503=null;
		Token FILE504=null;
		Token END506=null;
		Token FILE507=null;
		Token lbl =null;
		Token end_of_stmt505 =null;
		Token end_of_stmt508 =null;



		try {
			// MFortranParser2018.g:5921:5: ( ( ( label )? END FILE LPAREN )=> (lbl= label )? END FILE LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? END FILE )=> (lbl= label )? END FILE file_unit_number end_of_stmt )
			int alt535=2;
			int LA535_0 = input.LA(1);
			if ( (LA535_0==DIGIT_STR) ) {
				int LA535_1 = input.LA(2);
				if ( (LA535_1==END) ) {
					int LA535_3 = input.LA(3);
					if ( (LA535_3==FILE) ) {
						int LA535_5 = input.LA(4);
						if ( (synpred64_MFortranParser2018()) ) {
							alt535=1;
						}
						else if ( (synpred65_MFortranParser2018()) ) {
							alt535=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 535, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 535, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 535, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA535_0==END) ) {
				int LA535_2 = input.LA(2);
				if ( (LA535_2==FILE) ) {
					int LA535_4 = input.LA(3);
					if ( (LA535_4==LPAREN) ) {
						int LA535_6 = input.LA(4);
						if ( (synpred64_MFortranParser2018()) ) {
							alt535=1;
						}
						else if ( (synpred65_MFortranParser2018()) ) {
							alt535=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 535, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA535_4==NOT) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==PLUS) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==MINUS) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==DEFINED_OP) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==IDENT) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==DIGIT_STR) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==CHAR_CONST) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==M_REAL_CONST) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==TRUE) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==FALSE) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==BIN_CONST) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==OCT_CONST) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==HEX_CONST) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}
					else if ( (LA535_4==LBRACKET) && (synpred65_MFortranParser2018())) {
						alt535=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 535, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 535, 0, input);
				throw nvae;
			}

			switch (alt535) {
				case 1 :
					// MFortranParser2018.g:5921:7: ( ( label )? END FILE LPAREN )=> (lbl= label )? END FILE LPAREN position_spec_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5922:11: (lbl= label )?
					int alt533=2;
					int LA533_0 = input.LA(1);
					if ( (LA533_0==DIGIT_STR) ) {
						alt533=1;
					}
					switch (alt533) {
						case 1 :
							// MFortranParser2018.g:5922:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_endfile_stmt24431);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END503=(Token)match(input,END,FOLLOW_END_in_endfile_stmt24447); if (state.failed) return;
					FILE504=(Token)match(input,FILE,FOLLOW_FILE_in_endfile_stmt24449); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_endfile_stmt24451); if (state.failed) return;
					pushFollow(FOLLOW_position_spec_list_in_endfile_stmt24453);
					position_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_endfile_stmt24455); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_endfile_stmt24468);
					end_of_stmt505=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.endfile_stmt(lbl, 
					                  END503, FILE504, end_of_stmt505, true);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:5927:7: ( ( label )? END FILE )=> (lbl= label )? END FILE file_unit_number end_of_stmt
					{
					// MFortranParser2018.g:5928:11: (lbl= label )?
					int alt534=2;
					int LA534_0 = input.LA(1);
					if ( (LA534_0==DIGIT_STR) ) {
						alt534=1;
					}
					switch (alt534) {
						case 1 :
							// MFortranParser2018.g:5928:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_endfile_stmt24517);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END506=(Token)match(input,END,FOLLOW_END_in_endfile_stmt24533); if (state.failed) return;
					FILE507=(Token)match(input,FILE,FOLLOW_FILE_in_endfile_stmt24535); if (state.failed) return;
					pushFollow(FOLLOW_file_unit_number_in_endfile_stmt24537);
					file_unit_number();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_endfile_stmt24550);
					end_of_stmt508=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.endfile_stmt(lbl, 
					                  END506, FILE507, end_of_stmt508, false);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "endfile_stmt"



	// $ANTLR start "rewind_stmt"
	// MFortranParser2018.g:5938:1: rewind_stmt options {k=3; } : ( ( ( label )? REWIND LPAREN )=> (lbl= label )? REWIND LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? REWIND )=> (lbl= label )? REWIND file_unit_number end_of_stmt );
	public final void rewind_stmt() throws RecognitionException {
		Token REWIND509=null;
		Token REWIND511=null;
		Token lbl =null;
		Token end_of_stmt510 =null;
		Token end_of_stmt512 =null;



		try {
			// MFortranParser2018.g:5945:5: ( ( ( label )? REWIND LPAREN )=> (lbl= label )? REWIND LPAREN position_spec_list RPAREN end_of_stmt | ( ( label )? REWIND )=> (lbl= label )? REWIND file_unit_number end_of_stmt )
			int alt538=2;
			int LA538_0 = input.LA(1);
			if ( (LA538_0==DIGIT_STR) ) {
				int LA538_1 = input.LA(2);
				if ( (LA538_1==REWIND) ) {
					int LA538_3 = input.LA(3);
					if ( (LA538_3==LPAREN) ) {
						int LA538_19 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 19, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_3==NOT) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==PLUS) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==MINUS) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==DEFINED_OP) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==IDENT) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==DIGIT_STR) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==CHAR_CONST) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==M_REAL_CONST) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==TRUE) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==FALSE) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==BIN_CONST) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==OCT_CONST) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==HEX_CONST) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_3==LBRACKET) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 538, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA538_0==REWIND) ) {
				int LA538_2 = input.LA(2);
				if ( (LA538_2==LPAREN) ) {
					int LA538_4 = input.LA(3);
					if ( (LA538_4==SLASH) && (synpred67_MFortranParser2018())) {
						alt538=2;
					}
					else if ( (LA538_4==NOT) ) {
						int LA538_35 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 35, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==PLUS) ) {
						int LA538_36 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 36, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==MINUS) ) {
						int LA538_37 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 37, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==DEFINED_OP) ) {
						int LA538_38 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 38, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==IDENT) ) {
						int LA538_39 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 39, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==DIGIT_STR) ) {
						int LA538_40 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 40, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==CHAR_CONST) ) {
						int LA538_41 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 41, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==M_REAL_CONST) ) {
						int LA538_42 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 42, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==LPAREN) ) {
						int LA538_43 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 43, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==TRUE) ) {
						int LA538_44 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 44, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==FALSE) ) {
						int LA538_45 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 45, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==BIN_CONST) ) {
						int LA538_46 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 46, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==OCT_CONST) ) {
						int LA538_47 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 47, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==HEX_CONST) ) {
						int LA538_48 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 48, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA538_4==LBRACKET) ) {
						int LA538_49 = input.LA(4);
						if ( (synpred66_MFortranParser2018()) ) {
							alt538=1;
						}
						else if ( (synpred67_MFortranParser2018()) ) {
							alt538=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 538, 49, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 538, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA538_2==NOT) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==PLUS) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==MINUS) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==DEFINED_OP) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==IDENT) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==DIGIT_STR) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==CHAR_CONST) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==M_REAL_CONST) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==TRUE) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==FALSE) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==BIN_CONST) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==OCT_CONST) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==HEX_CONST) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}
				else if ( (LA538_2==LBRACKET) && (synpred67_MFortranParser2018())) {
					alt538=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 538, 0, input);
				throw nvae;
			}

			switch (alt538) {
				case 1 :
					// MFortranParser2018.g:5945:7: ( ( label )? REWIND LPAREN )=> (lbl= label )? REWIND LPAREN position_spec_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5946:11: (lbl= label )?
					int alt536=2;
					int LA536_0 = input.LA(1);
					if ( (LA536_0==DIGIT_STR) ) {
						alt536=1;
					}
					switch (alt536) {
						case 1 :
							// MFortranParser2018.g:5946:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_rewind_stmt24625);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					REWIND509=(Token)match(input,REWIND,FOLLOW_REWIND_in_rewind_stmt24641); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_rewind_stmt24643); if (state.failed) return;
					pushFollow(FOLLOW_position_spec_list_in_rewind_stmt24645);
					position_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_rewind_stmt24647); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_rewind_stmt24660);
					end_of_stmt510=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.rewind_stmt(lbl, 
					                  REWIND509, end_of_stmt510, true);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:5951:7: ( ( label )? REWIND )=> (lbl= label )? REWIND file_unit_number end_of_stmt
					{
					// MFortranParser2018.g:5952:11: (lbl= label )?
					int alt537=2;
					int LA537_0 = input.LA(1);
					if ( (LA537_0==DIGIT_STR) ) {
						alt537=1;
					}
					switch (alt537) {
						case 1 :
							// MFortranParser2018.g:5952:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_rewind_stmt24706);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					REWIND511=(Token)match(input,REWIND,FOLLOW_REWIND_in_rewind_stmt24721); if (state.failed) return;
					pushFollow(FOLLOW_file_unit_number_in_rewind_stmt24723);
					file_unit_number();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_rewind_stmt24736);
					end_of_stmt512=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.rewind_stmt(lbl,
					                  REWIND511, end_of_stmt512, false);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "rewind_stmt"



	// $ANTLR start "position_spec"
	// MFortranParser2018.g:5965:1: position_spec : ( expr | IDENT EQUALS expr );
	public final void position_spec() throws RecognitionException {
		Token IDENT513=null;

		try {
			// MFortranParser2018.g:5966:5: ( expr | IDENT EQUALS expr )
			int alt539=2;
			int LA539_0 = input.LA(1);
			if ( (LA539_0==BIN_CONST||LA539_0==CHAR_CONST||(LA539_0 >= DEFINED_OP && LA539_0 <= DIGIT_STR)||LA539_0==FALSE||LA539_0==HEX_CONST||LA539_0==LBRACKET||LA539_0==LPAREN||LA539_0==MINUS||LA539_0==M_REAL_CONST||LA539_0==NOT||LA539_0==OCT_CONST||LA539_0==PLUS||LA539_0==TRUE) ) {
				alt539=1;
			}
			else if ( (LA539_0==IDENT) ) {
				int LA539_2 = input.LA(2);
				if ( (LA539_2==AND||LA539_2==ASTERISK||LA539_2==CHAR_CONST||LA539_2==COMMA||LA539_2==DEFINED_OP||LA539_2==EQ||(LA539_2 >= EQV && LA539_2 <= EQ_EQ)||LA539_2==GE||(LA539_2 >= GREATERTHAN && LA539_2 <= GT)||(LA539_2 >= LBRACKET && LA539_2 <= LE)||(LA539_2 >= LESSTHAN && LA539_2 <= LESSTHAN_EQ)||(LA539_2 >= LPAREN && LA539_2 <= LT)||LA539_2==MINUS||(LA539_2 >= NE && LA539_2 <= NEQV)||LA539_2==OR||LA539_2==PERCENT||LA539_2==PLUS||LA539_2==POWER||LA539_2==RPAREN||(LA539_2 >= SLASH && LA539_2 <= SLASH_SLASH)) ) {
					alt539=1;
				}
				else if ( (LA539_2==EQUALS) ) {
					alt539=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 539, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 539, 0, input);
				throw nvae;
			}

			switch (alt539) {
				case 1 :
					// MFortranParser2018.g:5966:7: expr
					{
					pushFollow(FOLLOW_expr_in_position_spec24769);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.position_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5968:7: IDENT EQUALS expr
					{
					IDENT513=(Token)match(input,IDENT,FOLLOW_IDENT_in_position_spec24787); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_position_spec24789); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_position_spec24791);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.position_spec(IDENT513); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "position_spec"



	// $ANTLR start "position_spec_list"
	// MFortranParser2018.g:5972:1: position_spec_list : position_spec ( COMMA position_spec )* ;
	public final void position_spec_list() throws RecognitionException {

		  int numPS = 1;

		try {
			// MFortranParser2018.g:5979:5: ( position_spec ( COMMA position_spec )* )
			// MFortranParser2018.g:5979:7: position_spec ( COMMA position_spec )*
			{
			pushFollow(FOLLOW_position_spec_in_position_spec_list24826);
			position_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:5980:7: ( COMMA position_spec )*
			loop540:
			while (true) {
				int alt540=2;
				int LA540_0 = input.LA(1);
				if ( (LA540_0==COMMA) ) {
					alt540=1;
				}

				switch (alt540) {
				case 1 :
					// MFortranParser2018.g:5980:9: COMMA position_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_position_spec_list24837); if (state.failed) return;
					pushFollow(FOLLOW_position_spec_in_position_spec_list24839);
					position_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPS++;}
					}
					break;

				default :
					break loop540;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.position_spec_list(numPS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "position_spec_list"



	// $ANTLR start "flush_stmt"
	// MFortranParser2018.g:5986:1: flush_stmt options {k=3; } : ( ( ( label )? FLUSH LPAREN )=> (lbl= label )? FLUSH LPAREN flush_spec_list RPAREN end_of_stmt | ( ( label )? FLUSH )=> (lbl= label )? FLUSH file_unit_number end_of_stmt );
	public final void flush_stmt() throws RecognitionException {
		Token FLUSH514=null;
		Token FLUSH516=null;
		Token lbl =null;
		Token end_of_stmt515 =null;
		Token end_of_stmt517 =null;

		try {
			// MFortranParser2018.g:5991:5: ( ( ( label )? FLUSH LPAREN )=> (lbl= label )? FLUSH LPAREN flush_spec_list RPAREN end_of_stmt | ( ( label )? FLUSH )=> (lbl= label )? FLUSH file_unit_number end_of_stmt )
			int alt543=2;
			int LA543_0 = input.LA(1);
			if ( (LA543_0==DIGIT_STR) ) {
				int LA543_1 = input.LA(2);
				if ( (LA543_1==FLUSH) ) {
					int LA543_3 = input.LA(3);
					if ( (LA543_3==LPAREN) ) {
						int LA543_19 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 19, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_3==NOT) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==PLUS) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==MINUS) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==DEFINED_OP) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==IDENT) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==DIGIT_STR) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==CHAR_CONST) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==M_REAL_CONST) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==TRUE) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==FALSE) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==BIN_CONST) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==OCT_CONST) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==HEX_CONST) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_3==LBRACKET) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 543, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA543_0==FLUSH) ) {
				int LA543_2 = input.LA(2);
				if ( (LA543_2==LPAREN) ) {
					int LA543_4 = input.LA(3);
					if ( (LA543_4==SLASH) && (synpred69_MFortranParser2018())) {
						alt543=2;
					}
					else if ( (LA543_4==NOT) ) {
						int LA543_35 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 35, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==PLUS) ) {
						int LA543_36 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 36, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==MINUS) ) {
						int LA543_37 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 37, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==DEFINED_OP) ) {
						int LA543_38 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 38, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==IDENT) ) {
						int LA543_39 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 39, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==DIGIT_STR) ) {
						int LA543_40 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 40, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==CHAR_CONST) ) {
						int LA543_41 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 41, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==M_REAL_CONST) ) {
						int LA543_42 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 42, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==LPAREN) ) {
						int LA543_43 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 43, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==TRUE) ) {
						int LA543_44 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 44, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==FALSE) ) {
						int LA543_45 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 45, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==BIN_CONST) ) {
						int LA543_46 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 46, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==OCT_CONST) ) {
						int LA543_47 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 47, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==HEX_CONST) ) {
						int LA543_48 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 48, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA543_4==LBRACKET) ) {
						int LA543_49 = input.LA(4);
						if ( (synpred68_MFortranParser2018()) ) {
							alt543=1;
						}
						else if ( (synpred69_MFortranParser2018()) ) {
							alt543=2;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 543, 49, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 543, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}
				else if ( (LA543_2==NOT) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==PLUS) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==MINUS) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==DEFINED_OP) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==IDENT) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==DIGIT_STR) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==CHAR_CONST) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==M_REAL_CONST) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==TRUE) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==FALSE) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==BIN_CONST) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==OCT_CONST) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==HEX_CONST) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}
				else if ( (LA543_2==LBRACKET) && (synpred69_MFortranParser2018())) {
					alt543=2;
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 543, 0, input);
				throw nvae;
			}

			switch (alt543) {
				case 1 :
					// MFortranParser2018.g:5991:7: ( ( label )? FLUSH LPAREN )=> (lbl= label )? FLUSH LPAREN flush_spec_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:5992:11: (lbl= label )?
					int alt541=2;
					int LA541_0 = input.LA(1);
					if ( (LA541_0==DIGIT_STR) ) {
						alt541=1;
					}
					switch (alt541) {
						case 1 :
							// MFortranParser2018.g:5992:12: lbl= label
							{
							pushFollow(FOLLOW_label_in_flush_stmt24901);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					FLUSH514=(Token)match(input,FLUSH,FOLLOW_FLUSH_in_flush_stmt24917); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_flush_stmt24919); if (state.failed) return;
					pushFollow(FOLLOW_flush_spec_list_in_flush_stmt24921);
					flush_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_flush_stmt24923); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_flush_stmt24936);
					end_of_stmt515=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.flush_stmt(lbl, 
					                  FLUSH514, end_of_stmt515, true); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:5997:7: ( ( label )? FLUSH )=> (lbl= label )? FLUSH file_unit_number end_of_stmt
					{
					// MFortranParser2018.g:5998:10: (lbl= label )?
					int alt542=2;
					int LA542_0 = input.LA(1);
					if ( (LA542_0==DIGIT_STR) ) {
						alt542=1;
					}
					switch (alt542) {
						case 1 :
							// MFortranParser2018.g:5998:11: lbl= label
							{
							pushFollow(FOLLOW_label_in_flush_stmt24983);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					FLUSH516=(Token)match(input,FLUSH,FOLLOW_FLUSH_in_flush_stmt24997); if (state.failed) return;
					pushFollow(FOLLOW_file_unit_number_in_flush_stmt24999);
					file_unit_number();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_flush_stmt25011);
					end_of_stmt517=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.flush_stmt(lbl, 
					                 FLUSH516, end_of_stmt517, false);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "flush_stmt"



	// $ANTLR start "flush_spec"
	// MFortranParser2018.g:6011:1: flush_spec : ( expr | IDENT EQUALS expr );
	public final void flush_spec() throws RecognitionException {
		Token IDENT518=null;

		try {
			// MFortranParser2018.g:6012:5: ( expr | IDENT EQUALS expr )
			int alt544=2;
			int LA544_0 = input.LA(1);
			if ( (LA544_0==BIN_CONST||LA544_0==CHAR_CONST||(LA544_0 >= DEFINED_OP && LA544_0 <= DIGIT_STR)||LA544_0==FALSE||LA544_0==HEX_CONST||LA544_0==LBRACKET||LA544_0==LPAREN||LA544_0==MINUS||LA544_0==M_REAL_CONST||LA544_0==NOT||LA544_0==OCT_CONST||LA544_0==PLUS||LA544_0==TRUE) ) {
				alt544=1;
			}
			else if ( (LA544_0==IDENT) ) {
				int LA544_2 = input.LA(2);
				if ( (LA544_2==AND||LA544_2==ASTERISK||LA544_2==CHAR_CONST||LA544_2==COMMA||LA544_2==DEFINED_OP||LA544_2==EQ||(LA544_2 >= EQV && LA544_2 <= EQ_EQ)||LA544_2==GE||(LA544_2 >= GREATERTHAN && LA544_2 <= GT)||(LA544_2 >= LBRACKET && LA544_2 <= LE)||(LA544_2 >= LESSTHAN && LA544_2 <= LESSTHAN_EQ)||(LA544_2 >= LPAREN && LA544_2 <= LT)||LA544_2==MINUS||(LA544_2 >= NE && LA544_2 <= NEQV)||LA544_2==OR||LA544_2==PERCENT||LA544_2==PLUS||LA544_2==POWER||LA544_2==RPAREN||(LA544_2 >= SLASH && LA544_2 <= SLASH_SLASH)) ) {
					alt544=1;
				}
				else if ( (LA544_2==EQUALS) ) {
					alt544=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 544, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 544, 0, input);
				throw nvae;
			}

			switch (alt544) {
				case 1 :
					// MFortranParser2018.g:6012:7: expr
					{
					pushFollow(FOLLOW_expr_in_flush_spec25043);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.flush_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6014:7: IDENT EQUALS expr
					{
					IDENT518=(Token)match(input,IDENT,FOLLOW_IDENT_in_flush_spec25061); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_flush_spec25063); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_flush_spec25065);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.flush_spec(IDENT518); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "flush_spec"



	// $ANTLR start "flush_spec_list"
	// MFortranParser2018.g:6018:1: flush_spec_list : flush_spec ( COMMA flush_spec )* ;
	public final void flush_spec_list() throws RecognitionException {

		  int numFS = 1;

		try {
			// MFortranParser2018.g:6025:5: ( flush_spec ( COMMA flush_spec )* )
			// MFortranParser2018.g:6025:7: flush_spec ( COMMA flush_spec )*
			{
			pushFollow(FOLLOW_flush_spec_in_flush_spec_list25101);
			flush_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6026:7: ( COMMA flush_spec )*
			loop545:
			while (true) {
				int alt545=2;
				int LA545_0 = input.LA(1);
				if ( (LA545_0==COMMA) ) {
					alt545=1;
				}

				switch (alt545) {
				case 1 :
					// MFortranParser2018.g:6026:9: COMMA flush_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_flush_spec_list25111); if (state.failed) return;
					pushFollow(FOLLOW_flush_spec_in_flush_spec_list25113);
					flush_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numFS++;}
					}
					break;

				default :
					break loop545;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.flush_spec_list(numFS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "flush_spec_list"



	// $ANTLR start "inquire_stmt"
	// MFortranParser2018.g:6033:1: inquire_stmt : ( (lbl= label )? INQUIRE LPAREN inquire_spec_list RPAREN end_of_stmt | (lbl= label )? M_INQUIRE_STMT_2 INQUIRE LPAREN IDENT EQUALS expr RPAREN output_item_list end_of_stmt );
	public final void inquire_stmt() throws RecognitionException {
		Token INQUIRE519=null;
		Token INQUIRE521=null;
		Token IDENT522=null;
		Token lbl =null;
		Token end_of_stmt520 =null;
		Token end_of_stmt523 =null;



		try {
			// MFortranParser2018.g:6039:5: ( (lbl= label )? INQUIRE LPAREN inquire_spec_list RPAREN end_of_stmt | (lbl= label )? M_INQUIRE_STMT_2 INQUIRE LPAREN IDENT EQUALS expr RPAREN output_item_list end_of_stmt )
			int alt548=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA548_1 = input.LA(2);
				if ( (LA548_1==INQUIRE) ) {
					alt548=1;
				}
				else if ( (LA548_1==M_INQUIRE_STMT_2) ) {
					alt548=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 548, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case INQUIRE:
				{
				alt548=1;
				}
				break;
			case M_INQUIRE_STMT_2:
				{
				alt548=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 548, 0, input);
				throw nvae;
			}
			switch (alt548) {
				case 1 :
					// MFortranParser2018.g:6039:7: (lbl= label )? INQUIRE LPAREN inquire_spec_list RPAREN end_of_stmt
					{
					// MFortranParser2018.g:6039:7: (lbl= label )?
					int alt546=2;
					int LA546_0 = input.LA(1);
					if ( (LA546_0==DIGIT_STR) ) {
						alt546=1;
					}
					switch (alt546) {
						case 1 :
							// MFortranParser2018.g:6039:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_inquire_stmt25148);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					INQUIRE519=(Token)match(input,INQUIRE,FOLLOW_INQUIRE_in_inquire_stmt25159); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_inquire_stmt25161); if (state.failed) return;
					pushFollow(FOLLOW_inquire_spec_list_in_inquire_stmt25163);
					inquire_spec_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_inquire_stmt25165); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_inquire_stmt25174);
					end_of_stmt520=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.inquire_stmt(lbl, 
					              INQUIRE519, null, end_of_stmt520, false);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6044:7: (lbl= label )? M_INQUIRE_STMT_2 INQUIRE LPAREN IDENT EQUALS expr RPAREN output_item_list end_of_stmt
					{
					// MFortranParser2018.g:6044:7: (lbl= label )?
					int alt547=2;
					int LA547_0 = input.LA(1);
					if ( (LA547_0==DIGIT_STR) ) {
						alt547=1;
					}
					switch (alt547) {
						case 1 :
							// MFortranParser2018.g:6044:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_inquire_stmt25195);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					match(input,M_INQUIRE_STMT_2,FOLLOW_M_INQUIRE_STMT_2_in_inquire_stmt25206); if (state.failed) return;
					INQUIRE521=(Token)match(input,INQUIRE,FOLLOW_INQUIRE_in_inquire_stmt25208); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_inquire_stmt25210); if (state.failed) return;
					IDENT522=(Token)match(input,IDENT,FOLLOW_IDENT_in_inquire_stmt25219); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_inquire_stmt25223); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_inquire_stmt25225);
					expr();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_inquire_stmt25234); if (state.failed) return;
					pushFollow(FOLLOW_output_item_list_in_inquire_stmt25236);
					output_item_list();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_inquire_stmt25245);
					end_of_stmt523=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.inquire_stmt(lbl, 
					              INQUIRE521, IDENT522, end_of_stmt523, true);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "inquire_stmt"



	// $ANTLR start "inquire_spec"
	// MFortranParser2018.g:6066:1: inquire_spec : ( expr | IDENT EQUALS expr );
	public final void inquire_spec() throws RecognitionException {
		Token IDENT524=null;

		try {
			// MFortranParser2018.g:6067:5: ( expr | IDENT EQUALS expr )
			int alt549=2;
			int LA549_0 = input.LA(1);
			if ( (LA549_0==BIN_CONST||LA549_0==CHAR_CONST||(LA549_0 >= DEFINED_OP && LA549_0 <= DIGIT_STR)||LA549_0==FALSE||LA549_0==HEX_CONST||LA549_0==LBRACKET||LA549_0==LPAREN||LA549_0==MINUS||LA549_0==M_REAL_CONST||LA549_0==NOT||LA549_0==OCT_CONST||LA549_0==PLUS||LA549_0==TRUE) ) {
				alt549=1;
			}
			else if ( (LA549_0==IDENT) ) {
				int LA549_2 = input.LA(2);
				if ( (LA549_2==AND||LA549_2==ASTERISK||LA549_2==CHAR_CONST||LA549_2==COMMA||LA549_2==DEFINED_OP||LA549_2==EQ||(LA549_2 >= EQV && LA549_2 <= EQ_EQ)||LA549_2==GE||(LA549_2 >= GREATERTHAN && LA549_2 <= GT)||(LA549_2 >= LBRACKET && LA549_2 <= LE)||(LA549_2 >= LESSTHAN && LA549_2 <= LESSTHAN_EQ)||(LA549_2 >= LPAREN && LA549_2 <= LT)||LA549_2==MINUS||(LA549_2 >= NE && LA549_2 <= NEQV)||LA549_2==OR||LA549_2==PERCENT||LA549_2==PLUS||LA549_2==POWER||LA549_2==RPAREN||(LA549_2 >= SLASH && LA549_2 <= SLASH_SLASH)) ) {
					alt549=1;
				}
				else if ( (LA549_2==EQUALS) ) {
					alt549=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 549, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 549, 0, input);
				throw nvae;
			}

			switch (alt549) {
				case 1 :
					// MFortranParser2018.g:6067:7: expr
					{
					pushFollow(FOLLOW_expr_in_inquire_spec25274);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.inquire_spec(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6069:7: IDENT EQUALS expr
					{
					IDENT524=(Token)match(input,IDENT,FOLLOW_IDENT_in_inquire_spec25292); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_inquire_spec25294); if (state.failed) return;
					pushFollow(FOLLOW_expr_in_inquire_spec25296);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.inquire_spec(IDENT524); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "inquire_spec"



	// $ANTLR start "inquire_spec_list"
	// MFortranParser2018.g:6073:1: inquire_spec_list : inquire_spec ( COMMA inquire_spec )* ;
	public final void inquire_spec_list() throws RecognitionException {

		  int numIS = 1;

		try {
			// MFortranParser2018.g:6080:5: ( inquire_spec ( COMMA inquire_spec )* )
			// MFortranParser2018.g:6080:7: inquire_spec ( COMMA inquire_spec )*
			{
			pushFollow(FOLLOW_inquire_spec_in_inquire_spec_list25331);
			inquire_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6081:7: ( COMMA inquire_spec )*
			loop550:
			while (true) {
				int alt550=2;
				int LA550_0 = input.LA(1);
				if ( (LA550_0==COMMA) ) {
					alt550=1;
				}

				switch (alt550) {
				case 1 :
					// MFortranParser2018.g:6081:9: COMMA inquire_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_inquire_spec_list25341); if (state.failed) return;
					pushFollow(FOLLOW_inquire_spec_in_inquire_spec_list25343);
					inquire_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numIS++;}
					}
					break;

				default :
					break loop550;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.inquire_spec_list(numIS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "inquire_spec_list"



	// $ANTLR start "format_stmt"
	// MFortranParser2018.g:6088:1: format_stmt : (lbl= label )? FORMAT format_specification end_of_stmt ;
	public final void format_stmt() throws RecognitionException {
		Token FORMAT525=null;
		Token lbl =null;
		Token end_of_stmt526 =null;



		try {
			// MFortranParser2018.g:6094:5: ( (lbl= label )? FORMAT format_specification end_of_stmt )
			// MFortranParser2018.g:6094:7: (lbl= label )? FORMAT format_specification end_of_stmt
			{
			// MFortranParser2018.g:6094:7: (lbl= label )?
			int alt551=2;
			int LA551_0 = input.LA(1);
			if ( (LA551_0==DIGIT_STR) ) {
				alt551=1;
			}
			switch (alt551) {
				case 1 :
					// MFortranParser2018.g:6094:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_format_stmt25378);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			FORMAT525=(Token)match(input,FORMAT,FOLLOW_FORMAT_in_format_stmt25389); if (state.failed) return;
			pushFollow(FOLLOW_format_specification_in_format_stmt25391);
			format_specification();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_format_stmt25400);
			end_of_stmt526=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.format_stmt(lbl, 
			              FORMAT525, end_of_stmt526); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "format_stmt"



	// $ANTLR start "format_specification"
	// MFortranParser2018.g:6104:1: format_specification : LPAREN ( format_item_list )? ( COMMA unlimited_format_item )? RPAREN ;
	public final void format_specification() throws RecognitionException {

		  boolean hasFIL=false;
		  boolean hasUFI=false;

		try {
			// MFortranParser2018.g:6109:5: ( LPAREN ( format_item_list )? ( COMMA unlimited_format_item )? RPAREN )
			// MFortranParser2018.g:6109:7: LPAREN ( format_item_list )? ( COMMA unlimited_format_item )? RPAREN
			{
			match(input,LPAREN,FOLLOW_LPAREN_in_format_specification25434); if (state.failed) return;
			// MFortranParser2018.g:6109:14: ( format_item_list )?
			int alt552=2;
			int LA552_0 = input.LA(1);
			if ( (LA552_0==DIGIT_STR||LA552_0==LPAREN||(LA552_0 >= M_CSTR_EDIT_DESC && LA552_0 <= M_DATA_EDIT_DESC)) ) {
				alt552=1;
			}
			switch (alt552) {
				case 1 :
					// MFortranParser2018.g:6109:16: format_item_list
					{
					pushFollow(FOLLOW_format_item_list_in_format_specification25438);
					format_item_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasFIL=true;}
					}
					break;

			}

			// MFortranParser2018.g:6110:7: ( COMMA unlimited_format_item )?
			int alt553=2;
			int LA553_0 = input.LA(1);
			if ( (LA553_0==COMMA) ) {
				alt553=1;
			}
			switch (alt553) {
				case 1 :
					// MFortranParser2018.g:6110:8: COMMA unlimited_format_item
					{
					match(input,COMMA,FOLLOW_COMMA_in_format_specification25452); if (state.failed) return;
					pushFollow(FOLLOW_unlimited_format_item_in_format_specification25454);
					unlimited_format_item();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasUFI=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_format_specification25460); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.format_specification(hasFIL, hasUFI); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "format_specification"



	// $ANTLR start "format_item"
	// MFortranParser2018.g:6120:1: format_item : ( M_DATA_EDIT_DESC | M_CTRL_EDIT_DESC | M_CSTR_EDIT_DESC | ( DIGIT_STR )? LPAREN format_item_list RPAREN );
	public final void format_item() throws RecognitionException {
		Token M_DATA_EDIT_DESC527=null;
		Token M_CTRL_EDIT_DESC528=null;
		Token M_CSTR_EDIT_DESC529=null;
		Token DIGIT_STR530=null;


		  Token descOrDigit=null; 
		  boolean hasFIL = false;

		try {
			// MFortranParser2018.g:6125:5: ( M_DATA_EDIT_DESC | M_CTRL_EDIT_DESC | M_CSTR_EDIT_DESC | ( DIGIT_STR )? LPAREN format_item_list RPAREN )
			int alt555=4;
			switch ( input.LA(1) ) {
			case M_DATA_EDIT_DESC:
				{
				alt555=1;
				}
				break;
			case M_CTRL_EDIT_DESC:
				{
				alt555=2;
				}
				break;
			case M_CSTR_EDIT_DESC:
				{
				alt555=3;
				}
				break;
			case DIGIT_STR:
			case LPAREN:
				{
				alt555=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 555, 0, input);
				throw nvae;
			}
			switch (alt555) {
				case 1 :
					// MFortranParser2018.g:6125:7: M_DATA_EDIT_DESC
					{
					M_DATA_EDIT_DESC527=(Token)match(input,M_DATA_EDIT_DESC,FOLLOW_M_DATA_EDIT_DESC_in_format_item25494); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.format_item(M_DATA_EDIT_DESC527, hasFIL); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6127:7: M_CTRL_EDIT_DESC
					{
					M_CTRL_EDIT_DESC528=(Token)match(input,M_CTRL_EDIT_DESC,FOLLOW_M_CTRL_EDIT_DESC_in_format_item25513); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.format_item(M_CTRL_EDIT_DESC528, hasFIL);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:6129:7: M_CSTR_EDIT_DESC
					{
					M_CSTR_EDIT_DESC529=(Token)match(input,M_CSTR_EDIT_DESC,FOLLOW_M_CSTR_EDIT_DESC_in_format_item25531); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.format_item(M_CSTR_EDIT_DESC529, hasFIL);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:6131:7: ( DIGIT_STR )? LPAREN format_item_list RPAREN
					{
					// MFortranParser2018.g:6131:7: ( DIGIT_STR )?
					int alt554=2;
					int LA554_0 = input.LA(1);
					if ( (LA554_0==DIGIT_STR) ) {
						alt554=1;
					}
					switch (alt554) {
						case 1 :
							// MFortranParser2018.g:6131:8: DIGIT_STR
							{
							DIGIT_STR530=(Token)match(input,DIGIT_STR,FOLLOW_DIGIT_STR_in_format_item25550); if (state.failed) return;
							if ( state.backtracking==0 ) {descOrDigit=DIGIT_STR530;}
							}
							break;

					}

					match(input,LPAREN,FOLLOW_LPAREN_in_format_item25564); if (state.failed) return;
					pushFollow(FOLLOW_format_item_list_in_format_item25566);
					format_item_list();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_format_item25568); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.format_item(descOrDigit, hasFIL);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "format_item"



	// $ANTLR start "format_item_list"
	// MFortranParser2018.g:6137:1: format_item_list : format_item ( ( COMMA )? format_item )* ;
	public final void format_item_list() throws RecognitionException {

		  int numFI = 1;

		try {
			// MFortranParser2018.g:6144:5: ( format_item ( ( COMMA )? format_item )* )
			// MFortranParser2018.g:6144:7: format_item ( ( COMMA )? format_item )*
			{
			pushFollow(FOLLOW_format_item_in_format_item_list25605);
			format_item();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6145:7: ( ( COMMA )? format_item )*
			loop557:
			while (true) {
				int alt557=2;
				int LA557_0 = input.LA(1);
				if ( (LA557_0==COMMA) ) {
					int LA557_1 = input.LA(2);
					if ( (LA557_1==DIGIT_STR||LA557_1==LPAREN||(LA557_1 >= M_CSTR_EDIT_DESC && LA557_1 <= M_DATA_EDIT_DESC)) ) {
						alt557=1;
					}

				}
				else if ( (LA557_0==DIGIT_STR||LA557_0==LPAREN||(LA557_0 >= M_CSTR_EDIT_DESC && LA557_0 <= M_DATA_EDIT_DESC)) ) {
					alt557=1;
				}

				switch (alt557) {
				case 1 :
					// MFortranParser2018.g:6145:9: ( COMMA )? format_item
					{
					// MFortranParser2018.g:6145:9: ( COMMA )?
					int alt556=2;
					int LA556_0 = input.LA(1);
					if ( (LA556_0==COMMA) ) {
						alt556=1;
					}
					switch (alt556) {
						case 1 :
							// MFortranParser2018.g:6145:10: COMMA
							{
							match(input,COMMA,FOLLOW_COMMA_in_format_item_list25617); if (state.failed) return;
							}
							break;

					}

					pushFollow(FOLLOW_format_item_in_format_item_list25621);
					format_item();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numFI++;}
					}
					break;

				default :
					break loop557;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.format_item_list(numFI);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "format_item_list"



	// $ANTLR start "unlimited_format_item"
	// MFortranParser2018.g:6151:1: unlimited_format_item : ASTERISK LPAREN format_item_list RPAREN ;
	public final void unlimited_format_item() throws RecognitionException {
		try {
			// MFortranParser2018.g:6152:5: ( ASTERISK LPAREN format_item_list RPAREN )
			// MFortranParser2018.g:6152:7: ASTERISK LPAREN format_item_list RPAREN
			{
			match(input,ASTERISK,FOLLOW_ASTERISK_in_unlimited_format_item25645); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_unlimited_format_item25647); if (state.failed) return;
			pushFollow(FOLLOW_format_item_list_in_unlimited_format_item25649);
			format_item_list();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_unlimited_format_item25651); if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.unlimited_format_item(); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "unlimited_format_item"



	// $ANTLR start "main_program"
	// MFortranParser2018.g:6211:1: main_program : program_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_program_stmt ;
	public final void main_program() throws RecognitionException {

		  boolean hasEP = false;
		  boolean hasISP = false;

		try {
			// MFortranParser2018.g:6219:5: ( program_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_program_stmt )
			// MFortranParser2018.g:6219:7: program_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_program_stmt
			{
			pushFollow(FOLLOW_program_stmt_in_main_program25691);
			program_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_main_program25699);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6221:7: ( execution_part )?
			int alt558=2;
			switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA558_1 = input.LA(2);
					if ( (LA558_1==ALLOCATE||LA558_1==ASSOCIATE||LA558_1==BACKSPACE||LA558_1==BLOCK||LA558_1==CALL||LA558_1==CLOSE||LA558_1==CONTINUE||(LA558_1 >= CRITICAL && LA558_1 <= CYCLE)||LA558_1==DEALLOCATE||LA558_1==DO||LA558_1==EXIT||LA558_1==FLUSH||(LA558_1 >= GO && LA558_1 <= GOTO)||(LA558_1 >= IDENT && LA558_1 <= IF)||LA558_1==INQUIRE||(LA558_1 >= M_ALLOCATE_STMT_1 && LA558_1 <= M_ASSIGNMENT_STMT)||(LA558_1 >= M_FORALL_CONSTRUCT_STMT && LA558_1 <= M_IF_STMT)||LA558_1==M_INQUIRE_STMT_2||LA558_1==M_PTR_ASSIGNMENT_STMT||LA558_1==M_WHERE_STMT||LA558_1==NULLIFY||LA558_1==OPEN||LA558_1==PRINT||LA558_1==READ||(LA558_1 >= RETURN && LA558_1 <= REWIND)||(LA558_1 >= SELECT && LA558_1 <= SELECTTYPE)||LA558_1==STOP||LA558_1==SYNC||LA558_1==WAIT||LA558_1==WRITE) ) {
						alt558=1;
					}
					else if ( (LA558_1==END) ) {
						int LA558_3 = input.LA(3);
						if ( (LA558_3==FILE) ) {
							alt558=1;
						}
					}
					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DEALLOCATE:
				case DO:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt558=1;
					}
					break;
				case END:
					{
					int LA558_3 = input.LA(2);
					if ( (LA558_3==FILE) ) {
						alt558=1;
					}
					}
					break;
			}
			switch (alt558) {
				case 1 :
					// MFortranParser2018.g:6221:9: execution_part
					{
					pushFollow(FOLLOW_execution_part_in_main_program25709);
					execution_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasEP = true;}
					}
					break;

			}

			// MFortranParser2018.g:6222:7: ( internal_subprogram_part )?
			int alt559=2;
			int LA559_0 = input.LA(1);
			if ( (LA559_0==DIGIT_STR) ) {
				int LA559_1 = input.LA(2);
				if ( (LA559_1==CONTAINS) ) {
					alt559=1;
				}
			}
			else if ( (LA559_0==CONTAINS) ) {
				alt559=1;
			}
			switch (alt559) {
				case 1 :
					// MFortranParser2018.g:6222:9: internal_subprogram_part
					{
					pushFollow(FOLLOW_internal_subprogram_part_in_main_program25724);
					internal_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasISP = true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_program_stmt_in_main_program25737);
			end_program_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.main_program(hasEP, hasISP);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "main_program"



	// $ANTLR start "program_stmt"
	// MFortranParser2018.g:6230:1: program_stmt : (lbl= label )? PROGRAM IDENT end_of_stmt ;
	public final void program_stmt() throws RecognitionException {
		Token PROGRAM531=null;
		Token IDENT532=null;
		Token lbl =null;
		Token end_of_stmt533 =null;



		try {
			// MFortranParser2018.g:6236:5: ( (lbl= label )? PROGRAM IDENT end_of_stmt )
			// MFortranParser2018.g:6236:7: (lbl= label )? PROGRAM IDENT end_of_stmt
			{
			// MFortranParser2018.g:6236:7: (lbl= label )?
			int alt560=2;
			int LA560_0 = input.LA(1);
			if ( (LA560_0==DIGIT_STR) ) {
				alt560=1;
			}
			switch (alt560) {
				case 1 :
					// MFortranParser2018.g:6236:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_program_stmt25770);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PROGRAM531=(Token)match(input,PROGRAM,FOLLOW_PROGRAM_in_program_stmt25781); if (state.failed) return;
			IDENT532=(Token)match(input,IDENT,FOLLOW_IDENT_in_program_stmt25783); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_program_stmt25792);
			end_of_stmt533=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.program_stmt(lbl, 
			              PROGRAM531, IDENT532, end_of_stmt533); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "program_stmt"



	// $ANTLR start "end_program_stmt"
	// MFortranParser2018.g:6247:1: end_program_stmt : ( (lbl= label )? END PROGRAM ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt );
	public final void end_program_stmt() throws RecognitionException {
		Token IDENT534=null;
		Token END535=null;
		Token PROGRAM536=null;
		Token END538=null;
		Token lbl =null;
		Token end_of_stmt537 =null;
		Token end_of_stmt539 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:6254:5: ( (lbl= label )? END PROGRAM ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt )
			int alt564=2;
			int LA564_0 = input.LA(1);
			if ( (LA564_0==DIGIT_STR) ) {
				int LA564_1 = input.LA(2);
				if ( (LA564_1==END) ) {
					int LA564_2 = input.LA(3);
					if ( (LA564_2==PROGRAM) ) {
						alt564=1;
					}
					else if ( (LA564_2==EOF||LA564_2==EOS) ) {
						alt564=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 564, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 564, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA564_0==END) ) {
				int LA564_2 = input.LA(2);
				if ( (LA564_2==PROGRAM) ) {
					alt564=1;
				}
				else if ( (LA564_2==EOF||LA564_2==EOS) ) {
					alt564=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 564, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 564, 0, input);
				throw nvae;
			}

			switch (alt564) {
				case 1 :
					// MFortranParser2018.g:6254:7: (lbl= label )? END PROGRAM ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6254:7: (lbl= label )?
					int alt561=2;
					int LA561_0 = input.LA(1);
					if ( (LA561_0==DIGIT_STR) ) {
						alt561=1;
					}
					switch (alt561) {
						case 1 :
							// MFortranParser2018.g:6254:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_program_stmt25832);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END535=(Token)match(input,END,FOLLOW_END_in_end_program_stmt25843); if (state.failed) return;
					PROGRAM536=(Token)match(input,PROGRAM,FOLLOW_PROGRAM_in_end_program_stmt25845); if (state.failed) return;
					// MFortranParser2018.g:6255:19: ( IDENT )?
					int alt562=2;
					int LA562_0 = input.LA(1);
					if ( (LA562_0==IDENT) ) {
						alt562=1;
					}
					switch (alt562) {
						case 1 :
							// MFortranParser2018.g:6255:20: IDENT
							{
							IDENT534=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_program_stmt25848); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT534;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_program_stmt25861);
					end_of_stmt537=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_program_stmt(lbl, 
					              END535, PROGRAM536, id, end_of_stmt537); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6259:7: (lbl= label )? END end_of_stmt
					{
					// MFortranParser2018.g:6259:7: (lbl= label )?
					int alt563=2;
					int LA563_0 = input.LA(1);
					if ( (LA563_0==DIGIT_STR) ) {
						alt563=1;
					}
					switch (alt563) {
						case 1 :
							// MFortranParser2018.g:6259:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_program_stmt25882);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END538=(Token)match(input,END,FOLLOW_END_in_end_program_stmt25893); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_end_program_stmt25902);
					end_of_stmt539=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_program_stmt(lbl, 
					              END538, null, null, end_of_stmt539); }
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_program_stmt"



	// $ANTLR start "module"
	// MFortranParser2018.g:6273:1: module : module_stmt specification_part ( module_subprogram_part )? end_module_stmt ;
	public final void module() throws RecognitionException {
		try {
			// MFortranParser2018.g:6277:5: ( module_stmt specification_part ( module_subprogram_part )? end_module_stmt )
			// MFortranParser2018.g:6277:7: module_stmt specification_part ( module_subprogram_part )? end_module_stmt
			{
			pushFollow(FOLLOW_module_stmt_in_module25936);
			module_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_module25944);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6279:7: ( module_subprogram_part )?
			int alt565=2;
			int LA565_0 = input.LA(1);
			if ( (LA565_0==DIGIT_STR) ) {
				int LA565_1 = input.LA(2);
				if ( (LA565_1==CONTAINS) ) {
					alt565=1;
				}
			}
			else if ( (LA565_0==CONTAINS) ) {
				alt565=1;
			}
			switch (alt565) {
				case 1 :
					// MFortranParser2018.g:6279:9: module_subprogram_part
					{
					pushFollow(FOLLOW_module_subprogram_part_in_module25954);
					module_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_module_stmt_in_module25965);
			end_module_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.module();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "module"



	// $ANTLR start "module_stmt"
	// MFortranParser2018.g:6286:1: module_stmt : (lbl= label )? MODULE ( IDENT )? end_of_stmt ;
	public final void module_stmt() throws RecognitionException {
		Token IDENT540=null;
		Token MODULE541=null;
		Token lbl =null;
		Token end_of_stmt542 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:6293:5: ( (lbl= label )? MODULE ( IDENT )? end_of_stmt )
			// MFortranParser2018.g:6293:7: (lbl= label )? MODULE ( IDENT )? end_of_stmt
			{
			// MFortranParser2018.g:6293:7: (lbl= label )?
			int alt566=2;
			int LA566_0 = input.LA(1);
			if ( (LA566_0==DIGIT_STR) ) {
				alt566=1;
			}
			switch (alt566) {
				case 1 :
					// MFortranParser2018.g:6293:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_module_stmt25995);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			MODULE541=(Token)match(input,MODULE,FOLLOW_MODULE_in_module_stmt26006); if (state.failed) return;
			// MFortranParser2018.g:6294:14: ( IDENT )?
			int alt567=2;
			int LA567_0 = input.LA(1);
			if ( (LA567_0==IDENT) ) {
				alt567=1;
			}
			switch (alt567) {
				case 1 :
					// MFortranParser2018.g:6294:16: IDENT
					{
					IDENT540=(Token)match(input,IDENT,FOLLOW_IDENT_in_module_stmt26010); if (state.failed) return;
					if ( state.backtracking==0 ) {id=IDENT540;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_module_stmt26023);
			end_of_stmt542=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.module_stmt(lbl, 
			              MODULE541, id, end_of_stmt542);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "module_stmt"



	// $ANTLR start "end_module_stmt"
	// MFortranParser2018.g:6303:1: end_module_stmt : ( (lbl= label )? END MODULE ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt );
	public final void end_module_stmt() throws RecognitionException {
		Token IDENT543=null;
		Token END544=null;
		Token MODULE545=null;
		Token END547=null;
		Token lbl =null;
		Token end_of_stmt546 =null;
		Token end_of_stmt548 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:6310:5: ( (lbl= label )? END MODULE ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt )
			int alt571=2;
			int LA571_0 = input.LA(1);
			if ( (LA571_0==DIGIT_STR) ) {
				int LA571_1 = input.LA(2);
				if ( (LA571_1==END) ) {
					int LA571_2 = input.LA(3);
					if ( (LA571_2==MODULE) ) {
						alt571=1;
					}
					else if ( (LA571_2==EOF||LA571_2==EOS) ) {
						alt571=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 571, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 571, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA571_0==END) ) {
				int LA571_2 = input.LA(2);
				if ( (LA571_2==MODULE) ) {
					alt571=1;
				}
				else if ( (LA571_2==EOF||LA571_2==EOS) ) {
					alt571=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 571, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 571, 0, input);
				throw nvae;
			}

			switch (alt571) {
				case 1 :
					// MFortranParser2018.g:6310:7: (lbl= label )? END MODULE ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6310:7: (lbl= label )?
					int alt568=2;
					int LA568_0 = input.LA(1);
					if ( (LA568_0==DIGIT_STR) ) {
						alt568=1;
					}
					switch (alt568) {
						case 1 :
							// MFortranParser2018.g:6310:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_module_stmt26063);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END544=(Token)match(input,END,FOLLOW_END_in_end_module_stmt26074); if (state.failed) return;
					MODULE545=(Token)match(input,MODULE,FOLLOW_MODULE_in_end_module_stmt26076); if (state.failed) return;
					// MFortranParser2018.g:6311:18: ( IDENT )?
					int alt569=2;
					int LA569_0 = input.LA(1);
					if ( (LA569_0==IDENT) ) {
						alt569=1;
					}
					switch (alt569) {
						case 1 :
							// MFortranParser2018.g:6311:19: IDENT
							{
							IDENT543=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_module_stmt26079); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT543;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_module_stmt26091);
					end_of_stmt546=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_module_stmt(lbl, 
					              END544, MODULE545, id, end_of_stmt546);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6315:7: (lbl= label )? END end_of_stmt
					{
					// MFortranParser2018.g:6315:7: (lbl= label )?
					int alt570=2;
					int LA570_0 = input.LA(1);
					if ( (LA570_0==DIGIT_STR) ) {
						alt570=1;
					}
					switch (alt570) {
						case 1 :
							// MFortranParser2018.g:6315:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_module_stmt26112);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END547=(Token)match(input,END,FOLLOW_END_in_end_module_stmt26117); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_end_module_stmt26126);
					end_of_stmt548=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_module_stmt(lbl, 
					              END547, null, id, end_of_stmt548);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_module_stmt"



	// $ANTLR start "module_subprogram_part"
	// MFortranParser2018.g:6324:1: module_subprogram_part : contains_stmt ( module_subprogram )* ;
	public final void module_subprogram_part() throws RecognitionException {

		  int numMS = 0;

		try {
			// MFortranParser2018.g:6331:5: ( contains_stmt ( module_subprogram )* )
			// MFortranParser2018.g:6331:7: contains_stmt ( module_subprogram )*
			{
			pushFollow(FOLLOW_contains_stmt_in_module_subprogram_part26163);
			contains_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6332:7: ( module_subprogram )*
			loop572:
			while (true) {
				int alt572=2;
				int LA572_0 = input.LA(1);
				if ( (LA572_0==DIGIT_STR) ) {
					int LA572_1 = input.LA(2);
					if ( (LA572_1==CHARACTER||LA572_1==CLASS||LA572_1==COMPLEX||(LA572_1 >= DOUBLE && LA572_1 <= DOUBLEPRECISION)||LA572_1==ELEMENTAL||LA572_1==FUNCTION||LA572_1==IMPURE||LA572_1==INTEGER||LA572_1==LOGICAL||LA572_1==MODULE||LA572_1==NON_RECURSIVE||LA572_1==PURE||(LA572_1 >= REAL && LA572_1 <= RECURSIVE)||LA572_1==SUBROUTINE||LA572_1==TYPE) ) {
						alt572=1;
					}

				}
				else if ( (LA572_0==CHARACTER||LA572_0==CLASS||LA572_0==COMPLEX||(LA572_0 >= DOUBLE && LA572_0 <= DOUBLEPRECISION)||LA572_0==ELEMENTAL||LA572_0==FUNCTION||LA572_0==IMPURE||LA572_0==INTEGER||LA572_0==LOGICAL||LA572_0==MODULE||LA572_0==NON_RECURSIVE||LA572_0==PURE||(LA572_0 >= REAL && LA572_0 <= RECURSIVE)||LA572_0==SUBROUTINE||LA572_0==TYPE) ) {
					alt572=1;
				}

				switch (alt572) {
				case 1 :
					// MFortranParser2018.g:6332:9: module_subprogram
					{
					pushFollow(FOLLOW_module_subprogram_in_module_subprogram_part26173);
					module_subprogram();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numMS++;}
					}
					break;

				default :
					break loop572;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.module_subprogram_part(numMS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "module_subprogram_part"



	// $ANTLR start "module_subprogram"
	// MFortranParser2018.g:6338:1: module_subprogram options {backtrack=true; } : ( ( prefix )? function_subprogram | subroutine_subprogram | separate_module_subprogram );
	public final void module_subprogram() throws RecognitionException {

		  boolean hasPref = false;

		try {
			// MFortranParser2018.g:6346:5: ( ( prefix )? function_subprogram | subroutine_subprogram | separate_module_subprogram )
			int alt574=3;
			switch ( input.LA(1) ) {
			case INTEGER:
				{
				int LA574_1 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case REAL:
				{
				int LA574_2 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DOUBLE:
				{
				int LA574_3 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DOUBLEPRECISION:
				{
				int LA574_4 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case COMPLEX:
				{
				int LA574_5 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 5, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DOUBLECOMPLEX:
				{
				int LA574_6 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 6, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CHARACTER:
				{
				int LA574_7 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 7, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case LOGICAL:
				{
				int LA574_8 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 8, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case TYPE:
				{
				int LA574_9 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 9, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case CLASS:
				{
				int LA574_10 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 10, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ELEMENTAL:
				{
				int LA574_11 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 11, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case IMPURE:
				{
				int LA574_12 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 12, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case MODULE:
				{
				int LA574_13 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}
				else if ( (true) ) {
					alt574=3;
				}

				}
				break;
			case NON_RECURSIVE:
				{
				int LA574_14 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 14, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case PURE:
				{
				int LA574_15 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 15, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case RECURSIVE:
				{
				int LA574_16 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 574, 16, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIGIT_STR:
				{
				int LA574_17 = input.LA(2);
				if ( (synpred70_MFortranParser2018()) ) {
					alt574=1;
				}
				else if ( (synpred71_MFortranParser2018()) ) {
					alt574=2;
				}
				else if ( (true) ) {
					alt574=3;
				}

				}
				break;
			case FUNCTION:
				{
				alt574=1;
				}
				break;
			case SUBROUTINE:
				{
				alt574=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 574, 0, input);
				throw nvae;
			}
			switch (alt574) {
				case 1 :
					// MFortranParser2018.g:6346:7: ( prefix )? function_subprogram
					{
					// MFortranParser2018.g:6346:7: ( prefix )?
					int alt573=2;
					int LA573_0 = input.LA(1);
					if ( (LA573_0==CHARACTER||LA573_0==CLASS||LA573_0==COMPLEX||(LA573_0 >= DOUBLE && LA573_0 <= DOUBLEPRECISION)||LA573_0==ELEMENTAL||LA573_0==IMPURE||LA573_0==INTEGER||LA573_0==LOGICAL||LA573_0==MODULE||LA573_0==NON_RECURSIVE||LA573_0==PURE||(LA573_0 >= REAL && LA573_0 <= RECURSIVE)||LA573_0==TYPE) ) {
						alt573=1;
					}
					switch (alt573) {
						case 1 :
							// MFortranParser2018.g:6346:8: prefix
							{
							pushFollow(FOLLOW_prefix_in_module_subprogram26213);
							prefix();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasPref=true;}
							}
							break;

					}

					pushFollow(FOLLOW_function_subprogram_in_module_subprogram26219);
					function_subprogram();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:6347:7: subroutine_subprogram
					{
					pushFollow(FOLLOW_subroutine_subprogram_in_module_subprogram26227);
					subroutine_subprogram();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 3 :
					// MFortranParser2018.g:6348:7: separate_module_subprogram
					{
					pushFollow(FOLLOW_separate_module_subprogram_in_module_subprogram26235);
					separate_module_subprogram();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.module_subprogram(hasPref);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "module_subprogram"



	// $ANTLR start "use_stmt"
	// MFortranParser2018.g:6354:1: use_stmt : ( (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT ( COMMA rename_list )? end_of_stmt | (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT COMMA ONLY COLON ( only_list )? end_of_stmt );
	public final void use_stmt() throws RecognitionException {
		Token USE549=null;
		Token IDENT550=null;
		Token USE552=null;
		Token IDENT553=null;
		Token ONLY554=null;
		Token lbl =null;
		Token end_of_stmt551 =null;
		Token end_of_stmt555 =null;


		  boolean hasMN = false; 
		  boolean hasRL = false;
		  boolean hasOL = false;

		try {
			// MFortranParser2018.g:6363:5: ( (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT ( COMMA rename_list )? end_of_stmt | (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT COMMA ONLY COLON ( only_list )? end_of_stmt )
			int alt583=2;
			int LA583_0 = input.LA(1);
			if ( (LA583_0==DIGIT_STR) ) {
				int LA583_1 = input.LA(2);
				if ( (LA583_1==USE) ) {
					switch ( input.LA(3) ) {
					case COMMA:
						{
						int LA583_3 = input.LA(4);
						if ( (LA583_3==INTRINSIC) ) {
							int LA583_6 = input.LA(5);
							if ( (LA583_6==COLON_COLON) ) {
								int LA583_4 = input.LA(6);
								if ( (LA583_4==IDENT) ) {
									int LA583_5 = input.LA(7);
									if ( (LA583_5==COMMA) ) {
										int LA583_8 = input.LA(8);
										if ( (LA583_8==ONLY) ) {
											alt583=2;
										}
										else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
											alt583=1;
										}

										else {
											if (state.backtracking>0) {state.failed=true; return;}
											int nvaeMark = input.mark();
											try {
												for (int nvaeConsume = 0; nvaeConsume < 8 - 1; nvaeConsume++) {
													input.consume();
												}
												NoViableAltException nvae =
													new NoViableAltException("", 583, 8, input);
												throw nvae;
											} finally {
												input.rewind(nvaeMark);
											}
										}

									}
									else if ( (LA583_5==EOF||LA583_5==EOS) ) {
										alt583=1;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 7 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 583, 5, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}

								else {
									if (state.backtracking>0) {state.failed=true; return;}
									int nvaeMark = input.mark();
									try {
										for (int nvaeConsume = 0; nvaeConsume < 6 - 1; nvaeConsume++) {
											input.consume();
										}
										NoViableAltException nvae =
											new NoViableAltException("", 583, 4, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 6, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA583_3==NON_INTRINSIC) ) {
							int LA583_7 = input.LA(5);
							if ( (LA583_7==COLON_COLON) ) {
								int LA583_4 = input.LA(6);
								if ( (LA583_4==IDENT) ) {
									int LA583_5 = input.LA(7);
									if ( (LA583_5==COMMA) ) {
										int LA583_8 = input.LA(8);
										if ( (LA583_8==ONLY) ) {
											alt583=2;
										}
										else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
											alt583=1;
										}

										else {
											if (state.backtracking>0) {state.failed=true; return;}
											int nvaeMark = input.mark();
											try {
												for (int nvaeConsume = 0; nvaeConsume < 8 - 1; nvaeConsume++) {
													input.consume();
												}
												NoViableAltException nvae =
													new NoViableAltException("", 583, 8, input);
												throw nvae;
											} finally {
												input.rewind(nvaeMark);
											}
										}

									}
									else if ( (LA583_5==EOF||LA583_5==EOS) ) {
										alt583=1;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 7 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 583, 5, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}

								else {
									if (state.backtracking>0) {state.failed=true; return;}
									int nvaeMark = input.mark();
									try {
										for (int nvaeConsume = 0; nvaeConsume < 6 - 1; nvaeConsume++) {
											input.consume();
										}
										NoViableAltException nvae =
											new NoViableAltException("", 583, 4, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 7, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 3, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

						}
						break;
					case COLON_COLON:
						{
						int LA583_4 = input.LA(4);
						if ( (LA583_4==IDENT) ) {
							int LA583_5 = input.LA(5);
							if ( (LA583_5==COMMA) ) {
								int LA583_8 = input.LA(6);
								if ( (LA583_8==ONLY) ) {
									alt583=2;
								}
								else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
									alt583=1;
								}

								else {
									if (state.backtracking>0) {state.failed=true; return;}
									int nvaeMark = input.mark();
									try {
										for (int nvaeConsume = 0; nvaeConsume < 6 - 1; nvaeConsume++) {
											input.consume();
										}
										NoViableAltException nvae =
											new NoViableAltException("", 583, 8, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

							}
							else if ( (LA583_5==EOF||LA583_5==EOS) ) {
								alt583=1;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 5, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 4, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

						}
						break;
					case IDENT:
						{
						int LA583_5 = input.LA(4);
						if ( (LA583_5==COMMA) ) {
							int LA583_8 = input.LA(5);
							if ( (LA583_8==ONLY) ) {
								alt583=2;
							}
							else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
								alt583=1;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 8, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA583_5==EOF||LA583_5==EOS) ) {
							alt583=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 583, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 583, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA583_0==USE) ) {
				switch ( input.LA(2) ) {
				case COMMA:
					{
					int LA583_3 = input.LA(3);
					if ( (LA583_3==INTRINSIC) ) {
						int LA583_6 = input.LA(4);
						if ( (LA583_6==COLON_COLON) ) {
							int LA583_4 = input.LA(5);
							if ( (LA583_4==IDENT) ) {
								int LA583_5 = input.LA(6);
								if ( (LA583_5==COMMA) ) {
									int LA583_8 = input.LA(7);
									if ( (LA583_8==ONLY) ) {
										alt583=2;
									}
									else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
										alt583=1;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 7 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 583, 8, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}
								else if ( (LA583_5==EOF||LA583_5==EOS) ) {
									alt583=1;
								}

								else {
									if (state.backtracking>0) {state.failed=true; return;}
									int nvaeMark = input.mark();
									try {
										for (int nvaeConsume = 0; nvaeConsume < 6 - 1; nvaeConsume++) {
											input.consume();
										}
										NoViableAltException nvae =
											new NoViableAltException("", 583, 5, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 4, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA583_3==NON_INTRINSIC) ) {
						int LA583_7 = input.LA(4);
						if ( (LA583_7==COLON_COLON) ) {
							int LA583_4 = input.LA(5);
							if ( (LA583_4==IDENT) ) {
								int LA583_5 = input.LA(6);
								if ( (LA583_5==COMMA) ) {
									int LA583_8 = input.LA(7);
									if ( (LA583_8==ONLY) ) {
										alt583=2;
									}
									else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
										alt583=1;
									}

									else {
										if (state.backtracking>0) {state.failed=true; return;}
										int nvaeMark = input.mark();
										try {
											for (int nvaeConsume = 0; nvaeConsume < 7 - 1; nvaeConsume++) {
												input.consume();
											}
											NoViableAltException nvae =
												new NoViableAltException("", 583, 8, input);
											throw nvae;
										} finally {
											input.rewind(nvaeMark);
										}
									}

								}
								else if ( (LA583_5==EOF||LA583_5==EOS) ) {
									alt583=1;
								}

								else {
									if (state.backtracking>0) {state.failed=true; return;}
									int nvaeMark = input.mark();
									try {
										for (int nvaeConsume = 0; nvaeConsume < 6 - 1; nvaeConsume++) {
											input.consume();
										}
										NoViableAltException nvae =
											new NoViableAltException("", 583, 5, input);
										throw nvae;
									} finally {
										input.rewind(nvaeMark);
									}
								}

							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 4, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 7, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 583, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case COLON_COLON:
					{
					int LA583_4 = input.LA(3);
					if ( (LA583_4==IDENT) ) {
						int LA583_5 = input.LA(4);
						if ( (LA583_5==COMMA) ) {
							int LA583_8 = input.LA(5);
							if ( (LA583_8==ONLY) ) {
								alt583=2;
							}
							else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
								alt583=1;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 583, 8, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}
						else if ( (LA583_5==EOF||LA583_5==EOS) ) {
							alt583=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 5, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 583, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case IDENT:
					{
					int LA583_5 = input.LA(3);
					if ( (LA583_5==COMMA) ) {
						int LA583_8 = input.LA(4);
						if ( (LA583_8==ONLY) ) {
							alt583=2;
						}
						else if ( (LA583_8==IDENT||LA583_8==OPERATOR) ) {
							alt583=1;
						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 583, 8, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA583_5==EOF||LA583_5==EOS) ) {
						alt583=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 583, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 583, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 583, 0, input);
				throw nvae;
			}

			switch (alt583) {
				case 1 :
					// MFortranParser2018.g:6363:7: (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT ( COMMA rename_list )? end_of_stmt
					{
					// MFortranParser2018.g:6363:7: (lbl= label )?
					int alt575=2;
					int LA575_0 = input.LA(1);
					if ( (LA575_0==DIGIT_STR) ) {
						alt575=1;
					}
					switch (alt575) {
						case 1 :
							// MFortranParser2018.g:6363:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_use_stmt26265);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					USE549=(Token)match(input,USE,FOLLOW_USE_in_use_stmt26276); if (state.failed) return;
					// MFortranParser2018.g:6364:11: ( ( COMMA module_nature )? COLON_COLON )?
					int alt577=2;
					int LA577_0 = input.LA(1);
					if ( ((LA577_0 >= COLON_COLON && LA577_0 <= COMMA)) ) {
						alt577=1;
					}
					switch (alt577) {
						case 1 :
							// MFortranParser2018.g:6364:12: ( COMMA module_nature )? COLON_COLON
							{
							// MFortranParser2018.g:6364:12: ( COMMA module_nature )?
							int alt576=2;
							int LA576_0 = input.LA(1);
							if ( (LA576_0==COMMA) ) {
								alt576=1;
							}
							switch (alt576) {
								case 1 :
									// MFortranParser2018.g:6364:13: COMMA module_nature
									{
									match(input,COMMA,FOLLOW_COMMA_in_use_stmt26280); if (state.failed) return;
									pushFollow(FOLLOW_module_nature_in_use_stmt26282);
									module_nature();
									state._fsp--;
									if (state.failed) return;
									if ( state.backtracking==0 ) {hasMN=true;}
									}
									break;

							}

							match(input,COLON_COLON,FOLLOW_COLON_COLON_in_use_stmt26288); if (state.failed) return;
							}
							break;

					}

					IDENT550=(Token)match(input,IDENT,FOLLOW_IDENT_in_use_stmt26299); if (state.failed) return;
					// MFortranParser2018.g:6365:13: ( COMMA rename_list )?
					int alt578=2;
					int LA578_0 = input.LA(1);
					if ( (LA578_0==COMMA) ) {
						alt578=1;
					}
					switch (alt578) {
						case 1 :
							// MFortranParser2018.g:6365:14: COMMA rename_list
							{
							match(input,COMMA,FOLLOW_COMMA_in_use_stmt26302); if (state.failed) return;
							pushFollow(FOLLOW_rename_list_in_use_stmt26304);
							rename_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasRL=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_use_stmt26317);
					end_of_stmt551=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.use_stmt(lbl, 
					              USE549, IDENT550, null, end_of_stmt551, hasMN, hasRL, hasOL);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6369:7: (lbl= label )? USE ( ( COMMA module_nature )? COLON_COLON )? IDENT COMMA ONLY COLON ( only_list )? end_of_stmt
					{
					// MFortranParser2018.g:6369:7: (lbl= label )?
					int alt579=2;
					int LA579_0 = input.LA(1);
					if ( (LA579_0==DIGIT_STR) ) {
						alt579=1;
					}
					switch (alt579) {
						case 1 :
							// MFortranParser2018.g:6369:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_use_stmt26338);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					USE552=(Token)match(input,USE,FOLLOW_USE_in_use_stmt26349); if (state.failed) return;
					// MFortranParser2018.g:6370:11: ( ( COMMA module_nature )? COLON_COLON )?
					int alt581=2;
					int LA581_0 = input.LA(1);
					if ( ((LA581_0 >= COLON_COLON && LA581_0 <= COMMA)) ) {
						alt581=1;
					}
					switch (alt581) {
						case 1 :
							// MFortranParser2018.g:6370:12: ( COMMA module_nature )? COLON_COLON
							{
							// MFortranParser2018.g:6370:12: ( COMMA module_nature )?
							int alt580=2;
							int LA580_0 = input.LA(1);
							if ( (LA580_0==COMMA) ) {
								alt580=1;
							}
							switch (alt580) {
								case 1 :
									// MFortranParser2018.g:6370:13: COMMA module_nature
									{
									match(input,COMMA,FOLLOW_COMMA_in_use_stmt26353); if (state.failed) return;
									pushFollow(FOLLOW_module_nature_in_use_stmt26355);
									module_nature();
									state._fsp--;
									if (state.failed) return;
									if ( state.backtracking==0 ) {hasMN=true;}
									}
									break;

							}

							match(input,COLON_COLON,FOLLOW_COLON_COLON_in_use_stmt26361); if (state.failed) return;
							}
							break;

					}

					IDENT553=(Token)match(input,IDENT,FOLLOW_IDENT_in_use_stmt26372); if (state.failed) return;
					match(input,COMMA,FOLLOW_COMMA_in_use_stmt26374); if (state.failed) return;
					ONLY554=(Token)match(input,ONLY,FOLLOW_ONLY_in_use_stmt26376); if (state.failed) return;
					match(input,COLON,FOLLOW_COLON_in_use_stmt26378); if (state.failed) return;
					// MFortranParser2018.g:6371:30: ( only_list )?
					int alt582=2;
					int LA582_0 = input.LA(1);
					if ( (LA582_0==ASSIGNMENT||LA582_0==IDENT||LA582_0==OPERATOR||LA582_0==READ||LA582_0==WRITE) ) {
						alt582=1;
					}
					switch (alt582) {
						case 1 :
							// MFortranParser2018.g:6371:31: only_list
							{
							pushFollow(FOLLOW_only_list_in_use_stmt26381);
							only_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasOL=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_use_stmt26394);
					end_of_stmt555=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.use_stmt(lbl, 
					              USE552, IDENT553, ONLY554, end_of_stmt555, hasMN, hasRL, hasOL);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "use_stmt"



	// $ANTLR start "module_nature"
	// MFortranParser2018.g:6380:1: module_nature : ( INTRINSIC | NON_INTRINSIC );
	public final void module_nature() throws RecognitionException {
		Token INTRINSIC556=null;
		Token NON_INTRINSIC557=null;

		try {
			// MFortranParser2018.g:6381:5: ( INTRINSIC | NON_INTRINSIC )
			int alt584=2;
			int LA584_0 = input.LA(1);
			if ( (LA584_0==INTRINSIC) ) {
				alt584=1;
			}
			else if ( (LA584_0==NON_INTRINSIC) ) {
				alt584=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 584, 0, input);
				throw nvae;
			}

			switch (alt584) {
				case 1 :
					// MFortranParser2018.g:6381:7: INTRINSIC
					{
					INTRINSIC556=(Token)match(input,INTRINSIC,FOLLOW_INTRINSIC_in_module_nature26423); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.module_nature(INTRINSIC556); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6383:7: NON_INTRINSIC
					{
					NON_INTRINSIC557=(Token)match(input,NON_INTRINSIC,FOLLOW_NON_INTRINSIC_in_module_nature26444); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.module_nature(NON_INTRINSIC557); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "module_nature"



	// $ANTLR start "rename"
	// MFortranParser2018.g:6395:1: rename : (id1= IDENT EQ_GT id2= IDENT |op1= OPERATOR LPAREN defOp1= DEFINED_OP RPAREN EQ_GT op2= OPERATOR LPAREN defOp2= DEFINED_OP RPAREN );
	public final void rename() throws RecognitionException {
		Token id1=null;
		Token id2=null;
		Token op1=null;
		Token defOp1=null;
		Token op2=null;
		Token defOp2=null;

		try {
			// MFortranParser2018.g:6396:5: (id1= IDENT EQ_GT id2= IDENT |op1= OPERATOR LPAREN defOp1= DEFINED_OP RPAREN EQ_GT op2= OPERATOR LPAREN defOp2= DEFINED_OP RPAREN )
			int alt585=2;
			int LA585_0 = input.LA(1);
			if ( (LA585_0==IDENT) ) {
				alt585=1;
			}
			else if ( (LA585_0==OPERATOR) ) {
				alt585=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 585, 0, input);
				throw nvae;
			}

			switch (alt585) {
				case 1 :
					// MFortranParser2018.g:6396:7: id1= IDENT EQ_GT id2= IDENT
					{
					id1=(Token)match(input,IDENT,FOLLOW_IDENT_in_rename26477); if (state.failed) return;
					match(input,EQ_GT,FOLLOW_EQ_GT_in_rename26479); if (state.failed) return;
					id2=(Token)match(input,IDENT,FOLLOW_IDENT_in_rename26483); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.rename(id1, id2, null, null, null, null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6398:7: op1= OPERATOR LPAREN defOp1= DEFINED_OP RPAREN EQ_GT op2= OPERATOR LPAREN defOp2= DEFINED_OP RPAREN
					{
					op1=(Token)match(input,OPERATOR,FOLLOW_OPERATOR_in_rename26503); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_rename26505); if (state.failed) return;
					defOp1=(Token)match(input,DEFINED_OP,FOLLOW_DEFINED_OP_in_rename26509); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_rename26511); if (state.failed) return;
					match(input,EQ_GT,FOLLOW_EQ_GT_in_rename26520); if (state.failed) return;
					op2=(Token)match(input,OPERATOR,FOLLOW_OPERATOR_in_rename26524); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_rename26526); if (state.failed) return;
					defOp2=(Token)match(input,DEFINED_OP,FOLLOW_DEFINED_OP_in_rename26530); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_rename26532); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.rename(null, null, op1, defOp1, op2, defOp2); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "rename"



	// $ANTLR start "rename_list"
	// MFortranParser2018.g:6403:1: rename_list : rename ( COMMA rename )* ;
	public final void rename_list() throws RecognitionException {

		  int numRn = 1;

		try {
			// MFortranParser2018.g:6410:5: ( rename ( COMMA rename )* )
			// MFortranParser2018.g:6410:7: rename ( COMMA rename )*
			{
			pushFollow(FOLLOW_rename_in_rename_list26568);
			rename();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6411:7: ( COMMA rename )*
			loop586:
			while (true) {
				int alt586=2;
				int LA586_0 = input.LA(1);
				if ( (LA586_0==COMMA) ) {
					alt586=1;
				}

				switch (alt586) {
				case 1 :
					// MFortranParser2018.g:6411:9: COMMA rename
					{
					match(input,COMMA,FOLLOW_COMMA_in_rename_list26578); if (state.failed) return;
					pushFollow(FOLLOW_rename_in_rename_list26580);
					rename();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numRn++;}
					}
					break;

				default :
					break loop586;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.rename_list(numRn);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "rename_list"



	// $ANTLR start "only"
	// MFortranParser2018.g:6420:1: only : ( generic_spec | rename );
	public final void only() throws RecognitionException {

		  boolean isRenamed = false;

		try {
			// MFortranParser2018.g:6427:5: ( generic_spec | rename )
			int alt587=2;
			switch ( input.LA(1) ) {
			case IDENT:
				{
				int LA587_1 = input.LA(2);
				if ( (LA587_1==EQ_GT) ) {
					alt587=2;
				}
				else if ( (LA587_1==EOF||LA587_1==COMMA||LA587_1==EOS) ) {
					alt587=1;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 587, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case OPERATOR:
				{
				int LA587_2 = input.LA(2);
				if ( (LA587_2==LPAREN) ) {
					int LA587_5 = input.LA(3);
					if ( (LA587_5==DEFINED_OP) ) {
						int LA587_6 = input.LA(4);
						if ( (LA587_6==RPAREN) ) {
							int LA587_7 = input.LA(5);
							if ( (LA587_7==EQ_GT) ) {
								alt587=2;
							}
							else if ( (LA587_7==EOF||LA587_7==COMMA||LA587_7==EOS) ) {
								alt587=1;
							}

							else {
								if (state.backtracking>0) {state.failed=true; return;}
								int nvaeMark = input.mark();
								try {
									for (int nvaeConsume = 0; nvaeConsume < 5 - 1; nvaeConsume++) {
										input.consume();
									}
									NoViableAltException nvae =
										new NoViableAltException("", 587, 7, input);
									throw nvae;
								} finally {
									input.rewind(nvaeMark);
								}
							}

						}

						else {
							if (state.backtracking>0) {state.failed=true; return;}
							int nvaeMark = input.mark();
							try {
								for (int nvaeConsume = 0; nvaeConsume < 4 - 1; nvaeConsume++) {
									input.consume();
								}
								NoViableAltException nvae =
									new NoViableAltException("", 587, 6, input);
								throw nvae;
							} finally {
								input.rewind(nvaeMark);
							}
						}

					}
					else if ( (LA587_5==AND||LA587_5==ASTERISK||LA587_5==EQ||(LA587_5 >= EQV && LA587_5 <= EQ_EQ)||LA587_5==GE||(LA587_5 >= GREATERTHAN && LA587_5 <= GT)||LA587_5==LE||(LA587_5 >= LESSTHAN && LA587_5 <= LESSTHAN_EQ)||LA587_5==LT||LA587_5==MINUS||(LA587_5 >= NE && LA587_5 <= NEQV)||LA587_5==NOT||LA587_5==OR||LA587_5==PLUS||LA587_5==POWER||(LA587_5 >= SLASH && LA587_5 <= SLASH_SLASH)) ) {
						alt587=1;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 587, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 587, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ASSIGNMENT:
			case READ:
			case WRITE:
				{
				alt587=1;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 587, 0, input);
				throw nvae;
			}
			switch (alt587) {
				case 1 :
					// MFortranParser2018.g:6427:7: generic_spec
					{
					pushFollow(FOLLOW_generic_spec_in_only26613);
					generic_spec();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:6428:7: rename
					{
					pushFollow(FOLLOW_rename_in_only26622);
					rename();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {isRenamed=true;}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.only(isRenamed);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "only"



	// $ANTLR start "only_list"
	// MFortranParser2018.g:6431:1: only_list : only ( COMMA only )* ;
	public final void only_list() throws RecognitionException {

		  int numO = 1;

		try {
			// MFortranParser2018.g:6438:5: ( only ( COMMA only )* )
			// MFortranParser2018.g:6438:7: only ( COMMA only )*
			{
			pushFollow(FOLLOW_only_in_only_list26649);
			only();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6439:7: ( COMMA only )*
			loop588:
			while (true) {
				int alt588=2;
				int LA588_0 = input.LA(1);
				if ( (LA588_0==COMMA) ) {
					alt588=1;
				}

				switch (alt588) {
				case 1 :
					// MFortranParser2018.g:6439:9: COMMA only
					{
					match(input,COMMA,FOLLOW_COMMA_in_only_list26659); if (state.failed) return;
					pushFollow(FOLLOW_only_in_only_list26661);
					only();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numO++;}
					}
					break;

				default :
					break loop588;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.only_list(numO);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "only_list"



	// $ANTLR start "submodule"
	// MFortranParser2018.g:6447:1: submodule : submodule_stmt specification_part ( module_subprogram_part )? end_submodule_stmt ;
	public final void submodule() throws RecognitionException {

		  boolean hasMSP = false;

		try {
			// MFortranParser2018.g:6454:5: ( submodule_stmt specification_part ( module_subprogram_part )? end_submodule_stmt )
			// MFortranParser2018.g:6454:7: submodule_stmt specification_part ( module_subprogram_part )? end_submodule_stmt
			{
			pushFollow(FOLLOW_submodule_stmt_in_submodule26693);
			submodule_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_submodule26701);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6456:7: ( module_subprogram_part )?
			int alt589=2;
			int LA589_0 = input.LA(1);
			if ( (LA589_0==DIGIT_STR) ) {
				int LA589_1 = input.LA(2);
				if ( (LA589_1==CONTAINS) ) {
					alt589=1;
				}
			}
			else if ( (LA589_0==CONTAINS) ) {
				alt589=1;
			}
			switch (alt589) {
				case 1 :
					// MFortranParser2018.g:6456:9: module_subprogram_part
					{
					pushFollow(FOLLOW_module_subprogram_part_in_submodule26711);
					module_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasMSP=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_submodule_stmt_in_submodule26724);
			end_submodule_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.submodule(hasMSP);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "submodule"



	// $ANTLR start "submodule_stmt"
	// MFortranParser2018.g:6464:1: submodule_stmt : (lbl= label )? SUBMODULE LPAREN parent_identifier RPAREN IDENT end_of_stmt ;
	public final void submodule_stmt() throws RecognitionException {
		Token SUBMODULE558=null;
		Token IDENT559=null;
		Token lbl =null;
		Token end_of_stmt560 =null;



		try {
			// MFortranParser2018.g:6470:5: ( (lbl= label )? SUBMODULE LPAREN parent_identifier RPAREN IDENT end_of_stmt )
			// MFortranParser2018.g:6470:7: (lbl= label )? SUBMODULE LPAREN parent_identifier RPAREN IDENT end_of_stmt
			{
			// MFortranParser2018.g:6470:7: (lbl= label )?
			int alt590=2;
			int LA590_0 = input.LA(1);
			if ( (LA590_0==DIGIT_STR) ) {
				alt590=1;
			}
			switch (alt590) {
				case 1 :
					// MFortranParser2018.g:6470:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_submodule_stmt26754);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			SUBMODULE558=(Token)match(input,SUBMODULE,FOLLOW_SUBMODULE_in_submodule_stmt26765); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_submodule_stmt26767); if (state.failed) return;
			pushFollow(FOLLOW_parent_identifier_in_submodule_stmt26769);
			parent_identifier();
			state._fsp--;
			if (state.failed) return;
			match(input,RPAREN,FOLLOW_RPAREN_in_submodule_stmt26771); if (state.failed) return;
			IDENT559=(Token)match(input,IDENT,FOLLOW_IDENT_in_submodule_stmt26773); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_submodule_stmt26781);
			end_of_stmt560=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.submodule_stmt(lbl, 
			              SUBMODULE558, IDENT559, end_of_stmt560);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "submodule_stmt"



	// $ANTLR start "parent_identifier"
	// MFortranParser2018.g:6480:1: parent_identifier : ancestor= IDENT ( COLON parent= IDENT )? ;
	public final void parent_identifier() throws RecognitionException {
		Token ancestor=null;
		Token parent=null;

		try {
			// MFortranParser2018.g:6481:5: (ancestor= IDENT ( COLON parent= IDENT )? )
			// MFortranParser2018.g:6481:7: ancestor= IDENT ( COLON parent= IDENT )?
			{
			ancestor=(Token)match(input,IDENT,FOLLOW_IDENT_in_parent_identifier26812); if (state.failed) return;
			// MFortranParser2018.g:6482:7: ( COLON parent= IDENT )?
			int alt591=2;
			int LA591_0 = input.LA(1);
			if ( (LA591_0==COLON) ) {
				alt591=1;
			}
			switch (alt591) {
				case 1 :
					// MFortranParser2018.g:6482:9: COLON parent= IDENT
					{
					match(input,COLON,FOLLOW_COLON_in_parent_identifier26822); if (state.failed) return;
					parent=(Token)match(input,IDENT,FOLLOW_IDENT_in_parent_identifier26826); if (state.failed) return;
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.parent_identifier(ancestor, parent); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "parent_identifier"



	// $ANTLR start "end_submodule_stmt"
	// MFortranParser2018.g:6489:1: end_submodule_stmt : (lbl= label )? END (smod= SUBMODULE (sname= IDENT )? )? end_of_stmt ;
	public final void end_submodule_stmt() throws RecognitionException {
		Token smod=null;
		Token sname=null;
		Token END561=null;
		Token lbl =null;
		Token end_of_stmt562 =null;

		try {
			// MFortranParser2018.g:6493:5: ( (lbl= label )? END (smod= SUBMODULE (sname= IDENT )? )? end_of_stmt )
			// MFortranParser2018.g:6493:7: (lbl= label )? END (smod= SUBMODULE (sname= IDENT )? )? end_of_stmt
			{
			// MFortranParser2018.g:6493:7: (lbl= label )?
			int alt592=2;
			int LA592_0 = input.LA(1);
			if ( (LA592_0==DIGIT_STR) ) {
				alt592=1;
			}
			switch (alt592) {
				case 1 :
					// MFortranParser2018.g:6493:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_submodule_stmt26864);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END561=(Token)match(input,END,FOLLOW_END_in_end_submodule_stmt26874); if (state.failed) return;
			// MFortranParser2018.g:6494:11: (smod= SUBMODULE (sname= IDENT )? )?
			int alt594=2;
			int LA594_0 = input.LA(1);
			if ( (LA594_0==SUBMODULE) ) {
				alt594=1;
			}
			switch (alt594) {
				case 1 :
					// MFortranParser2018.g:6494:12: smod= SUBMODULE (sname= IDENT )?
					{
					smod=(Token)match(input,SUBMODULE,FOLLOW_SUBMODULE_in_end_submodule_stmt26879); if (state.failed) return;
					// MFortranParser2018.g:6494:27: (sname= IDENT )?
					int alt593=2;
					int LA593_0 = input.LA(1);
					if ( (LA593_0==IDENT) ) {
						alt593=1;
					}
					switch (alt593) {
						case 1 :
							// MFortranParser2018.g:6494:28: sname= IDENT
							{
							sname=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_submodule_stmt26884); if (state.failed) return;
							}
							break;

					}

					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_submodule_stmt26896);
			end_of_stmt562=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_submodule_stmt(lbl, 
			              END561, smod, sname, end_of_stmt562);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_submodule_stmt"



	// $ANTLR start "block_data"
	// MFortranParser2018.g:6505:1: block_data : block_data_stmt specification_part end_block_data_stmt ;
	public final void block_data() throws RecognitionException {
		try {
			// MFortranParser2018.g:6509:5: ( block_data_stmt specification_part end_block_data_stmt )
			// MFortranParser2018.g:6509:7: block_data_stmt specification_part end_block_data_stmt
			{
			pushFollow(FOLLOW_block_data_stmt_in_block_data26930);
			block_data_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_block_data26938);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_block_data_stmt_in_block_data26946);
			end_block_data_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.block_data();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "block_data"



	// $ANTLR start "block_data_stmt"
	// MFortranParser2018.g:6517:1: block_data_stmt : ( (lbl= label )? BLOCK DATA ( IDENT )? end_of_stmt | (lbl= label )? BLOCKDATA ( IDENT )? end_of_stmt );
	public final void block_data_stmt() throws RecognitionException {
		Token IDENT563=null;
		Token BLOCK564=null;
		Token DATA565=null;
		Token IDENT567=null;
		Token BLOCKDATA568=null;
		Token lbl =null;
		Token end_of_stmt566 =null;
		Token end_of_stmt569 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:6524:5: ( (lbl= label )? BLOCK DATA ( IDENT )? end_of_stmt | (lbl= label )? BLOCKDATA ( IDENT )? end_of_stmt )
			int alt599=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA599_1 = input.LA(2);
				if ( (LA599_1==BLOCK) ) {
					alt599=1;
				}
				else if ( (LA599_1==BLOCKDATA) ) {
					alt599=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 599, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case BLOCK:
				{
				alt599=1;
				}
				break;
			case BLOCKDATA:
				{
				alt599=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 599, 0, input);
				throw nvae;
			}
			switch (alt599) {
				case 1 :
					// MFortranParser2018.g:6524:7: (lbl= label )? BLOCK DATA ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6524:7: (lbl= label )?
					int alt595=2;
					int LA595_0 = input.LA(1);
					if ( (LA595_0==DIGIT_STR) ) {
						alt595=1;
					}
					switch (alt595) {
						case 1 :
							// MFortranParser2018.g:6524:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_block_data_stmt26976);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					BLOCK564=(Token)match(input,BLOCK,FOLLOW_BLOCK_in_block_data_stmt26987); if (state.failed) return;
					DATA565=(Token)match(input,DATA,FOLLOW_DATA_in_block_data_stmt26989); if (state.failed) return;
					// MFortranParser2018.g:6525:18: ( IDENT )?
					int alt596=2;
					int LA596_0 = input.LA(1);
					if ( (LA596_0==IDENT) ) {
						alt596=1;
					}
					switch (alt596) {
						case 1 :
							// MFortranParser2018.g:6525:19: IDENT
							{
							IDENT563=(Token)match(input,IDENT,FOLLOW_IDENT_in_block_data_stmt26992); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT563;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_block_data_stmt27005);
					end_of_stmt566=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.block_data_stmt(lbl, 
					              BLOCK564, DATA565, id, end_of_stmt566);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6529:7: (lbl= label )? BLOCKDATA ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6529:7: (lbl= label )?
					int alt597=2;
					int LA597_0 = input.LA(1);
					if ( (LA597_0==DIGIT_STR) ) {
						alt597=1;
					}
					switch (alt597) {
						case 1 :
							// MFortranParser2018.g:6529:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_block_data_stmt27026);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					BLOCKDATA568=(Token)match(input,BLOCKDATA,FOLLOW_BLOCKDATA_in_block_data_stmt27037); if (state.failed) return;
					// MFortranParser2018.g:6530:17: ( IDENT )?
					int alt598=2;
					int LA598_0 = input.LA(1);
					if ( (LA598_0==IDENT) ) {
						alt598=1;
					}
					switch (alt598) {
						case 1 :
							// MFortranParser2018.g:6530:18: IDENT
							{
							IDENT567=(Token)match(input,IDENT,FOLLOW_IDENT_in_block_data_stmt27040); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT567;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_block_data_stmt27052);
					end_of_stmt569=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.block_data_stmt(lbl, 
					              BLOCKDATA568, null, id, end_of_stmt569);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "block_data_stmt"



	// $ANTLR start "end_block_data_stmt"
	// MFortranParser2018.g:6539:1: end_block_data_stmt : ( (lbl= label )? END BLOCK DATA ( IDENT )? end_of_stmt | (lbl= label )? END BLOCKDATA ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt );
	public final void end_block_data_stmt() throws RecognitionException {
		Token IDENT570=null;
		Token END571=null;
		Token BLOCK572=null;
		Token DATA573=null;
		Token IDENT575=null;
		Token END576=null;
		Token BLOCKDATA577=null;
		Token END579=null;
		Token lbl =null;
		Token end_of_stmt574 =null;
		Token end_of_stmt578 =null;
		Token end_of_stmt580 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:6546:5: ( (lbl= label )? END BLOCK DATA ( IDENT )? end_of_stmt | (lbl= label )? END BLOCKDATA ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt )
			int alt605=3;
			int LA605_0 = input.LA(1);
			if ( (LA605_0==DIGIT_STR) ) {
				int LA605_1 = input.LA(2);
				if ( (LA605_1==END) ) {
					switch ( input.LA(3) ) {
					case BLOCK:
						{
						alt605=1;
						}
						break;
					case BLOCKDATA:
						{
						alt605=2;
						}
						break;
					case EOF:
					case EOS:
						{
						alt605=3;
						}
						break;
					default:
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 605, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 605, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA605_0==END) ) {
				switch ( input.LA(2) ) {
				case BLOCK:
					{
					alt605=1;
					}
					break;
				case BLOCKDATA:
					{
					alt605=2;
					}
					break;
				case EOF:
				case EOS:
					{
					alt605=3;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 605, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 605, 0, input);
				throw nvae;
			}

			switch (alt605) {
				case 1 :
					// MFortranParser2018.g:6546:7: (lbl= label )? END BLOCK DATA ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6546:7: (lbl= label )?
					int alt600=2;
					int LA600_0 = input.LA(1);
					if ( (LA600_0==DIGIT_STR) ) {
						alt600=1;
					}
					switch (alt600) {
						case 1 :
							// MFortranParser2018.g:6546:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_block_data_stmt27092);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END571=(Token)match(input,END,FOLLOW_END_in_end_block_data_stmt27103); if (state.failed) return;
					BLOCK572=(Token)match(input,BLOCK,FOLLOW_BLOCK_in_end_block_data_stmt27105); if (state.failed) return;
					DATA573=(Token)match(input,DATA,FOLLOW_DATA_in_end_block_data_stmt27107); if (state.failed) return;
					// MFortranParser2018.g:6547:22: ( IDENT )?
					int alt601=2;
					int LA601_0 = input.LA(1);
					if ( (LA601_0==IDENT) ) {
						alt601=1;
					}
					switch (alt601) {
						case 1 :
							// MFortranParser2018.g:6547:23: IDENT
							{
							IDENT570=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_block_data_stmt27110); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT570;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_block_data_stmt27123);
					end_of_stmt574=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_block_data_stmt(lbl, 
					              END571, BLOCK572, DATA573, id, end_of_stmt574);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6551:7: (lbl= label )? END BLOCKDATA ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:6551:7: (lbl= label )?
					int alt602=2;
					int LA602_0 = input.LA(1);
					if ( (LA602_0==DIGIT_STR) ) {
						alt602=1;
					}
					switch (alt602) {
						case 1 :
							// MFortranParser2018.g:6551:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_block_data_stmt27144);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END576=(Token)match(input,END,FOLLOW_END_in_end_block_data_stmt27155); if (state.failed) return;
					BLOCKDATA577=(Token)match(input,BLOCKDATA,FOLLOW_BLOCKDATA_in_end_block_data_stmt27157); if (state.failed) return;
					// MFortranParser2018.g:6552:21: ( IDENT )?
					int alt603=2;
					int LA603_0 = input.LA(1);
					if ( (LA603_0==IDENT) ) {
						alt603=1;
					}
					switch (alt603) {
						case 1 :
							// MFortranParser2018.g:6552:22: IDENT
							{
							IDENT575=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_block_data_stmt27160); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT575;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_block_data_stmt27172);
					end_of_stmt578=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_block_data_stmt(lbl, 
					              END576, BLOCKDATA577, null, id, end_of_stmt578);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:6556:7: (lbl= label )? END end_of_stmt
					{
					// MFortranParser2018.g:6556:7: (lbl= label )?
					int alt604=2;
					int LA604_0 = input.LA(1);
					if ( (LA604_0==DIGIT_STR) ) {
						alt604=1;
					}
					switch (alt604) {
						case 1 :
							// MFortranParser2018.g:6556:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_block_data_stmt27193);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END579=(Token)match(input,END,FOLLOW_END_in_end_block_data_stmt27204); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_end_block_data_stmt27206);
					end_of_stmt580=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_block_data_stmt(lbl, 
					              END579, null, null, id, end_of_stmt580);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_block_data_stmt"



	// $ANTLR start "interface_block"
	// MFortranParser2018.g:6565:1: interface_block : interface_stmt ( interface_specification )* end_interface_stmt ;
	public final void interface_block() throws RecognitionException {
		try {
			// MFortranParser2018.g:6569:5: ( interface_stmt ( interface_specification )* end_interface_stmt )
			// MFortranParser2018.g:6569:7: interface_stmt ( interface_specification )* end_interface_stmt
			{
			pushFollow(FOLLOW_interface_stmt_in_interface_block27240);
			interface_stmt();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6570:7: ( interface_specification )*
			loop606:
			while (true) {
				int alt606=2;
				int LA606_0 = input.LA(1);
				if ( (LA606_0==DIGIT_STR) ) {
					int LA606_1 = input.LA(2);
					if ( (LA606_1==CHARACTER||LA606_1==CLASS||LA606_1==COMPLEX||(LA606_1 >= DOUBLE && LA606_1 <= DOUBLEPRECISION)||LA606_1==ELEMENTAL||LA606_1==FUNCTION||LA606_1==IMPURE||LA606_1==INTEGER||LA606_1==LOGICAL||LA606_1==MODULE||LA606_1==NON_RECURSIVE||LA606_1==PROCEDURE||LA606_1==PURE||(LA606_1 >= REAL && LA606_1 <= RECURSIVE)||LA606_1==SUBROUTINE||LA606_1==TYPE) ) {
						alt606=1;
					}

				}
				else if ( (LA606_0==CHARACTER||LA606_0==CLASS||LA606_0==COMPLEX||(LA606_0 >= DOUBLE && LA606_0 <= DOUBLEPRECISION)||LA606_0==ELEMENTAL||LA606_0==FUNCTION||LA606_0==IMPURE||LA606_0==INTEGER||LA606_0==LOGICAL||LA606_0==MODULE||LA606_0==NON_RECURSIVE||LA606_0==PROCEDURE||LA606_0==PURE||(LA606_0 >= REAL && LA606_0 <= RECURSIVE)||LA606_0==SUBROUTINE||LA606_0==TYPE) ) {
					alt606=1;
				}

				switch (alt606) {
				case 1 :
					// MFortranParser2018.g:6570:9: interface_specification
					{
					pushFollow(FOLLOW_interface_specification_in_interface_block27250);
					interface_specification();
					state._fsp--;
					if (state.failed) return;
					}
					break;

				default :
					break loop606;
				}
			}

			pushFollow(FOLLOW_end_interface_stmt_in_interface_block27261);
			end_interface_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.interface_block();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "interface_block"



	// $ANTLR start "interface_specification"
	// MFortranParser2018.g:6577:1: interface_specification : ( interface_body | procedure_stmt );
	public final void interface_specification() throws RecognitionException {
		try {
			// MFortranParser2018.g:6581:5: ( interface_body | procedure_stmt )
			int alt607=2;
			switch ( input.LA(1) ) {
			case CHARACTER:
			case CLASS:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case ELEMENTAL:
			case FUNCTION:
			case IMPURE:
			case INTEGER:
			case LOGICAL:
			case NON_RECURSIVE:
			case PURE:
			case REAL:
			case RECURSIVE:
			case SUBROUTINE:
			case TYPE:
				{
				alt607=1;
				}
				break;
			case MODULE:
				{
				int LA607_2 = input.LA(2);
				if ( (LA607_2==CHARACTER||LA607_2==CLASS||LA607_2==COMPLEX||LA607_2==DIGIT_STR||(LA607_2 >= DOUBLE && LA607_2 <= DOUBLEPRECISION)||LA607_2==ELEMENTAL||LA607_2==FUNCTION||LA607_2==IMPURE||LA607_2==INTEGER||LA607_2==LOGICAL||LA607_2==MODULE||LA607_2==NON_RECURSIVE||LA607_2==PURE||(LA607_2 >= REAL && LA607_2 <= RECURSIVE)||LA607_2==SUBROUTINE||LA607_2==TYPE) ) {
					alt607=1;
				}
				else if ( (LA607_2==PROCEDURE) ) {
					alt607=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 607, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DIGIT_STR:
				{
				switch ( input.LA(2) ) {
				case CHARACTER:
				case CLASS:
				case COMPLEX:
				case DOUBLE:
				case DOUBLECOMPLEX:
				case DOUBLEPRECISION:
				case ELEMENTAL:
				case FUNCTION:
				case IMPURE:
				case INTEGER:
				case LOGICAL:
				case NON_RECURSIVE:
				case PURE:
				case REAL:
				case RECURSIVE:
				case SUBROUTINE:
				case TYPE:
					{
					alt607=1;
					}
					break;
				case MODULE:
					{
					int LA607_5 = input.LA(3);
					if ( (LA607_5==CHARACTER||LA607_5==CLASS||LA607_5==COMPLEX||(LA607_5 >= DOUBLE && LA607_5 <= DOUBLEPRECISION)||LA607_5==ELEMENTAL||LA607_5==IMPURE||LA607_5==INTEGER||LA607_5==LOGICAL||LA607_5==MODULE||LA607_5==NON_RECURSIVE||LA607_5==PURE||(LA607_5 >= REAL && LA607_5 <= RECURSIVE)||LA607_5==SUBROUTINE||LA607_5==TYPE) ) {
						alt607=1;
					}
					else if ( (LA607_5==PROCEDURE) ) {
						alt607=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 607, 5, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

					}
					break;
				case PROCEDURE:
					{
					alt607=2;
					}
					break;
				default:
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 607, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}
				}
				break;
			case PROCEDURE:
				{
				alt607=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 607, 0, input);
				throw nvae;
			}
			switch (alt607) {
				case 1 :
					// MFortranParser2018.g:6581:7: interface_body
					{
					pushFollow(FOLLOW_interface_body_in_interface_specification27285);
					interface_body();
					state._fsp--;
					if (state.failed) return;
					}
					break;
				case 2 :
					// MFortranParser2018.g:6582:7: procedure_stmt
					{
					pushFollow(FOLLOW_procedure_stmt_in_interface_specification27293);
					procedure_stmt();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  MFPA.interface_specification();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "interface_specification"



	// $ANTLR start "interface_stmt"
	// MFortranParser2018.g:6590:1: interface_stmt : ( (lbl= label )? INTERFACE ( generic_spec )? end_of_stmt | (lbl= label )? ABSTRACT INTERFACE end_of_stmt );
	public final void interface_stmt() throws RecognitionException {
		Token INTERFACE581=null;
		Token ABSTRACT583=null;
		Token INTERFACE584=null;
		Token lbl =null;
		Token end_of_stmt582 =null;
		Token end_of_stmt585 =null;


		  boolean hasGS = false;

		try {
			// MFortranParser2018.g:6597:5: ( (lbl= label )? INTERFACE ( generic_spec )? end_of_stmt | (lbl= label )? ABSTRACT INTERFACE end_of_stmt )
			int alt611=2;
			switch ( input.LA(1) ) {
			case DIGIT_STR:
				{
				int LA611_1 = input.LA(2);
				if ( (LA611_1==INTERFACE) ) {
					alt611=1;
				}
				else if ( (LA611_1==ABSTRACT) ) {
					alt611=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 611, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case INTERFACE:
				{
				alt611=1;
				}
				break;
			case ABSTRACT:
				{
				alt611=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 611, 0, input);
				throw nvae;
			}
			switch (alt611) {
				case 1 :
					// MFortranParser2018.g:6597:7: (lbl= label )? INTERFACE ( generic_spec )? end_of_stmt
					{
					// MFortranParser2018.g:6597:7: (lbl= label )?
					int alt608=2;
					int LA608_0 = input.LA(1);
					if ( (LA608_0==DIGIT_STR) ) {
						alt608=1;
					}
					switch (alt608) {
						case 1 :
							// MFortranParser2018.g:6597:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_interface_stmt27323);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					INTERFACE581=(Token)match(input,INTERFACE,FOLLOW_INTERFACE_in_interface_stmt27335); if (state.failed) return;
					// MFortranParser2018.g:6598:17: ( generic_spec )?
					int alt609=2;
					int LA609_0 = input.LA(1);
					if ( (LA609_0==ASSIGNMENT||LA609_0==IDENT||LA609_0==OPERATOR||LA609_0==READ||LA609_0==WRITE) ) {
						alt609=1;
					}
					switch (alt609) {
						case 1 :
							// MFortranParser2018.g:6598:18: generic_spec
							{
							pushFollow(FOLLOW_generic_spec_in_interface_stmt27338);
							generic_spec();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasGS=true;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_interface_stmt27351);
					end_of_stmt582=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.interface_stmt(lbl, 
					              null, INTERFACE581, end_of_stmt582, hasGS);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6602:7: (lbl= label )? ABSTRACT INTERFACE end_of_stmt
					{
					// MFortranParser2018.g:6602:7: (lbl= label )?
					int alt610=2;
					int LA610_0 = input.LA(1);
					if ( (LA610_0==DIGIT_STR) ) {
						alt610=1;
					}
					switch (alt610) {
						case 1 :
							// MFortranParser2018.g:6602:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_interface_stmt27372);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					ABSTRACT583=(Token)match(input,ABSTRACT,FOLLOW_ABSTRACT_in_interface_stmt27383); if (state.failed) return;
					INTERFACE584=(Token)match(input,INTERFACE,FOLLOW_INTERFACE_in_interface_stmt27385); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_interface_stmt27394);
					end_of_stmt585=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.interface_stmt(lbl, 
					              ABSTRACT583, INTERFACE584, end_of_stmt585, hasGS);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "interface_stmt"



	// $ANTLR start "end_interface_stmt"
	// MFortranParser2018.g:6612:1: end_interface_stmt : (lbl= label )? END INTERFACE ( generic_spec )? end_of_stmt ;
	public final void end_interface_stmt() throws RecognitionException {
		Token END586=null;
		Token INTERFACE587=null;
		Token lbl =null;
		Token end_of_stmt588 =null;


		  boolean hasGS = false;

		try {
			// MFortranParser2018.g:6619:5: ( (lbl= label )? END INTERFACE ( generic_spec )? end_of_stmt )
			// MFortranParser2018.g:6619:7: (lbl= label )? END INTERFACE ( generic_spec )? end_of_stmt
			{
			// MFortranParser2018.g:6619:7: (lbl= label )?
			int alt612=2;
			int LA612_0 = input.LA(1);
			if ( (LA612_0==DIGIT_STR) ) {
				alt612=1;
			}
			switch (alt612) {
				case 1 :
					// MFortranParser2018.g:6619:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_interface_stmt27434);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END586=(Token)match(input,END,FOLLOW_END_in_end_interface_stmt27445); if (state.failed) return;
			INTERFACE587=(Token)match(input,INTERFACE,FOLLOW_INTERFACE_in_end_interface_stmt27447); if (state.failed) return;
			// MFortranParser2018.g:6620:21: ( generic_spec )?
			int alt613=2;
			int LA613_0 = input.LA(1);
			if ( (LA613_0==ASSIGNMENT||LA613_0==IDENT||LA613_0==OPERATOR||LA613_0==READ||LA613_0==WRITE) ) {
				alt613=1;
			}
			switch (alt613) {
				case 1 :
					// MFortranParser2018.g:6620:23: generic_spec
					{
					pushFollow(FOLLOW_generic_spec_in_end_interface_stmt27451);
					generic_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasGS=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_interface_stmt27464);
			end_of_stmt588=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_interface_stmt(lbl, 
			              END586, INTERFACE587, end_of_stmt588, hasGS);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_interface_stmt"



	// $ANTLR start "interface_body"
	// MFortranParser2018.g:6632:1: interface_body options {backtrack=true; } : ( ( prefix )? function_stmt specification_part end_function_stmt | subroutine_stmt specification_part end_subroutine_stmt );
	public final void interface_body() throws RecognitionException {

		  boolean hasPref = false;

		try {
			// MFortranParser2018.g:6637:5: ( ( prefix )? function_stmt specification_part end_function_stmt | subroutine_stmt specification_part end_subroutine_stmt )
			int alt615=2;
			switch ( input.LA(1) ) {
			case INTEGER:
				{
				int LA615_1 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case REAL:
				{
				int LA615_2 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case DOUBLE:
				{
				int LA615_3 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case DOUBLEPRECISION:
				{
				int LA615_4 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case COMPLEX:
				{
				int LA615_5 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case DOUBLECOMPLEX:
				{
				int LA615_6 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case CHARACTER:
				{
				int LA615_7 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case LOGICAL:
				{
				int LA615_8 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case TYPE:
				{
				int LA615_9 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case CLASS:
				{
				int LA615_10 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case ELEMENTAL:
				{
				int LA615_11 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case IMPURE:
				{
				int LA615_12 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case MODULE:
				{
				int LA615_13 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case NON_RECURSIVE:
				{
				int LA615_14 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case PURE:
				{
				int LA615_15 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case RECURSIVE:
				{
				int LA615_16 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case DIGIT_STR:
				{
				int LA615_17 = input.LA(2);
				if ( (synpred72_MFortranParser2018()) ) {
					alt615=1;
				}
				else if ( (true) ) {
					alt615=2;
				}

				}
				break;
			case FUNCTION:
				{
				alt615=1;
				}
				break;
			case SUBROUTINE:
				{
				alt615=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 615, 0, input);
				throw nvae;
			}
			switch (alt615) {
				case 1 :
					// MFortranParser2018.g:6637:7: ( prefix )? function_stmt specification_part end_function_stmt
					{
					// MFortranParser2018.g:6637:7: ( prefix )?
					int alt614=2;
					int LA614_0 = input.LA(1);
					if ( (LA614_0==CHARACTER||LA614_0==CLASS||LA614_0==COMPLEX||(LA614_0 >= DOUBLE && LA614_0 <= DOUBLEPRECISION)||LA614_0==ELEMENTAL||LA614_0==IMPURE||LA614_0==INTEGER||LA614_0==LOGICAL||LA614_0==MODULE||LA614_0==NON_RECURSIVE||LA614_0==PURE||(LA614_0 >= REAL && LA614_0 <= RECURSIVE)||LA614_0==TYPE) ) {
						alt614=1;
					}
					switch (alt614) {
						case 1 :
							// MFortranParser2018.g:6637:8: prefix
							{
							pushFollow(FOLLOW_prefix_in_interface_body27505);
							prefix();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasPref=true;}
							}
							break;

					}

					pushFollow(FOLLOW_function_stmt_in_interface_body27518);
					function_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_specification_part_in_interface_body27520);
					specification_part();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_function_stmt_in_interface_body27529);
					end_function_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.interface_body(true, hasPref); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6641:7: subroutine_stmt specification_part end_subroutine_stmt
					{
					pushFollow(FOLLOW_subroutine_stmt_in_interface_body27547);
					subroutine_stmt();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_specification_part_in_interface_body27549);
					specification_part();
					state._fsp--;
					if (state.failed) return;
					pushFollow(FOLLOW_end_subroutine_stmt_in_interface_body27558);
					end_subroutine_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.interface_body(false, hasPref);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "interface_body"



	// $ANTLR start "procedure_stmt"
	// MFortranParser2018.g:6651:1: procedure_stmt : (lbl= label )? ( MODULE )? PROCEDURE generic_name_list end_of_stmt ;
	public final void procedure_stmt() throws RecognitionException {
		Token MODULE589=null;
		Token PROCEDURE590=null;
		Token lbl =null;
		Token end_of_stmt591 =null;


		  Token mod = null;

		try {
			// MFortranParser2018.g:6658:5: ( (lbl= label )? ( MODULE )? PROCEDURE generic_name_list end_of_stmt )
			// MFortranParser2018.g:6658:7: (lbl= label )? ( MODULE )? PROCEDURE generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:6658:7: (lbl= label )?
			int alt616=2;
			int LA616_0 = input.LA(1);
			if ( (LA616_0==DIGIT_STR) ) {
				alt616=1;
			}
			switch (alt616) {
				case 1 :
					// MFortranParser2018.g:6658:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_procedure_stmt27598);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:6659:7: ( MODULE )?
			int alt617=2;
			int LA617_0 = input.LA(1);
			if ( (LA617_0==MODULE) ) {
				alt617=1;
			}
			switch (alt617) {
				case 1 :
					// MFortranParser2018.g:6659:9: MODULE
					{
					MODULE589=(Token)match(input,MODULE,FOLLOW_MODULE_in_procedure_stmt27611); if (state.failed) return;
					if ( state.backtracking==0 ) {mod=MODULE589;}
					}
					break;

			}

			PROCEDURE590=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_procedure_stmt27624); if (state.failed) return;
			pushFollow(FOLLOW_generic_name_list_in_procedure_stmt27626);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_procedure_stmt27635);
			end_of_stmt591=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.procedure_stmt(lbl, 
			              mod, PROCEDURE590, end_of_stmt591);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "procedure_stmt"



	// $ANTLR start "generic_spec"
	// MFortranParser2018.g:6670:1: generic_spec : ( IDENT | OPERATOR LPAREN defined_operator RPAREN | ASSIGNMENT LPAREN EQUALS RPAREN | defined_io_generic_spec );
	public final void generic_spec() throws RecognitionException {
		Token IDENT592=null;
		Token OPERATOR593=null;
		Token ASSIGNMENT594=null;
		Token EQUALS595=null;

		try {
			// MFortranParser2018.g:6671:5: ( IDENT | OPERATOR LPAREN defined_operator RPAREN | ASSIGNMENT LPAREN EQUALS RPAREN | defined_io_generic_spec )
			int alt618=4;
			switch ( input.LA(1) ) {
			case IDENT:
				{
				alt618=1;
				}
				break;
			case OPERATOR:
				{
				alt618=2;
				}
				break;
			case ASSIGNMENT:
				{
				alt618=3;
				}
				break;
			case READ:
			case WRITE:
				{
				alt618=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 618, 0, input);
				throw nvae;
			}
			switch (alt618) {
				case 1 :
					// MFortranParser2018.g:6671:7: IDENT
					{
					IDENT592=(Token)match(input,IDENT,FOLLOW_IDENT_in_generic_spec27664); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.generic_spec(null, IDENT592, 
					              MFPUtils.GS_NAME);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6674:7: OPERATOR LPAREN defined_operator RPAREN
					{
					OPERATOR593=(Token)match(input,OPERATOR,FOLLOW_OPERATOR_in_generic_spec27682); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_generic_spec27684); if (state.failed) return;
					pushFollow(FOLLOW_defined_operator_in_generic_spec27686);
					defined_operator();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_generic_spec27688); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.generic_spec(OPERATOR593, null, 
					              MFPUtils.GS_OPERATOR);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:6677:7: ASSIGNMENT LPAREN EQUALS RPAREN
					{
					ASSIGNMENT594=(Token)match(input,ASSIGNMENT,FOLLOW_ASSIGNMENT_in_generic_spec27706); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_generic_spec27708); if (state.failed) return;
					EQUALS595=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_generic_spec27710); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_generic_spec27712); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.generic_spec(ASSIGNMENT594, EQUALS595, 
					              MFPUtils.GS_ASSIGNMENT);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:6680:7: defined_io_generic_spec
					{
					pushFollow(FOLLOW_defined_io_generic_spec_in_generic_spec27730);
					defined_io_generic_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.generic_spec(null, null,
					              MFPUtils.GS_IO_SPEC); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "generic_spec"



	// $ANTLR start "defined_io_generic_spec"
	// MFortranParser2018.g:6688:1: defined_io_generic_spec : ( READ LPAREN FORMATTED RPAREN | READ LPAREN UNFORMATTED RPAREN | WRITE LPAREN FORMATTED RPAREN | WRITE LPAREN UNFORMATTED RPAREN );
	public final void defined_io_generic_spec() throws RecognitionException {
		Token READ596=null;
		Token FORMATTED597=null;
		Token READ598=null;
		Token UNFORMATTED599=null;
		Token WRITE600=null;
		Token FORMATTED601=null;
		Token WRITE602=null;
		Token UNFORMATTED603=null;

		try {
			// MFortranParser2018.g:6689:5: ( READ LPAREN FORMATTED RPAREN | READ LPAREN UNFORMATTED RPAREN | WRITE LPAREN FORMATTED RPAREN | WRITE LPAREN UNFORMATTED RPAREN )
			int alt619=4;
			int LA619_0 = input.LA(1);
			if ( (LA619_0==READ) ) {
				int LA619_1 = input.LA(2);
				if ( (LA619_1==LPAREN) ) {
					int LA619_3 = input.LA(3);
					if ( (LA619_3==FORMATTED) ) {
						alt619=1;
					}
					else if ( (LA619_3==UNFORMATTED) ) {
						alt619=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 619, 3, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 619, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA619_0==WRITE) ) {
				int LA619_2 = input.LA(2);
				if ( (LA619_2==LPAREN) ) {
					int LA619_4 = input.LA(3);
					if ( (LA619_4==FORMATTED) ) {
						alt619=3;
					}
					else if ( (LA619_4==UNFORMATTED) ) {
						alt619=4;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 619, 4, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 619, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 619, 0, input);
				throw nvae;
			}

			switch (alt619) {
				case 1 :
					// MFortranParser2018.g:6689:7: READ LPAREN FORMATTED RPAREN
					{
					READ596=(Token)match(input,READ,FOLLOW_READ_in_defined_io_generic_spec27759); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_defined_io_generic_spec27761); if (state.failed) return;
					FORMATTED597=(Token)match(input,FORMATTED,FOLLOW_FORMATTED_in_defined_io_generic_spec27763); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_defined_io_generic_spec27765); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_io_generic_spec(READ596, FORMATTED597,
					              MFPUtils.DIGS.FMT_R);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:6692:7: READ LPAREN UNFORMATTED RPAREN
					{
					READ598=(Token)match(input,READ,FOLLOW_READ_in_defined_io_generic_spec27783); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_defined_io_generic_spec27785); if (state.failed) return;
					UNFORMATTED599=(Token)match(input,UNFORMATTED,FOLLOW_UNFORMATTED_in_defined_io_generic_spec27787); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_defined_io_generic_spec27789); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_io_generic_spec(READ598, UNFORMATTED599, 
					              MFPUtils.DIGS.UFMT_R);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:6695:7: WRITE LPAREN FORMATTED RPAREN
					{
					WRITE600=(Token)match(input,WRITE,FOLLOW_WRITE_in_defined_io_generic_spec27807); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_defined_io_generic_spec27809); if (state.failed) return;
					FORMATTED601=(Token)match(input,FORMATTED,FOLLOW_FORMATTED_in_defined_io_generic_spec27811); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_defined_io_generic_spec27813); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_io_generic_spec(WRITE600, FORMATTED601,
					              MFPUtils.DIGS.FMT_W);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:6698:7: WRITE LPAREN UNFORMATTED RPAREN
					{
					WRITE602=(Token)match(input,WRITE,FOLLOW_WRITE_in_defined_io_generic_spec27831); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_defined_io_generic_spec27833); if (state.failed) return;
					UNFORMATTED603=(Token)match(input,UNFORMATTED,FOLLOW_UNFORMATTED_in_defined_io_generic_spec27835); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_defined_io_generic_spec27837); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.defined_io_generic_spec(WRITE602, UNFORMATTED603,
					              MFPUtils.DIGS.UFMT_W);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "defined_io_generic_spec"



	// $ANTLR start "generic_stmt"
	// MFortranParser2018.g:6707:1: generic_stmt : GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list ;
	public final void generic_stmt() throws RecognitionException {
		Token GENERIC604=null;


		  boolean hasAS = false;

		try {
			// MFortranParser2018.g:6711:5: ( GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list )
			// MFortranParser2018.g:6711:7: GENERIC ( COMMA access_spec )? COLON_COLON generic_spec EQ_GT generic_name_list
			{
			GENERIC604=(Token)match(input,GENERIC,FOLLOW_GENERIC_in_generic_stmt27870); if (state.failed) return;
			// MFortranParser2018.g:6711:15: ( COMMA access_spec )?
			int alt620=2;
			int LA620_0 = input.LA(1);
			if ( (LA620_0==COMMA) ) {
				alt620=1;
			}
			switch (alt620) {
				case 1 :
					// MFortranParser2018.g:6711:17: COMMA access_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_generic_stmt27874); if (state.failed) return;
					pushFollow(FOLLOW_access_spec_in_generic_stmt27876);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					}
					break;

			}

			match(input,COLON_COLON,FOLLOW_COLON_COLON_in_generic_stmt27888); if (state.failed) return;
			pushFollow(FOLLOW_generic_spec_in_generic_stmt27890);
			generic_spec();
			state._fsp--;
			if (state.failed) return;
			match(input,EQ_GT,FOLLOW_EQ_GT_in_generic_stmt27892); if (state.failed) return;
			pushFollow(FOLLOW_generic_name_list_in_generic_stmt27894);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.generic_stmt(GENERIC604, hasAS);}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "generic_stmt"



	// $ANTLR start "external_stmt"
	// MFortranParser2018.g:6719:1: external_stmt : (lbl= label )? EXTERNAL ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void external_stmt() throws RecognitionException {
		Token EXTERNAL605=null;
		Token lbl =null;
		Token end_of_stmt606 =null;



		try {
			// MFortranParser2018.g:6725:5: ( (lbl= label )? EXTERNAL ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:6725:7: (lbl= label )? EXTERNAL ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:6725:7: (lbl= label )?
			int alt621=2;
			int LA621_0 = input.LA(1);
			if ( (LA621_0==DIGIT_STR) ) {
				alt621=1;
			}
			switch (alt621) {
				case 1 :
					// MFortranParser2018.g:6725:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_external_stmt27934);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			EXTERNAL605=(Token)match(input,EXTERNAL,FOLLOW_EXTERNAL_in_external_stmt27945); if (state.failed) return;
			// MFortranParser2018.g:6726:16: ( COLON_COLON )?
			int alt622=2;
			int LA622_0 = input.LA(1);
			if ( (LA622_0==COLON_COLON) ) {
				alt622=1;
			}
			switch (alt622) {
				case 1 :
					// MFortranParser2018.g:6726:18: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_external_stmt27949); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_external_stmt27954);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_external_stmt27963);
			end_of_stmt606=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.external_stmt(lbl, 
			              EXTERNAL605, end_of_stmt606);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "external_stmt"



	// $ANTLR start "procedure_declaration_stmt"
	// MFortranParser2018.g:6735:1: procedure_declaration_stmt : (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN ( ( COMMA proc_attr_spec )* COLON_COLON )? proc_decl_list end_of_stmt ;
	public final void procedure_declaration_stmt() throws RecognitionException {
		Token PROCEDURE607=null;
		Token lbl =null;
		Token end_of_stmt608 =null;


		  boolean hasPI = false; 
		  int numPD = 0;

		try {
			// MFortranParser2018.g:6743:5: ( (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN ( ( COMMA proc_attr_spec )* COLON_COLON )? proc_decl_list end_of_stmt )
			// MFortranParser2018.g:6743:7: (lbl= label )? PROCEDURE LPAREN ( proc_interface )? RPAREN ( ( COMMA proc_attr_spec )* COLON_COLON )? proc_decl_list end_of_stmt
			{
			// MFortranParser2018.g:6743:7: (lbl= label )?
			int alt623=2;
			int LA623_0 = input.LA(1);
			if ( (LA623_0==DIGIT_STR) ) {
				alt623=1;
			}
			switch (alt623) {
				case 1 :
					// MFortranParser2018.g:6743:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_procedure_declaration_stmt28003);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			PROCEDURE607=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_procedure_declaration_stmt28014); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_procedure_declaration_stmt28016); if (state.failed) return;
			// MFortranParser2018.g:6744:24: ( proc_interface )?
			int alt624=2;
			int LA624_0 = input.LA(1);
			if ( (LA624_0==CHARACTER||LA624_0==CLASS||LA624_0==COMPLEX||(LA624_0 >= DOUBLE && LA624_0 <= DOUBLEPRECISION)||LA624_0==IDENT||LA624_0==INTEGER||LA624_0==LOGICAL||LA624_0==REAL||LA624_0==TYPE) ) {
				alt624=1;
			}
			switch (alt624) {
				case 1 :
					// MFortranParser2018.g:6744:26: proc_interface
					{
					pushFollow(FOLLOW_proc_interface_in_procedure_declaration_stmt28020);
					proc_interface();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasPI=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_procedure_declaration_stmt28026); if (state.failed) return;
			// MFortranParser2018.g:6745:7: ( ( COMMA proc_attr_spec )* COLON_COLON )?
			int alt626=2;
			int LA626_0 = input.LA(1);
			if ( ((LA626_0 >= COLON_COLON && LA626_0 <= COMMA)) ) {
				alt626=1;
			}
			switch (alt626) {
				case 1 :
					// MFortranParser2018.g:6745:9: ( COMMA proc_attr_spec )* COLON_COLON
					{
					// MFortranParser2018.g:6745:9: ( COMMA proc_attr_spec )*
					loop625:
					while (true) {
						int alt625=2;
						int LA625_0 = input.LA(1);
						if ( (LA625_0==COMMA) ) {
							alt625=1;
						}

						switch (alt625) {
						case 1 :
							// MFortranParser2018.g:6745:11: COMMA proc_attr_spec
							{
							match(input,COMMA,FOLLOW_COMMA_in_procedure_declaration_stmt28038); if (state.failed) return;
							pushFollow(FOLLOW_proc_attr_spec_in_procedure_declaration_stmt28040);
							proc_attr_spec();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {numPD++;}
							}
							break;

						default :
							break loop625;
						}
					}

					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_procedure_declaration_stmt28046); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_proc_decl_list_in_procedure_declaration_stmt28057);
			proc_decl_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_procedure_declaration_stmt28066);
			end_of_stmt608=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.procedure_declaration_stmt(lbl, 
			              PROCEDURE607, end_of_stmt608, hasPI, numPD);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "procedure_declaration_stmt"



	// $ANTLR start "proc_interface"
	// MFortranParser2018.g:6756:1: proc_interface : ( IDENT | declaration_type_spec );
	public final void proc_interface() throws RecognitionException {
		Token IDENT609=null;

		try {
			// MFortranParser2018.g:6757:5: ( IDENT | declaration_type_spec )
			int alt627=2;
			int LA627_0 = input.LA(1);
			if ( (LA627_0==IDENT) ) {
				alt627=1;
			}
			else if ( (LA627_0==CHARACTER||LA627_0==CLASS||LA627_0==COMPLEX||(LA627_0 >= DOUBLE && LA627_0 <= DOUBLEPRECISION)||LA627_0==INTEGER||LA627_0==LOGICAL||LA627_0==REAL||LA627_0==TYPE) ) {
				alt627=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 627, 0, input);
				throw nvae;
			}

			switch (alt627) {
				case 1 :
					// MFortranParser2018.g:6757:7: IDENT
					{
					IDENT609=(Token)match(input,IDENT,FOLLOW_IDENT_in_proc_interface28095); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_interface(IDENT609); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6758:7: declaration_type_spec
					{
					pushFollow(FOLLOW_declaration_type_spec_in_proc_interface28105);
					declaration_type_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_interface(null); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_interface"



	// $ANTLR start "proc_attr_spec"
	// MFortranParser2018.g:6764:1: proc_attr_spec : ( access_spec | language_binding_spec | INTENT LPAREN intent_spec RPAREN | OPTIONAL | POINTER | PROTECTED | SAVE | proc_attr_spec_extension );
	public final void proc_attr_spec() throws RecognitionException {
		Token INTENT610=null;
		Token OPTIONAL611=null;
		Token POINTER612=null;
		Token PROTECTED613=null;
		Token SAVE614=null;

		try {
			// MFortranParser2018.g:6765:5: ( access_spec | language_binding_spec | INTENT LPAREN intent_spec RPAREN | OPTIONAL | POINTER | PROTECTED | SAVE | proc_attr_spec_extension )
			int alt628=8;
			switch ( input.LA(1) ) {
			case PRIVATE:
			case PUBLIC:
				{
				alt628=1;
				}
				break;
			case BIND:
				{
				alt628=2;
				}
				break;
			case INTENT:
				{
				alt628=3;
				}
				break;
			case OPTIONAL:
				{
				alt628=4;
				}
				break;
			case POINTER:
				{
				alt628=5;
				}
				break;
			case PROTECTED:
				{
				alt628=6;
				}
				break;
			case SAVE:
				{
				alt628=7;
				}
				break;
			case NO_LANG_EXT:
				{
				alt628=8;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 628, 0, input);
				throw nvae;
			}
			switch (alt628) {
				case 1 :
					// MFortranParser2018.g:6765:7: access_spec
					{
					pushFollow(FOLLOW_access_spec_in_proc_attr_spec28126);
					access_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(null, 
					              MFPUtils.ATTR_ACCESS); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6768:7: language_binding_spec
					{
					pushFollow(FOLLOW_language_binding_spec_in_proc_attr_spec28145);
					language_binding_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(null, 
					              MFPUtils.ATTR_BIND_C); }
					}
					break;
				case 3 :
					// MFortranParser2018.g:6771:7: INTENT LPAREN intent_spec RPAREN
					{
					INTENT610=(Token)match(input,INTENT,FOLLOW_INTENT_in_proc_attr_spec28163); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_proc_attr_spec28165); if (state.failed) return;
					pushFollow(FOLLOW_intent_spec_in_proc_attr_spec28167);
					intent_spec();
					state._fsp--;
					if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_proc_attr_spec28169); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(INTENT610, 
					              MFPUtils.ATTR_INTENT); }
					}
					break;
				case 4 :
					// MFortranParser2018.g:6774:7: OPTIONAL
					{
					OPTIONAL611=(Token)match(input,OPTIONAL,FOLLOW_OPTIONAL_in_proc_attr_spec28187); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(OPTIONAL611, 
					              MFPUtils.ATTR_OPTIONAL); }
					}
					break;
				case 5 :
					// MFortranParser2018.g:6777:7: POINTER
					{
					POINTER612=(Token)match(input,POINTER,FOLLOW_POINTER_in_proc_attr_spec28205); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(POINTER612, 
					              MFPUtils.ATTR_POINTER); }
					}
					break;
				case 6 :
					// MFortranParser2018.g:6780:7: PROTECTED
					{
					PROTECTED613=(Token)match(input,PROTECTED,FOLLOW_PROTECTED_in_proc_attr_spec28223); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(PROTECTED613,
					              MFPUtils.ATTR_PROTECTED); }
					}
					break;
				case 7 :
					// MFortranParser2018.g:6783:7: SAVE
					{
					SAVE614=(Token)match(input,SAVE,FOLLOW_SAVE_in_proc_attr_spec28241); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(SAVE614, 
					              MFPUtils.ATTR_SAVE); }
					}
					break;
				case 8 :
					// MFortranParser2018.g:6787:7: proc_attr_spec_extension
					{
					pushFollow(FOLLOW_proc_attr_spec_extension_in_proc_attr_spec28261);
					proc_attr_spec_extension();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_attr_spec(null, 
					              MFPUtils.ATTR_OTHER); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_attr_spec"



	// $ANTLR start "proc_attr_spec_extension"
	// MFortranParser2018.g:6792:1: proc_attr_spec_extension : NO_LANG_EXT ;
	public final void proc_attr_spec_extension() throws RecognitionException {
		try {
			// MFortranParser2018.g:6793:5: ( NO_LANG_EXT )
			// MFortranParser2018.g:6793:7: NO_LANG_EXT
			{
			match(input,NO_LANG_EXT,FOLLOW_NO_LANG_EXT_in_proc_attr_spec_extension28288); if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_attr_spec_extension"



	// $ANTLR start "proc_decl"
	// MFortranParser2018.g:6800:1: proc_decl : IDENT ( EQ_GT proc_pointer_init )? ;
	public final void proc_decl() throws RecognitionException {
		Token IDENT615=null;


		  boolean hasPPI = false;

		try {
			// MFortranParser2018.g:6804:5: ( IDENT ( EQ_GT proc_pointer_init )? )
			// MFortranParser2018.g:6804:7: IDENT ( EQ_GT proc_pointer_init )?
			{
			IDENT615=(Token)match(input,IDENT,FOLLOW_IDENT_in_proc_decl28311); if (state.failed) return;
			// MFortranParser2018.g:6804:13: ( EQ_GT proc_pointer_init )?
			int alt629=2;
			int LA629_0 = input.LA(1);
			if ( (LA629_0==EQ_GT) ) {
				alt629=1;
			}
			switch (alt629) {
				case 1 :
					// MFortranParser2018.g:6804:15: EQ_GT proc_pointer_init
					{
					match(input,EQ_GT,FOLLOW_EQ_GT_in_proc_decl28315); if (state.failed) return;
					pushFollow(FOLLOW_proc_pointer_init_in_proc_decl28317);
					proc_pointer_init();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasPPI=true;}
					}
					break;

			}

			if ( state.backtracking==0 ) { MFPA.proc_decl(IDENT615, hasPPI); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_decl"



	// $ANTLR start "proc_decl_list"
	// MFortranParser2018.g:6808:1: proc_decl_list : proc_decl ( COMMA proc_decl )* ;
	public final void proc_decl_list() throws RecognitionException {

		  int numPd = 1;

		try {
			// MFortranParser2018.g:6815:5: ( proc_decl ( COMMA proc_decl )* )
			// MFortranParser2018.g:6815:7: proc_decl ( COMMA proc_decl )*
			{
			pushFollow(FOLLOW_proc_decl_in_proc_decl_list28357);
			proc_decl();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6816:7: ( COMMA proc_decl )*
			loop630:
			while (true) {
				int alt630=2;
				int LA630_0 = input.LA(1);
				if ( (LA630_0==COMMA) ) {
					alt630=1;
				}

				switch (alt630) {
				case 1 :
					// MFortranParser2018.g:6816:9: COMMA proc_decl
					{
					match(input,COMMA,FOLLOW_COMMA_in_proc_decl_list28367); if (state.failed) return;
					pushFollow(FOLLOW_proc_decl_in_proc_decl_list28369);
					proc_decl();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPd++;}
					}
					break;

				default :
					break loop630;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.proc_decl_list(numPd);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_decl_list"



	// $ANTLR start "proc_pointer_init"
	// MFortranParser2018.g:6829:1: proc_pointer_init : ( null_init | IDENT );
	public final void proc_pointer_init() throws RecognitionException {
		Token IDENT616=null;

		try {
			// MFortranParser2018.g:6830:5: ( null_init | IDENT )
			int alt631=2;
			int LA631_0 = input.LA(1);
			if ( (LA631_0==IDENT) ) {
				int LA631_1 = input.LA(2);
				if ( (LA631_1==LPAREN) ) {
					alt631=1;
				}
				else if ( (LA631_1==EOF||LA631_1==COMMA||LA631_1==EOS) ) {
					alt631=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 631, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 631, 0, input);
				throw nvae;
			}

			switch (alt631) {
				case 1 :
					// MFortranParser2018.g:6830:7: null_init
					{
					pushFollow(FOLLOW_null_init_in_proc_pointer_init28396);
					null_init();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_pointer_init(null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6832:7: IDENT
					{
					IDENT616=(Token)match(input,IDENT,FOLLOW_IDENT_in_proc_pointer_init28414); if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.proc_pointer_init(IDENT616); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "proc_pointer_init"



	// $ANTLR start "intrinsic_stmt"
	// MFortranParser2018.g:6841:1: intrinsic_stmt : (lbl= label )? INTRINSIC ( COLON_COLON )? generic_name_list end_of_stmt ;
	public final void intrinsic_stmt() throws RecognitionException {
		Token INTRINSIC617=null;
		Token lbl =null;
		Token end_of_stmt618 =null;



		try {
			// MFortranParser2018.g:6847:5: ( (lbl= label )? INTRINSIC ( COLON_COLON )? generic_name_list end_of_stmt )
			// MFortranParser2018.g:6847:7: (lbl= label )? INTRINSIC ( COLON_COLON )? generic_name_list end_of_stmt
			{
			// MFortranParser2018.g:6847:7: (lbl= label )?
			int alt632=2;
			int LA632_0 = input.LA(1);
			if ( (LA632_0==DIGIT_STR) ) {
				alt632=1;
			}
			switch (alt632) {
				case 1 :
					// MFortranParser2018.g:6847:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_intrinsic_stmt28454);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			INTRINSIC617=(Token)match(input,INTRINSIC,FOLLOW_INTRINSIC_in_intrinsic_stmt28465); if (state.failed) return;
			// MFortranParser2018.g:6848:17: ( COLON_COLON )?
			int alt633=2;
			int LA633_0 = input.LA(1);
			if ( (LA633_0==COLON_COLON) ) {
				alt633=1;
			}
			switch (alt633) {
				case 1 :
					// MFortranParser2018.g:6848:18: COLON_COLON
					{
					match(input,COLON_COLON,FOLLOW_COLON_COLON_in_intrinsic_stmt28468); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_generic_name_list_in_intrinsic_stmt28472);
			generic_name_list();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_intrinsic_stmt28481);
			end_of_stmt618=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.intrinsic_stmt(lbl, 
			            INTRINSIC617, end_of_stmt618);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "intrinsic_stmt"



	// $ANTLR start "call_stmt"
	// MFortranParser2018.g:6864:1: call_stmt : (lbl= label )? CALL procedure_designator ( LPAREN ( actual_arg_spec_list )? RPAREN )? end_of_stmt ;
	public final void call_stmt() throws RecognitionException {
		Token CALL619=null;
		Token lbl =null;
		Token end_of_stmt620 =null;


		  boolean hasAASL = false;

		try {
			// MFortranParser2018.g:6871:5: ( (lbl= label )? CALL procedure_designator ( LPAREN ( actual_arg_spec_list )? RPAREN )? end_of_stmt )
			// MFortranParser2018.g:6871:7: (lbl= label )? CALL procedure_designator ( LPAREN ( actual_arg_spec_list )? RPAREN )? end_of_stmt
			{
			// MFortranParser2018.g:6871:7: (lbl= label )?
			int alt634=2;
			int LA634_0 = input.LA(1);
			if ( (LA634_0==DIGIT_STR) ) {
				alt634=1;
			}
			switch (alt634) {
				case 1 :
					// MFortranParser2018.g:6871:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_call_stmt28525);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CALL619=(Token)match(input,CALL,FOLLOW_CALL_in_call_stmt28536); if (state.failed) return;
			pushFollow(FOLLOW_procedure_designator_in_call_stmt28538);
			procedure_designator();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6873:7: ( LPAREN ( actual_arg_spec_list )? RPAREN )?
			int alt636=2;
			int LA636_0 = input.LA(1);
			if ( (LA636_0==LPAREN) ) {
				alt636=1;
			}
			switch (alt636) {
				case 1 :
					// MFortranParser2018.g:6873:9: LPAREN ( actual_arg_spec_list )? RPAREN
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_call_stmt28549); if (state.failed) return;
					// MFortranParser2018.g:6874:9: ( actual_arg_spec_list )?
					int alt635=2;
					int LA635_0 = input.LA(1);
					if ( (LA635_0==ASTERISK||LA635_0==BIN_CONST||LA635_0==CHAR_CONST||(LA635_0 >= DEFINED_OP && LA635_0 <= DIGIT_STR)||LA635_0==FALSE||(LA635_0 >= HEX_CONST && LA635_0 <= IDENT)||LA635_0==LBRACKET||LA635_0==LPAREN||LA635_0==MINUS||LA635_0==M_REAL_CONST||LA635_0==NOT||LA635_0==OCT_CONST||LA635_0==PLUS||LA635_0==TRUE) ) {
						alt635=1;
					}
					switch (alt635) {
						case 1 :
							// MFortranParser2018.g:6874:11: actual_arg_spec_list
							{
							pushFollow(FOLLOW_actual_arg_spec_list_in_call_stmt28562);
							actual_arg_spec_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasAASL=true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_call_stmt28568); if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_call_stmt28587);
			end_of_stmt620=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.call_stmt(lbl, 
			              CALL619, end_of_stmt620, hasAASL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "call_stmt"



	// $ANTLR start "procedure_designator"
	// MFortranParser2018.g:6892:1: procedure_designator : data_ref ;
	public final void procedure_designator() throws RecognitionException {
		try {
			// MFortranParser2018.g:6893:5: ( data_ref )
			// MFortranParser2018.g:6893:7: data_ref
			{
			pushFollow(FOLLOW_data_ref_in_procedure_designator28616);
			data_ref();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.procedure_designator();}
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "procedure_designator"



	// $ANTLR start "actual_arg_spec"
	// MFortranParser2018.g:6909:1: actual_arg_spec : ( IDENT EQUALS )? ( expr | ASTERISK lbl= label ) ;
	public final void actual_arg_spec() throws RecognitionException {
		Token IDENT621=null;
		Token ASTERISK622=null;
		Token lbl =null;


		  Token keyword = null;

		try {
			// MFortranParser2018.g:6913:5: ( ( IDENT EQUALS )? ( expr | ASTERISK lbl= label ) )
			// MFortranParser2018.g:6913:7: ( IDENT EQUALS )? ( expr | ASTERISK lbl= label )
			{
			// MFortranParser2018.g:6913:7: ( IDENT EQUALS )?
			int alt637=2;
			int LA637_0 = input.LA(1);
			if ( (LA637_0==IDENT) ) {
				int LA637_1 = input.LA(2);
				if ( (LA637_1==EQUALS) ) {
					alt637=1;
				}
			}
			switch (alt637) {
				case 1 :
					// MFortranParser2018.g:6913:8: IDENT EQUALS
					{
					IDENT621=(Token)match(input,IDENT,FOLLOW_IDENT_in_actual_arg_spec28642); if (state.failed) return;
					match(input,EQUALS,FOLLOW_EQUALS_in_actual_arg_spec28644); if (state.failed) return;
					if ( state.backtracking==0 ) {keyword=IDENT621;}
					}
					break;

			}

			// MFortranParser2018.g:6914:7: ( expr | ASTERISK lbl= label )
			int alt638=2;
			int LA638_0 = input.LA(1);
			if ( (LA638_0==BIN_CONST||LA638_0==CHAR_CONST||(LA638_0 >= DEFINED_OP && LA638_0 <= DIGIT_STR)||LA638_0==FALSE||(LA638_0 >= HEX_CONST && LA638_0 <= IDENT)||LA638_0==LBRACKET||LA638_0==LPAREN||LA638_0==MINUS||LA638_0==M_REAL_CONST||LA638_0==NOT||LA638_0==OCT_CONST||LA638_0==PLUS||LA638_0==TRUE) ) {
				alt638=1;
			}
			else if ( (LA638_0==ASTERISK) ) {
				alt638=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 638, 0, input);
				throw nvae;
			}

			switch (alt638) {
				case 1 :
					// MFortranParser2018.g:6914:9: expr
					{
					pushFollow(FOLLOW_expr_in_actual_arg_spec28659);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(keyword, null, null); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6916:9: ASTERISK lbl= label
					{
					ASTERISK622=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_actual_arg_spec28682); if (state.failed) return;
					pushFollow(FOLLOW_label_in_actual_arg_spec28686);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.actual_arg_spec(keyword, ASTERISK622, lbl); }
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "actual_arg_spec"



	// $ANTLR start "actual_arg_spec_list"
	// MFortranParser2018.g:6920:1: actual_arg_spec_list options {greedy=false; } : actual_arg_spec ( COMMA actual_arg_spec )* ;
	public final void actual_arg_spec_list() throws RecognitionException {

		  int numAAS = 1;

		try {
			// MFortranParser2018.g:6928:5: ( actual_arg_spec ( COMMA actual_arg_spec )* )
			// MFortranParser2018.g:6928:7: actual_arg_spec ( COMMA actual_arg_spec )*
			{
			pushFollow(FOLLOW_actual_arg_spec_in_actual_arg_spec_list28733);
			actual_arg_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6929:7: ( COMMA actual_arg_spec )*
			loop639:
			while (true) {
				int alt639=2;
				int LA639_0 = input.LA(1);
				if ( (LA639_0==COMMA) ) {
					alt639=1;
				}

				switch (alt639) {
				case 1 :
					// MFortranParser2018.g:6929:9: COMMA actual_arg_spec
					{
					match(input,COMMA,FOLLOW_COMMA_in_actual_arg_spec_list28743); if (state.failed) return;
					pushFollow(FOLLOW_actual_arg_spec_in_actual_arg_spec_list28745);
					actual_arg_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numAAS++;}
					}
					break;

				default :
					break loop639;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.actual_arg_spec_list(numAAS);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "actual_arg_spec_list"



	// $ANTLR start "prefix"
	// MFortranParser2018.g:6937:1: prefix : prefix_spec ( prefix_spec )* ;
	public final void prefix() throws RecognitionException {

		  int numPref = 1;

		try {
			// MFortranParser2018.g:6944:5: ( prefix_spec ( prefix_spec )* )
			// MFortranParser2018.g:6944:7: prefix_spec ( prefix_spec )*
			{
			pushFollow(FOLLOW_prefix_spec_in_prefix28777);
			prefix_spec();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6945:7: ( prefix_spec )*
			loop640:
			while (true) {
				int alt640=2;
				int LA640_0 = input.LA(1);
				if ( (LA640_0==CHARACTER||LA640_0==CLASS||LA640_0==COMPLEX||(LA640_0 >= DOUBLE && LA640_0 <= DOUBLEPRECISION)||LA640_0==ELEMENTAL||LA640_0==IMPURE||LA640_0==INTEGER||LA640_0==LOGICAL||LA640_0==MODULE||LA640_0==NON_RECURSIVE||LA640_0==PURE||(LA640_0 >= REAL && LA640_0 <= RECURSIVE)||LA640_0==TYPE) ) {
					alt640=1;
				}

				switch (alt640) {
				case 1 :
					// MFortranParser2018.g:6945:8: prefix_spec
					{
					pushFollow(FOLLOW_prefix_spec_in_prefix28786);
					prefix_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numPref++;}
					}
					break;

				default :
					break loop640;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.prefix(numPref);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "prefix"



	// $ANTLR start "prefix_spec"
	// MFortranParser2018.g:6951:1: prefix_spec : ( declaration_type_spec | ELEMENTAL | IMPURE | MODULE | NON_RECURSIVE | PURE | RECURSIVE );
	public final void prefix_spec() throws RecognitionException {
		Token ELEMENTAL623=null;
		Token IMPURE624=null;
		Token MODULE625=null;
		Token NON_RECURSIVE626=null;
		Token PURE627=null;
		Token RECURSIVE628=null;

		try {
			// MFortranParser2018.g:6952:5: ( declaration_type_spec | ELEMENTAL | IMPURE | MODULE | NON_RECURSIVE | PURE | RECURSIVE )
			int alt641=7;
			switch ( input.LA(1) ) {
			case CHARACTER:
			case CLASS:
			case COMPLEX:
			case DOUBLE:
			case DOUBLECOMPLEX:
			case DOUBLEPRECISION:
			case INTEGER:
			case LOGICAL:
			case REAL:
			case TYPE:
				{
				alt641=1;
				}
				break;
			case ELEMENTAL:
				{
				alt641=2;
				}
				break;
			case IMPURE:
				{
				alt641=3;
				}
				break;
			case MODULE:
				{
				alt641=4;
				}
				break;
			case NON_RECURSIVE:
				{
				alt641=5;
				}
				break;
			case PURE:
				{
				alt641=6;
				}
				break;
			case RECURSIVE:
				{
				alt641=7;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 641, 0, input);
				throw nvae;
			}
			switch (alt641) {
				case 1 :
					// MFortranParser2018.g:6952:7: declaration_type_spec
					{
					pushFollow(FOLLOW_declaration_type_spec_in_prefix_spec28809);
					declaration_type_spec();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.prefix_spec(null, MFPUtils.PFX_TYPE); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:6954:7: ELEMENTAL
					{
					ELEMENTAL623=(Token)match(input,ELEMENTAL,FOLLOW_ELEMENTAL_in_prefix_spec28827); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(ELEMENTAL623, MFPUtils.PFX_ELEMENTAL);}
					}
					break;
				case 3 :
					// MFortranParser2018.g:6956:7: IMPURE
					{
					IMPURE624=(Token)match(input,IMPURE,FOLLOW_IMPURE_in_prefix_spec28845); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(IMPURE624, MFPUtils.PFX_IMPURE);}
					}
					break;
				case 4 :
					// MFortranParser2018.g:6958:7: MODULE
					{
					MODULE625=(Token)match(input,MODULE,FOLLOW_MODULE_in_prefix_spec28863); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(MODULE625, MFPUtils.PFX_MODULE);}
					}
					break;
				case 5 :
					// MFortranParser2018.g:6960:7: NON_RECURSIVE
					{
					NON_RECURSIVE626=(Token)match(input,NON_RECURSIVE,FOLLOW_NON_RECURSIVE_in_prefix_spec28881); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(NON_RECURSIVE626, MFPUtils.PFX_NON_RECURSIVE);}
					}
					break;
				case 6 :
					// MFortranParser2018.g:6962:7: PURE
					{
					PURE627=(Token)match(input,PURE,FOLLOW_PURE_in_prefix_spec28899); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(PURE627, MFPUtils.PFX_PURE);}
					}
					break;
				case 7 :
					// MFortranParser2018.g:6964:7: RECURSIVE
					{
					RECURSIVE628=(Token)match(input,RECURSIVE,FOLLOW_RECURSIVE_in_prefix_spec28917); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.prefix_spec(RECURSIVE628, MFPUtils.PFX_RECURSIVE);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "prefix_spec"



	// $ANTLR start "function_subprogram"
	// MFortranParser2018.g:6980:1: function_subprogram : function_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_function_stmt ;
	public final void function_subprogram() throws RecognitionException {

		  boolean hasEP = false;
		  boolean hasISP = false;

		try {
			// MFortranParser2018.g:6985:5: ( function_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_function_stmt )
			// MFortranParser2018.g:6985:7: function_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_function_stmt
			{
			pushFollow(FOLLOW_function_stmt_in_function_subprogram28954);
			function_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_function_subprogram28962);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:6987:7: ( execution_part )?
			int alt642=2;
			switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA642_1 = input.LA(2);
					if ( (LA642_1==ALLOCATE||LA642_1==ASSOCIATE||LA642_1==BACKSPACE||LA642_1==BLOCK||LA642_1==CALL||LA642_1==CLOSE||LA642_1==CONTINUE||(LA642_1 >= CRITICAL && LA642_1 <= CYCLE)||LA642_1==DEALLOCATE||LA642_1==DO||LA642_1==EXIT||LA642_1==FLUSH||(LA642_1 >= GO && LA642_1 <= GOTO)||(LA642_1 >= IDENT && LA642_1 <= IF)||LA642_1==INQUIRE||(LA642_1 >= M_ALLOCATE_STMT_1 && LA642_1 <= M_ASSIGNMENT_STMT)||(LA642_1 >= M_FORALL_CONSTRUCT_STMT && LA642_1 <= M_IF_STMT)||LA642_1==M_INQUIRE_STMT_2||LA642_1==M_PTR_ASSIGNMENT_STMT||LA642_1==M_WHERE_STMT||LA642_1==NULLIFY||LA642_1==OPEN||LA642_1==PRINT||LA642_1==READ||(LA642_1 >= RETURN && LA642_1 <= REWIND)||(LA642_1 >= SELECT && LA642_1 <= SELECTTYPE)||LA642_1==STOP||LA642_1==SYNC||LA642_1==WAIT||LA642_1==WRITE) ) {
						alt642=1;
					}
					else if ( (LA642_1==END) ) {
						int LA642_3 = input.LA(3);
						if ( (LA642_3==FILE) ) {
							alt642=1;
						}
					}
					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DEALLOCATE:
				case DO:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt642=1;
					}
					break;
				case END:
					{
					int LA642_3 = input.LA(2);
					if ( (LA642_3==FILE) ) {
						alt642=1;
					}
					}
					break;
			}
			switch (alt642) {
				case 1 :
					// MFortranParser2018.g:6987:9: execution_part
					{
					pushFollow(FOLLOW_execution_part_in_function_subprogram28972);
					execution_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasEP=true; }
					}
					break;

			}

			// MFortranParser2018.g:6988:7: ( internal_subprogram_part )?
			int alt643=2;
			int LA643_0 = input.LA(1);
			if ( (LA643_0==DIGIT_STR) ) {
				int LA643_1 = input.LA(2);
				if ( (LA643_1==CONTAINS) ) {
					alt643=1;
				}
			}
			else if ( (LA643_0==CONTAINS) ) {
				alt643=1;
			}
			switch (alt643) {
				case 1 :
					// MFortranParser2018.g:6988:9: internal_subprogram_part
					{
					pushFollow(FOLLOW_internal_subprogram_part_in_function_subprogram28986);
					internal_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasISP=true; }
					}
					break;

			}

			pushFollow(FOLLOW_end_function_stmt_in_function_subprogram28998);
			end_function_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.function_subprogram(hasEP, hasISP); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "function_subprogram"



	// $ANTLR start "function_stmt"
	// MFortranParser2018.g:6998:1: function_stmt : (lbl= label )? FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN ( suffix )? end_of_stmt ;
	public final void function_stmt() throws RecognitionException {
		Token FUNCTION629=null;
		Token IDENT630=null;
		Token lbl =null;
		Token end_of_stmt631 =null;


		  boolean hasGNL=false;
		  boolean hasSffx=false;

		try {
			// MFortranParser2018.g:7006:5: ( (lbl= label )? FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN ( suffix )? end_of_stmt )
			// MFortranParser2018.g:7006:7: (lbl= label )? FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN ( suffix )? end_of_stmt
			{
			// MFortranParser2018.g:7006:7: (lbl= label )?
			int alt644=2;
			int LA644_0 = input.LA(1);
			if ( (LA644_0==DIGIT_STR) ) {
				alt644=1;
			}
			switch (alt644) {
				case 1 :
					// MFortranParser2018.g:7006:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_function_stmt29039);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			FUNCTION629=(Token)match(input,FUNCTION,FOLLOW_FUNCTION_in_function_stmt29050); if (state.failed) return;
			IDENT630=(Token)match(input,IDENT,FOLLOW_IDENT_in_function_stmt29052); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_function_stmt29054); if (state.failed) return;
			// MFortranParser2018.g:7008:7: ( generic_name_list )?
			int alt645=2;
			int LA645_0 = input.LA(1);
			if ( (LA645_0==IDENT) ) {
				alt645=1;
			}
			switch (alt645) {
				case 1 :
					// MFortranParser2018.g:7008:9: generic_name_list
					{
					pushFollow(FOLLOW_generic_name_list_in_function_stmt29065);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasGNL=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_function_stmt29078); if (state.failed) return;
			// MFortranParser2018.g:7009:14: ( suffix )?
			int alt646=2;
			int LA646_0 = input.LA(1);
			if ( (LA646_0==BIND||LA646_0==RESULT) ) {
				alt646=1;
			}
			switch (alt646) {
				case 1 :
					// MFortranParser2018.g:7009:15: suffix
					{
					pushFollow(FOLLOW_suffix_in_function_stmt29081);
					suffix();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasSffx=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_function_stmt29094);
			end_of_stmt631=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.function_stmt(lbl,  FUNCTION629, 
			             IDENT630, end_of_stmt631, hasGNL, hasSffx);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "function_stmt"



	// $ANTLR start "suffix"
	// MFortranParser2018.g:7025:1: suffix : ( language_binding_spec ( RESULT LPAREN IDENT RPAREN )? | RESULT LPAREN IDENT RPAREN ( language_binding_spec )? );
	public final void suffix() throws RecognitionException {
		Token IDENT632=null;
		Token IDENT633=null;


		  Token rname = null;
		  boolean hasPLBS = false;

		try {
			// MFortranParser2018.g:7030:5: ( language_binding_spec ( RESULT LPAREN IDENT RPAREN )? | RESULT LPAREN IDENT RPAREN ( language_binding_spec )? )
			int alt649=2;
			int LA649_0 = input.LA(1);
			if ( (LA649_0==BIND) ) {
				alt649=1;
			}
			else if ( (LA649_0==RESULT) ) {
				alt649=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 649, 0, input);
				throw nvae;
			}

			switch (alt649) {
				case 1 :
					// MFortranParser2018.g:7030:7: language_binding_spec ( RESULT LPAREN IDENT RPAREN )?
					{
					pushFollow(FOLLOW_language_binding_spec_in_suffix29130);
					language_binding_spec();
					state._fsp--;
					if (state.failed) return;
					// MFortranParser2018.g:7031:7: ( RESULT LPAREN IDENT RPAREN )?
					int alt647=2;
					int LA647_0 = input.LA(1);
					if ( (LA647_0==RESULT) ) {
						alt647=1;
					}
					switch (alt647) {
						case 1 :
							// MFortranParser2018.g:7031:9: RESULT LPAREN IDENT RPAREN
							{
							match(input,RESULT,FOLLOW_RESULT_in_suffix29141); if (state.failed) return;
							match(input,LPAREN,FOLLOW_LPAREN_in_suffix29143); if (state.failed) return;
							IDENT632=(Token)match(input,IDENT,FOLLOW_IDENT_in_suffix29145); if (state.failed) return;
							match(input,RPAREN,FOLLOW_RPAREN_in_suffix29147); if (state.failed) return;
							if ( state.backtracking==0 ) {rname=IDENT632;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.suffix(rname, true); }
					}
					break;
				case 2 :
					// MFortranParser2018.g:7033:7: RESULT LPAREN IDENT RPAREN ( language_binding_spec )?
					{
					match(input,RESULT,FOLLOW_RESULT_in_suffix29170); if (state.failed) return;
					match(input,LPAREN,FOLLOW_LPAREN_in_suffix29172); if (state.failed) return;
					IDENT633=(Token)match(input,IDENT,FOLLOW_IDENT_in_suffix29174); if (state.failed) return;
					match(input,RPAREN,FOLLOW_RPAREN_in_suffix29176); if (state.failed) return;
					// MFortranParser2018.g:7034:7: ( language_binding_spec )?
					int alt648=2;
					int LA648_0 = input.LA(1);
					if ( (LA648_0==BIND) ) {
						alt648=1;
					}
					switch (alt648) {
						case 1 :
							// MFortranParser2018.g:7034:9: language_binding_spec
							{
							pushFollow(FOLLOW_language_binding_spec_in_suffix29187);
							language_binding_spec();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasPLBS = true;}
							}
							break;

					}

					if ( state.backtracking==0 ) { MFPA.suffix(IDENT633, hasPLBS); }
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "suffix"



	// $ANTLR start "end_function_stmt"
	// MFortranParser2018.g:7041:1: end_function_stmt : ( (lbl= label )? END FUNCTION ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt );
	public final void end_function_stmt() throws RecognitionException {
		Token IDENT634=null;
		Token END635=null;
		Token FUNCTION636=null;
		Token END638=null;
		Token lbl =null;
		Token end_of_stmt637 =null;
		Token end_of_stmt639 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:7048:5: ( (lbl= label )? END FUNCTION ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt )
			int alt653=2;
			int LA653_0 = input.LA(1);
			if ( (LA653_0==DIGIT_STR) ) {
				int LA653_1 = input.LA(2);
				if ( (LA653_1==END) ) {
					int LA653_2 = input.LA(3);
					if ( (LA653_2==FUNCTION) ) {
						alt653=1;
					}
					else if ( (LA653_2==EOF||LA653_2==EOS) ) {
						alt653=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 653, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 653, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA653_0==END) ) {
				int LA653_2 = input.LA(2);
				if ( (LA653_2==FUNCTION) ) {
					alt653=1;
				}
				else if ( (LA653_2==EOF||LA653_2==EOS) ) {
					alt653=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 653, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 653, 0, input);
				throw nvae;
			}

			switch (alt653) {
				case 1 :
					// MFortranParser2018.g:7048:7: (lbl= label )? END FUNCTION ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:7048:7: (lbl= label )?
					int alt650=2;
					int LA650_0 = input.LA(1);
					if ( (LA650_0==DIGIT_STR) ) {
						alt650=1;
					}
					switch (alt650) {
						case 1 :
							// MFortranParser2018.g:7048:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_function_stmt29232);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END635=(Token)match(input,END,FOLLOW_END_in_end_function_stmt29243); if (state.failed) return;
					FUNCTION636=(Token)match(input,FUNCTION,FOLLOW_FUNCTION_in_end_function_stmt29245); if (state.failed) return;
					// MFortranParser2018.g:7049:20: ( IDENT )?
					int alt651=2;
					int LA651_0 = input.LA(1);
					if ( (LA651_0==IDENT) ) {
						alt651=1;
					}
					switch (alt651) {
						case 1 :
							// MFortranParser2018.g:7049:21: IDENT
							{
							IDENT634=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_function_stmt29248); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT634;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_function_stmt29260);
					end_of_stmt637=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_function_stmt(lbl, 
					              END635, FUNCTION636, id, end_of_stmt637);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:7053:7: (lbl= label )? END end_of_stmt
					{
					// MFortranParser2018.g:7053:7: (lbl= label )?
					int alt652=2;
					int LA652_0 = input.LA(1);
					if ( (LA652_0==DIGIT_STR) ) {
						alt652=1;
					}
					switch (alt652) {
						case 1 :
							// MFortranParser2018.g:7053:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_function_stmt29281);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END638=(Token)match(input,END,FOLLOW_END_in_end_function_stmt29292); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_end_function_stmt29294);
					end_of_stmt639=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_function_stmt(lbl, 
					              END638, null, id, end_of_stmt639);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_function_stmt"



	// $ANTLR start "subroutine_subprogram"
	// MFortranParser2018.g:7064:1: subroutine_subprogram : subroutine_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_subroutine_stmt ;
	public final void subroutine_subprogram() throws RecognitionException {

		  boolean hasEP = false;
		  boolean hasISP = false;

		try {
			// MFortranParser2018.g:7069:5: ( subroutine_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_subroutine_stmt )
			// MFortranParser2018.g:7069:7: subroutine_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_subroutine_stmt
			{
			pushFollow(FOLLOW_subroutine_stmt_in_subroutine_subprogram29328);
			subroutine_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_subroutine_subprogram29336);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:7071:7: ( execution_part )?
			int alt654=2;
			switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA654_1 = input.LA(2);
					if ( (LA654_1==ALLOCATE||LA654_1==ASSOCIATE||LA654_1==BACKSPACE||LA654_1==BLOCK||LA654_1==CALL||LA654_1==CLOSE||LA654_1==CONTINUE||(LA654_1 >= CRITICAL && LA654_1 <= CYCLE)||LA654_1==DEALLOCATE||LA654_1==DO||LA654_1==EXIT||LA654_1==FLUSH||(LA654_1 >= GO && LA654_1 <= GOTO)||(LA654_1 >= IDENT && LA654_1 <= IF)||LA654_1==INQUIRE||(LA654_1 >= M_ALLOCATE_STMT_1 && LA654_1 <= M_ASSIGNMENT_STMT)||(LA654_1 >= M_FORALL_CONSTRUCT_STMT && LA654_1 <= M_IF_STMT)||LA654_1==M_INQUIRE_STMT_2||LA654_1==M_PTR_ASSIGNMENT_STMT||LA654_1==M_WHERE_STMT||LA654_1==NULLIFY||LA654_1==OPEN||LA654_1==PRINT||LA654_1==READ||(LA654_1 >= RETURN && LA654_1 <= REWIND)||(LA654_1 >= SELECT && LA654_1 <= SELECTTYPE)||LA654_1==STOP||LA654_1==SYNC||LA654_1==WAIT||LA654_1==WRITE) ) {
						alt654=1;
					}
					else if ( (LA654_1==END) ) {
						int LA654_3 = input.LA(3);
						if ( (LA654_3==FILE) ) {
							alt654=1;
						}
					}
					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DEALLOCATE:
				case DO:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt654=1;
					}
					break;
				case END:
					{
					int LA654_3 = input.LA(2);
					if ( (LA654_3==FILE) ) {
						alt654=1;
					}
					}
					break;
			}
			switch (alt654) {
				case 1 :
					// MFortranParser2018.g:7071:9: execution_part
					{
					pushFollow(FOLLOW_execution_part_in_subroutine_subprogram29346);
					execution_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasEP=true; }
					}
					break;

			}

			// MFortranParser2018.g:7072:7: ( internal_subprogram_part )?
			int alt655=2;
			int LA655_0 = input.LA(1);
			if ( (LA655_0==DIGIT_STR) ) {
				int LA655_1 = input.LA(2);
				if ( (LA655_1==CONTAINS) ) {
					alt655=1;
				}
			}
			else if ( (LA655_0==CONTAINS) ) {
				alt655=1;
			}
			switch (alt655) {
				case 1 :
					// MFortranParser2018.g:7072:9: internal_subprogram_part
					{
					pushFollow(FOLLOW_internal_subprogram_part_in_subroutine_subprogram29360);
					internal_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { hasISP=true; }
					}
					break;

			}

			pushFollow(FOLLOW_end_subroutine_stmt_in_subroutine_subprogram29372);
			end_subroutine_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.subroutine_subprogram(hasEP, hasISP); }
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "subroutine_subprogram"



	// $ANTLR start "subroutine_stmt"
	// MFortranParser2018.g:7082:1: subroutine_stmt : (lbl= label )? ( prefix )? SUBROUTINE IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( language_binding_spec )? )? end_of_stmt ;
	public final void subroutine_stmt() throws RecognitionException {
		Token SUBROUTINE640=null;
		Token IDENT641=null;
		Token lbl =null;
		Token end_of_stmt642 =null;


		  boolean hasPref=false;
		  boolean hasDAL=false;
		  boolean hasBS=false;
		  boolean hasAS=false;

		try {
			// MFortranParser2018.g:7092:5: ( (lbl= label )? ( prefix )? SUBROUTINE IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( language_binding_spec )? )? end_of_stmt )
			// MFortranParser2018.g:7092:7: (lbl= label )? ( prefix )? SUBROUTINE IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( language_binding_spec )? )? end_of_stmt
			{
			// MFortranParser2018.g:7092:7: (lbl= label )?
			int alt656=2;
			int LA656_0 = input.LA(1);
			if ( (LA656_0==DIGIT_STR) ) {
				alt656=1;
			}
			switch (alt656) {
				case 1 :
					// MFortranParser2018.g:7092:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_subroutine_stmt29412);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// MFortranParser2018.g:7093:7: ( prefix )?
			int alt657=2;
			int LA657_0 = input.LA(1);
			if ( (LA657_0==CHARACTER||LA657_0==CLASS||LA657_0==COMPLEX||(LA657_0 >= DOUBLE && LA657_0 <= DOUBLEPRECISION)||LA657_0==ELEMENTAL||LA657_0==IMPURE||LA657_0==INTEGER||LA657_0==LOGICAL||LA657_0==MODULE||LA657_0==NON_RECURSIVE||LA657_0==PURE||(LA657_0 >= REAL && LA657_0 <= RECURSIVE)||LA657_0==TYPE) ) {
				alt657=1;
			}
			switch (alt657) {
				case 1 :
					// MFortranParser2018.g:7093:8: prefix
					{
					pushFollow(FOLLOW_prefix_in_subroutine_stmt29424);
					prefix();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasPref=true;}
					}
					break;

			}

			SUBROUTINE640=(Token)match(input,SUBROUTINE,FOLLOW_SUBROUTINE_in_subroutine_stmt29437); if (state.failed) return;
			IDENT641=(Token)match(input,IDENT,FOLLOW_IDENT_in_subroutine_stmt29439); if (state.failed) return;
			// MFortranParser2018.g:7095:7: ( LPAREN ( dummy_arg_list )? RPAREN ( language_binding_spec )? )?
			int alt660=2;
			int LA660_0 = input.LA(1);
			if ( (LA660_0==LPAREN) ) {
				alt660=1;
			}
			switch (alt660) {
				case 1 :
					// MFortranParser2018.g:7095:9: LPAREN ( dummy_arg_list )? RPAREN ( language_binding_spec )?
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_subroutine_stmt29450); if (state.failed) return;
					// MFortranParser2018.g:7095:16: ( dummy_arg_list )?
					int alt658=2;
					int LA658_0 = input.LA(1);
					if ( (LA658_0==ASTERISK||LA658_0==IDENT) ) {
						alt658=1;
					}
					switch (alt658) {
						case 1 :
							// MFortranParser2018.g:7095:17: dummy_arg_list
							{
							pushFollow(FOLLOW_dummy_arg_list_in_subroutine_stmt29453);
							dummy_arg_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasDAL=true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_subroutine_stmt29468); if (state.failed) return;
					if ( state.backtracking==0 ) {hasAS=true;}
					// MFortranParser2018.g:7097:9: ( language_binding_spec )?
					int alt659=2;
					int LA659_0 = input.LA(1);
					if ( (LA659_0==BIND) ) {
						alt659=1;
					}
					switch (alt659) {
						case 1 :
							// MFortranParser2018.g:7097:10: language_binding_spec
							{
							pushFollow(FOLLOW_language_binding_spec_in_subroutine_stmt29481);
							language_binding_spec();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasBS=true;}
							}
							break;

					}

					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_subroutine_stmt29503);
			end_of_stmt642=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.subroutine_stmt(lbl, 
			              SUBROUTINE640, IDENT641, end_of_stmt642, 
			              hasPref, hasDAL, hasBS, hasAS);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "subroutine_stmt"



	// $ANTLR start "dummy_arg"
	// MFortranParser2018.g:7109:1: dummy_arg options {greedy=false; memoize=false; } : ( IDENT | ASTERISK );
	public final void dummy_arg() throws RecognitionException {
		Token IDENT643=null;
		Token ASTERISK644=null;

		try {
			// MFortranParser2018.g:7111:5: ( IDENT | ASTERISK )
			int alt661=2;
			int LA661_0 = input.LA(1);
			if ( (LA661_0==IDENT) ) {
				alt661=1;
			}
			else if ( (LA661_0==ASTERISK) ) {
				alt661=2;
			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 661, 0, input);
				throw nvae;
			}

			switch (alt661) {
				case 1 :
					// MFortranParser2018.g:7111:7: IDENT
					{
					IDENT643=(Token)match(input,IDENT,FOLLOW_IDENT_in_dummy_arg29544); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.dummy_arg(IDENT643);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:7112:7: ASTERISK
					{
					ASTERISK644=(Token)match(input,ASTERISK,FOLLOW_ASTERISK_in_dummy_arg29554); if (state.failed) return;
					if ( state.backtracking==0 ) {MFPA.dummy_arg(ASTERISK644);}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dummy_arg"



	// $ANTLR start "dummy_arg_list"
	// MFortranParser2018.g:7115:1: dummy_arg_list : dummy_arg ( COMMA dummy_arg )* ;
	public final void dummy_arg_list() throws RecognitionException {

		  int numDA = 1;

		try {
			// MFortranParser2018.g:7122:5: ( dummy_arg ( COMMA dummy_arg )* )
			// MFortranParser2018.g:7122:7: dummy_arg ( COMMA dummy_arg )*
			{
			pushFollow(FOLLOW_dummy_arg_in_dummy_arg_list29581);
			dummy_arg();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:7123:7: ( COMMA dummy_arg )*
			loop662:
			while (true) {
				int alt662=2;
				int LA662_0 = input.LA(1);
				if ( (LA662_0==COMMA) ) {
					alt662=1;
				}

				switch (alt662) {
				case 1 :
					// MFortranParser2018.g:7123:9: COMMA dummy_arg
					{
					match(input,COMMA,FOLLOW_COMMA_in_dummy_arg_list29591); if (state.failed) return;
					pushFollow(FOLLOW_dummy_arg_in_dummy_arg_list29593);
					dummy_arg();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {numDA++;}
					}
					break;

				default :
					break loop662;
				}
			}

			}

			if ( state.backtracking==0 ) {
			  MFPA.dummy_arg_list(numDA);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "dummy_arg_list"



	// $ANTLR start "end_subroutine_stmt"
	// MFortranParser2018.g:7129:1: end_subroutine_stmt : ( (lbl= label )? END SUBROUTINE ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt );
	public final void end_subroutine_stmt() throws RecognitionException {
		Token IDENT645=null;
		Token END646=null;
		Token SUBROUTINE647=null;
		Token END649=null;
		Token lbl =null;
		Token end_of_stmt648 =null;
		Token end_of_stmt650 =null;


		  Token id = null;

		try {
			// MFortranParser2018.g:7136:5: ( (lbl= label )? END SUBROUTINE ( IDENT )? end_of_stmt | (lbl= label )? END end_of_stmt )
			int alt666=2;
			int LA666_0 = input.LA(1);
			if ( (LA666_0==DIGIT_STR) ) {
				int LA666_1 = input.LA(2);
				if ( (LA666_1==END) ) {
					int LA666_2 = input.LA(3);
					if ( (LA666_2==SUBROUTINE) ) {
						alt666=1;
					}
					else if ( (LA666_2==EOF||LA666_2==EOS) ) {
						alt666=2;
					}

					else {
						if (state.backtracking>0) {state.failed=true; return;}
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 666, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 666, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA666_0==END) ) {
				int LA666_2 = input.LA(2);
				if ( (LA666_2==SUBROUTINE) ) {
					alt666=1;
				}
				else if ( (LA666_2==EOF||LA666_2==EOS) ) {
					alt666=2;
				}

				else {
					if (state.backtracking>0) {state.failed=true; return;}
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 666, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				if (state.backtracking>0) {state.failed=true; return;}
				NoViableAltException nvae =
					new NoViableAltException("", 666, 0, input);
				throw nvae;
			}

			switch (alt666) {
				case 1 :
					// MFortranParser2018.g:7136:7: (lbl= label )? END SUBROUTINE ( IDENT )? end_of_stmt
					{
					// MFortranParser2018.g:7136:7: (lbl= label )?
					int alt663=2;
					int LA663_0 = input.LA(1);
					if ( (LA663_0==DIGIT_STR) ) {
						alt663=1;
					}
					switch (alt663) {
						case 1 :
							// MFortranParser2018.g:7136:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_subroutine_stmt29628);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END646=(Token)match(input,END,FOLLOW_END_in_end_subroutine_stmt29639); if (state.failed) return;
					SUBROUTINE647=(Token)match(input,SUBROUTINE,FOLLOW_SUBROUTINE_in_end_subroutine_stmt29641); if (state.failed) return;
					// MFortranParser2018.g:7137:22: ( IDENT )?
					int alt664=2;
					int LA664_0 = input.LA(1);
					if ( (LA664_0==IDENT) ) {
						alt664=1;
					}
					switch (alt664) {
						case 1 :
							// MFortranParser2018.g:7137:23: IDENT
							{
							IDENT645=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_subroutine_stmt29644); if (state.failed) return;
							if ( state.backtracking==0 ) {id=IDENT645;}
							}
							break;

					}

					pushFollow(FOLLOW_end_of_stmt_in_end_subroutine_stmt29656);
					end_of_stmt648=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_subroutine_stmt(lbl, 
					              END646, SUBROUTINE647, id, end_of_stmt648);}
					}
					break;
				case 2 :
					// MFortranParser2018.g:7141:7: (lbl= label )? END end_of_stmt
					{
					// MFortranParser2018.g:7141:7: (lbl= label )?
					int alt665=2;
					int LA665_0 = input.LA(1);
					if ( (LA665_0==DIGIT_STR) ) {
						alt665=1;
					}
					switch (alt665) {
						case 1 :
							// MFortranParser2018.g:7141:8: lbl= label
							{
							pushFollow(FOLLOW_label_in_end_subroutine_stmt29677);
							lbl=label();
							state._fsp--;
							if (state.failed) return;
							}
							break;

					}

					END649=(Token)match(input,END,FOLLOW_END_in_end_subroutine_stmt29688); if (state.failed) return;
					pushFollow(FOLLOW_end_of_stmt_in_end_subroutine_stmt29697);
					end_of_stmt650=end_of_stmt();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) { MFPA.end_subroutine_stmt(lbl, 
					              END649, null, id, end_of_stmt650);}
					}
					break;

			}
			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_subroutine_stmt"



	// $ANTLR start "separate_module_subprogram"
	// MFortranParser2018.g:7153:1: separate_module_subprogram : mp_subprogram_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_mp_subprogram_stmt ;
	public final void separate_module_subprogram() throws RecognitionException {

		  boolean hasEP = false;
		  boolean hasISP = false;

		try {
			// MFortranParser2018.g:7161:5: ( mp_subprogram_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_mp_subprogram_stmt )
			// MFortranParser2018.g:7161:7: mp_subprogram_stmt specification_part ( execution_part )? ( internal_subprogram_part )? end_mp_subprogram_stmt
			{
			pushFollow(FOLLOW_mp_subprogram_stmt_in_separate_module_subprogram29734);
			mp_subprogram_stmt();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_specification_part_in_separate_module_subprogram29742);
			specification_part();
			state._fsp--;
			if (state.failed) return;
			// MFortranParser2018.g:7163:7: ( execution_part )?
			int alt667=2;
			switch ( input.LA(1) ) {
				case DIGIT_STR:
					{
					int LA667_1 = input.LA(2);
					if ( (LA667_1==ALLOCATE||LA667_1==ASSOCIATE||LA667_1==BACKSPACE||LA667_1==BLOCK||LA667_1==CALL||LA667_1==CLOSE||LA667_1==CONTINUE||(LA667_1 >= CRITICAL && LA667_1 <= CYCLE)||LA667_1==DEALLOCATE||LA667_1==DO||LA667_1==EXIT||LA667_1==FLUSH||(LA667_1 >= GO && LA667_1 <= GOTO)||(LA667_1 >= IDENT && LA667_1 <= IF)||LA667_1==INQUIRE||(LA667_1 >= M_ALLOCATE_STMT_1 && LA667_1 <= M_ASSIGNMENT_STMT)||(LA667_1 >= M_FORALL_CONSTRUCT_STMT && LA667_1 <= M_IF_STMT)||LA667_1==M_INQUIRE_STMT_2||LA667_1==M_PTR_ASSIGNMENT_STMT||LA667_1==M_WHERE_STMT||LA667_1==NULLIFY||LA667_1==OPEN||LA667_1==PRINT||LA667_1==READ||(LA667_1 >= RETURN && LA667_1 <= REWIND)||(LA667_1 >= SELECT && LA667_1 <= SELECTTYPE)||LA667_1==STOP||LA667_1==SYNC||LA667_1==WAIT||LA667_1==WRITE) ) {
						alt667=1;
					}
					else if ( (LA667_1==END) ) {
						int LA667_3 = input.LA(3);
						if ( (LA667_3==FILE) ) {
							alt667=1;
						}
					}
					}
					break;
				case ALLOCATE:
				case ASSOCIATE:
				case BACKSPACE:
				case BLOCK:
				case CALL:
				case CLOSE:
				case CONTINUE:
				case CRITICAL:
				case CYCLE:
				case DEALLOCATE:
				case DO:
				case EXIT:
				case FLUSH:
				case GO:
				case GOTO:
				case IDENT:
				case IF:
				case INQUIRE:
				case M_ALLOCATE_STMT_1:
				case M_ASSIGNMENT_STMT:
				case M_FORALL_CONSTRUCT_STMT:
				case M_FORALL_STMT:
				case M_IF_STMT:
				case M_INQUIRE_STMT_2:
				case M_PTR_ASSIGNMENT_STMT:
				case M_WHERE_CONSTRUCT_STMT:
				case M_WHERE_STMT:
				case NULLIFY:
				case OPEN:
				case PRAGMA:
				case PRINT:
				case READ:
				case RETURN:
				case REWIND:
				case SELECT:
				case SELECTCASE:
				case SELECTTYPE:
				case STOP:
				case SYNC:
				case WAIT:
				case WRITE:
					{
					alt667=1;
					}
					break;
				case END:
					{
					int LA667_3 = input.LA(2);
					if ( (LA667_3==FILE) ) {
						alt667=1;
					}
					}
					break;
			}
			switch (alt667) {
				case 1 :
					// MFortranParser2018.g:7163:9: execution_part
					{
					pushFollow(FOLLOW_execution_part_in_separate_module_subprogram29752);
					execution_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasEP=true;}
					}
					break;

			}

			// MFortranParser2018.g:7164:7: ( internal_subprogram_part )?
			int alt668=2;
			int LA668_0 = input.LA(1);
			if ( (LA668_0==DIGIT_STR) ) {
				int LA668_1 = input.LA(2);
				if ( (LA668_1==CONTAINS) ) {
					alt668=1;
				}
			}
			else if ( (LA668_0==CONTAINS) ) {
				alt668=1;
			}
			switch (alt668) {
				case 1 :
					// MFortranParser2018.g:7164:9: internal_subprogram_part
					{
					pushFollow(FOLLOW_internal_subprogram_part_in_separate_module_subprogram29767);
					internal_subprogram_part();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasISP=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_mp_subprogram_stmt_in_separate_module_subprogram29780);
			end_mp_subprogram_stmt();
			state._fsp--;
			if (state.failed) return;
			}

			if ( state.backtracking==0 ) {
			  MFPA.separate_module_subprogram(hasEP, hasISP);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "separate_module_subprogram"



	// $ANTLR start "mp_subprogram_stmt"
	// MFortranParser2018.g:7172:1: mp_subprogram_stmt : (lbl= label )? MODULE PROCEDURE IDENT end_of_stmt ;
	public final void mp_subprogram_stmt() throws RecognitionException {
		Token MODULE651=null;
		Token PROCEDURE652=null;
		Token IDENT653=null;
		Token lbl =null;
		Token end_of_stmt654 =null;



		try {
			// MFortranParser2018.g:7178:5: ( (lbl= label )? MODULE PROCEDURE IDENT end_of_stmt )
			// MFortranParser2018.g:7178:7: (lbl= label )? MODULE PROCEDURE IDENT end_of_stmt
			{
			// MFortranParser2018.g:7178:7: (lbl= label )?
			int alt669=2;
			int LA669_0 = input.LA(1);
			if ( (LA669_0==DIGIT_STR) ) {
				alt669=1;
			}
			switch (alt669) {
				case 1 :
					// MFortranParser2018.g:7178:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_mp_subprogram_stmt29810);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			MODULE651=(Token)match(input,MODULE,FOLLOW_MODULE_in_mp_subprogram_stmt29821); if (state.failed) return;
			PROCEDURE652=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_mp_subprogram_stmt29823); if (state.failed) return;
			IDENT653=(Token)match(input,IDENT,FOLLOW_IDENT_in_mp_subprogram_stmt29825); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_mp_subprogram_stmt29834);
			end_of_stmt654=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.mp_subprogram_stmt(lbl, 
			              MODULE651, PROCEDURE652, IDENT653, end_of_stmt654);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "mp_subprogram_stmt"



	// $ANTLR start "end_mp_subprogram_stmt"
	// MFortranParser2018.g:7189:1: end_mp_subprogram_stmt : (lbl= label )? END ( PROCEDURE ( IDENT )? )? end_of_stmt ;
	public final void end_mp_subprogram_stmt() throws RecognitionException {
		Token PROCEDURE655=null;
		Token IDENT656=null;
		Token END657=null;
		Token lbl =null;
		Token end_of_stmt658 =null;


		  Token proc = null; 
		  Token name = null;

		try {
			// MFortranParser2018.g:7197:5: ( (lbl= label )? END ( PROCEDURE ( IDENT )? )? end_of_stmt )
			// MFortranParser2018.g:7197:7: (lbl= label )? END ( PROCEDURE ( IDENT )? )? end_of_stmt
			{
			// MFortranParser2018.g:7197:7: (lbl= label )?
			int alt670=2;
			int LA670_0 = input.LA(1);
			if ( (LA670_0==DIGIT_STR) ) {
				alt670=1;
			}
			switch (alt670) {
				case 1 :
					// MFortranParser2018.g:7197:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_end_mp_subprogram_stmt29874);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			END657=(Token)match(input,END,FOLLOW_END_in_end_mp_subprogram_stmt29885); if (state.failed) return;
			// MFortranParser2018.g:7199:7: ( PROCEDURE ( IDENT )? )?
			int alt672=2;
			int LA672_0 = input.LA(1);
			if ( (LA672_0==PROCEDURE) ) {
				alt672=1;
			}
			switch (alt672) {
				case 1 :
					// MFortranParser2018.g:7199:9: PROCEDURE ( IDENT )?
					{
					PROCEDURE655=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_end_mp_subprogram_stmt29896); if (state.failed) return;
					if ( state.backtracking==0 ) {proc=PROCEDURE655;}
					// MFortranParser2018.g:7200:9: ( IDENT )?
					int alt671=2;
					int LA671_0 = input.LA(1);
					if ( (LA671_0==IDENT) ) {
						alt671=1;
					}
					switch (alt671) {
						case 1 :
							// MFortranParser2018.g:7200:11: IDENT
							{
							IDENT656=(Token)match(input,IDENT,FOLLOW_IDENT_in_end_mp_subprogram_stmt29911); if (state.failed) return;
							if ( state.backtracking==0 ) {name=IDENT656;}
							}
							break;

					}

					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_end_mp_subprogram_stmt29933);
			end_of_stmt658=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.end_mp_subprogram_stmt(lbl, 
			              END657, proc, name, end_of_stmt658);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "end_mp_subprogram_stmt"



	// $ANTLR start "entry_stmt"
	// MFortranParser2018.g:7211:1: entry_stmt : (lbl= label )? ENTRY IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( suffix )? )? end_of_stmt ;
	public final void entry_stmt() throws RecognitionException {
		Token ENTRY659=null;
		Token IDENT660=null;
		Token lbl =null;
		Token end_of_stmt661 =null;


		  boolean hasDAL=false; 
		  boolean hasSffx=false;

		try {
			// MFortranParser2018.g:7219:5: ( (lbl= label )? ENTRY IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( suffix )? )? end_of_stmt )
			// MFortranParser2018.g:7219:7: (lbl= label )? ENTRY IDENT ( LPAREN ( dummy_arg_list )? RPAREN ( suffix )? )? end_of_stmt
			{
			// MFortranParser2018.g:7219:7: (lbl= label )?
			int alt673=2;
			int LA673_0 = input.LA(1);
			if ( (LA673_0==DIGIT_STR) ) {
				alt673=1;
			}
			switch (alt673) {
				case 1 :
					// MFortranParser2018.g:7219:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_entry_stmt29974);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			ENTRY659=(Token)match(input,ENTRY,FOLLOW_ENTRY_in_entry_stmt29986); if (state.failed) return;
			IDENT660=(Token)match(input,IDENT,FOLLOW_IDENT_in_entry_stmt29988); if (state.failed) return;
			// MFortranParser2018.g:7221:7: ( LPAREN ( dummy_arg_list )? RPAREN ( suffix )? )?
			int alt676=2;
			int LA676_0 = input.LA(1);
			if ( (LA676_0==LPAREN) ) {
				alt676=1;
			}
			switch (alt676) {
				case 1 :
					// MFortranParser2018.g:7221:9: LPAREN ( dummy_arg_list )? RPAREN ( suffix )?
					{
					match(input,LPAREN,FOLLOW_LPAREN_in_entry_stmt29999); if (state.failed) return;
					// MFortranParser2018.g:7221:16: ( dummy_arg_list )?
					int alt674=2;
					int LA674_0 = input.LA(1);
					if ( (LA674_0==ASTERISK||LA674_0==IDENT) ) {
						alt674=1;
					}
					switch (alt674) {
						case 1 :
							// MFortranParser2018.g:7221:17: dummy_arg_list
							{
							pushFollow(FOLLOW_dummy_arg_list_in_entry_stmt30002);
							dummy_arg_list();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasDAL=true;}
							}
							break;

					}

					match(input,RPAREN,FOLLOW_RPAREN_in_entry_stmt30017); if (state.failed) return;
					// MFortranParser2018.g:7222:16: ( suffix )?
					int alt675=2;
					int LA675_0 = input.LA(1);
					if ( (LA675_0==BIND||LA675_0==RESULT) ) {
						alt675=1;
					}
					switch (alt675) {
						case 1 :
							// MFortranParser2018.g:7222:17: suffix
							{
							pushFollow(FOLLOW_suffix_in_entry_stmt30020);
							suffix();
							state._fsp--;
							if (state.failed) return;
							if ( state.backtracking==0 ) {hasSffx=true;}
							}
							break;

					}

					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_entry_stmt30042);
			end_of_stmt661=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.entry_stmt(lbl, 
			              ENTRY659, IDENT660, end_of_stmt661, 
			              hasDAL, hasSffx);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "entry_stmt"



	// $ANTLR start "return_stmt"
	// MFortranParser2018.g:7234:1: return_stmt : (lbl= label )? RETURN ( expr )? end_of_stmt ;
	public final void return_stmt() throws RecognitionException {
		Token RETURN662=null;
		Token lbl =null;
		Token end_of_stmt663 =null;


		  boolean hasExpr = false;

		try {
			// MFortranParser2018.g:7241:5: ( (lbl= label )? RETURN ( expr )? end_of_stmt )
			// MFortranParser2018.g:7241:7: (lbl= label )? RETURN ( expr )? end_of_stmt
			{
			// MFortranParser2018.g:7241:7: (lbl= label )?
			int alt677=2;
			int LA677_0 = input.LA(1);
			if ( (LA677_0==DIGIT_STR) ) {
				alt677=1;
			}
			switch (alt677) {
				case 1 :
					// MFortranParser2018.g:7241:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_return_stmt30083);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			RETURN662=(Token)match(input,RETURN,FOLLOW_RETURN_in_return_stmt30095); if (state.failed) return;
			// MFortranParser2018.g:7242:14: ( expr )?
			int alt678=2;
			int LA678_0 = input.LA(1);
			if ( (LA678_0==BIN_CONST||LA678_0==CHAR_CONST||(LA678_0 >= DEFINED_OP && LA678_0 <= DIGIT_STR)||LA678_0==FALSE||(LA678_0 >= HEX_CONST && LA678_0 <= IDENT)||LA678_0==LBRACKET||LA678_0==LPAREN||LA678_0==MINUS||LA678_0==M_REAL_CONST||LA678_0==NOT||LA678_0==OCT_CONST||LA678_0==PLUS||LA678_0==TRUE) ) {
				alt678=1;
			}
			switch (alt678) {
				case 1 :
					// MFortranParser2018.g:7242:15: expr
					{
					pushFollow(FOLLOW_expr_in_return_stmt30098);
					expr();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasExpr=true;}
					}
					break;

			}

			pushFollow(FOLLOW_end_of_stmt_in_return_stmt30111);
			end_of_stmt663=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.return_stmt(lbl, 
			              RETURN662, end_of_stmt663, hasExpr);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "return_stmt"



	// $ANTLR start "contains_stmt"
	// MFortranParser2018.g:7251:1: contains_stmt : (lbl= label )? CONTAINS end_of_stmt ;
	public final void contains_stmt() throws RecognitionException {
		Token CONTAINS664=null;
		Token lbl =null;
		Token end_of_stmt665 =null;



		try {
			// MFortranParser2018.g:7257:5: ( (lbl= label )? CONTAINS end_of_stmt )
			// MFortranParser2018.g:7257:7: (lbl= label )? CONTAINS end_of_stmt
			{
			// MFortranParser2018.g:7257:7: (lbl= label )?
			int alt679=2;
			int LA679_0 = input.LA(1);
			if ( (LA679_0==DIGIT_STR) ) {
				alt679=1;
			}
			switch (alt679) {
				case 1 :
					// MFortranParser2018.g:7257:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_contains_stmt30151);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			CONTAINS664=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_contains_stmt30162); if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_contains_stmt30170);
			end_of_stmt665=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.contains_stmt(lbl,
			              CONTAINS664, end_of_stmt665); }
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "contains_stmt"



	// $ANTLR start "stmt_function_stmt"
	// MFortranParser2018.g:7276:1: stmt_function_stmt : (lbl= label )? STMT_FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN EQUALS expr end_of_stmt ;
	public final void stmt_function_stmt() throws RecognitionException {
		Token IDENT666=null;
		Token lbl =null;
		Token end_of_stmt667 =null;


		  boolean hasGNL = false;

		try {
			// MFortranParser2018.g:7283:5: ( (lbl= label )? STMT_FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN EQUALS expr end_of_stmt )
			// MFortranParser2018.g:7283:7: (lbl= label )? STMT_FUNCTION IDENT LPAREN ( generic_name_list )? RPAREN EQUALS expr end_of_stmt
			{
			// MFortranParser2018.g:7283:7: (lbl= label )?
			int alt680=2;
			int LA680_0 = input.LA(1);
			if ( (LA680_0==DIGIT_STR) ) {
				alt680=1;
			}
			switch (alt680) {
				case 1 :
					// MFortranParser2018.g:7283:8: lbl= label
					{
					pushFollow(FOLLOW_label_in_stmt_function_stmt30210);
					lbl=label();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			match(input,STMT_FUNCTION,FOLLOW_STMT_FUNCTION_in_stmt_function_stmt30221); if (state.failed) return;
			IDENT666=(Token)match(input,IDENT,FOLLOW_IDENT_in_stmt_function_stmt30223); if (state.failed) return;
			match(input,LPAREN,FOLLOW_LPAREN_in_stmt_function_stmt30225); if (state.failed) return;
			// MFortranParser2018.g:7285:7: ( generic_name_list )?
			int alt681=2;
			int LA681_0 = input.LA(1);
			if ( (LA681_0==IDENT) ) {
				alt681=1;
			}
			switch (alt681) {
				case 1 :
					// MFortranParser2018.g:7285:9: generic_name_list
					{
					pushFollow(FOLLOW_generic_name_list_in_stmt_function_stmt30236);
					generic_name_list();
					state._fsp--;
					if (state.failed) return;
					if ( state.backtracking==0 ) {hasGNL=true;}
					}
					break;

			}

			match(input,RPAREN,FOLLOW_RPAREN_in_stmt_function_stmt30249); if (state.failed) return;
			match(input,EQUALS,FOLLOW_EQUALS_in_stmt_function_stmt30251); if (state.failed) return;
			pushFollow(FOLLOW_expr_in_stmt_function_stmt30253);
			expr();
			state._fsp--;
			if (state.failed) return;
			pushFollow(FOLLOW_end_of_stmt_in_stmt_function_stmt30262);
			end_of_stmt667=end_of_stmt();
			state._fsp--;
			if (state.failed) return;
			if ( state.backtracking==0 ) { MFPA.stmt_function_stmt(lbl, 
			              IDENT666, end_of_stmt667, hasGNL);}
			}

			if ( state.backtracking==0 ) {
			  checkForInclude();
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
	}
	// $ANTLR end "stmt_function_stmt"



	// $ANTLR start "end_of_stmt"
	// MFortranParser2018.g:7309:1: end_of_stmt returns [Token t] : ( EOS | ( EOF )=> EOF );
	public final Token end_of_stmt() throws RecognitionException {
		Token t = null;


		Token EOS668=null;
		Token EOF669=null;

		try {
			// MFortranParser2018.g:7310:5: ( EOS | ( EOF )=> EOF )
			int alt682=2;
			int LA682_0 = input.LA(1);
			if ( (LA682_0==EOS) ) {
				alt682=1;
			}
			else if ( (LA682_0==EOF) && (synpred73_MFortranParser2018())) {
				alt682=2;
			}

			switch (alt682) {
				case 1 :
					// MFortranParser2018.g:7310:7: EOS
					{
					EOS668=(Token)match(input,EOS,FOLLOW_EOS_in_end_of_stmt30298); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = EOS668;}
					}
					break;
				case 2 :
					// MFortranParser2018.g:7312:7: ( EOF )=> EOF
					{
					EOF669=(Token)match(input,EOF,FOLLOW_EOF_in_end_of_stmt30322); if (state.failed) return t;
					if ( state.backtracking==0 ) { t = EOF669;}
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return t;
	}
	// $ANTLR end "end_of_stmt"

	// $ANTLR start synpred1_MFortranParser2018
	public final void synpred1_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:94:7: ( ( label )? IMPLICIT )
		// MFortranParser2018.g:94:8: ( label )? IMPLICIT
		{
		// MFortranParser2018.g:94:8: ( label )?
		int alt683=2;
		int LA683_0 = input.LA(1);
		if ( (LA683_0==DIGIT_STR) ) {
			alt683=1;
		}
		switch (alt683) {
			case 1 :
				// MFortranParser2018.g:94:9: label
				{
				pushFollow(FOLLOW_label_in_synpred1_MFortranParser2018191);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,IMPLICIT,FOLLOW_IMPLICIT_in_synpred1_MFortranParser2018195); if (state.failed) return;
		}

	}
	// $ANTLR end synpred1_MFortranParser2018

	// $ANTLR start synpred2_MFortranParser2018
	public final void synpred2_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:96:7: ( ( label )? PARAMETER )
		// MFortranParser2018.g:96:8: ( label )? PARAMETER
		{
		// MFortranParser2018.g:96:8: ( label )?
		int alt684=2;
		int LA684_0 = input.LA(1);
		if ( (LA684_0==DIGIT_STR) ) {
			alt684=1;
		}
		switch (alt684) {
			case 1 :
				// MFortranParser2018.g:96:9: label
				{
				pushFollow(FOLLOW_label_in_synpred2_MFortranParser2018227);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,PARAMETER,FOLLOW_PARAMETER_in_synpred2_MFortranParser2018231); if (state.failed) return;
		}

	}
	// $ANTLR end synpred2_MFortranParser2018

	// $ANTLR start synpred3_MFortranParser2018
	public final void synpred3_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:98:7: ( ( label )? FORMAT )
		// MFortranParser2018.g:98:8: ( label )? FORMAT
		{
		// MFortranParser2018.g:98:8: ( label )?
		int alt685=2;
		int LA685_0 = input.LA(1);
		if ( (LA685_0==DIGIT_STR) ) {
			alt685=1;
		}
		switch (alt685) {
			case 1 :
				// MFortranParser2018.g:98:9: label
				{
				pushFollow(FOLLOW_label_in_synpred3_MFortranParser2018261);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,FORMAT,FOLLOW_FORMAT_in_synpred3_MFortranParser2018265); if (state.failed) return;
		}

	}
	// $ANTLR end synpred3_MFortranParser2018

	// $ANTLR start synpred4_MFortranParser2018
	public final void synpred4_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:100:7: ( ( label )? ENTRY )
		// MFortranParser2018.g:100:8: ( label )? ENTRY
		{
		// MFortranParser2018.g:100:8: ( label )?
		int alt686=2;
		int LA686_0 = input.LA(1);
		if ( (LA686_0==DIGIT_STR) ) {
			alt686=1;
		}
		switch (alt686) {
			case 1 :
				// MFortranParser2018.g:100:9: label
				{
				pushFollow(FOLLOW_label_in_synpred4_MFortranParser2018301);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,ENTRY,FOLLOW_ENTRY_in_synpred4_MFortranParser2018305); if (state.failed) return;
		}

	}
	// $ANTLR end synpred4_MFortranParser2018

	// $ANTLR start synpred5_MFortranParser2018
	public final void synpred5_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:197:7: ( ( prefix )? function_subprogram )
		// MFortranParser2018.g:197:7: ( prefix )? function_subprogram
		{
		// MFortranParser2018.g:197:7: ( prefix )?
		int alt687=2;
		int LA687_0 = input.LA(1);
		if ( (LA687_0==CHARACTER||LA687_0==CLASS||LA687_0==COMPLEX||(LA687_0 >= DOUBLE && LA687_0 <= DOUBLEPRECISION)||LA687_0==ELEMENTAL||LA687_0==IMPURE||LA687_0==INTEGER||LA687_0==LOGICAL||LA687_0==MODULE||LA687_0==NON_RECURSIVE||LA687_0==PURE||(LA687_0 >= REAL && LA687_0 <= RECURSIVE)||LA687_0==TYPE) ) {
			alt687=1;
		}
		switch (alt687) {
			case 1 :
				// MFortranParser2018.g:197:9: prefix
				{
				pushFollow(FOLLOW_prefix_in_synpred5_MFortranParser2018763);
				prefix();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		pushFollow(FOLLOW_function_subprogram_in_synpred5_MFortranParser2018768);
		function_subprogram();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred5_MFortranParser2018

	// $ANTLR start synpred6_MFortranParser2018
	public final void synpred6_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:1453:7: ( type_spec COLON_COLON ( ac_value_list )? )
		// MFortranParser2018.g:1453:7: type_spec COLON_COLON ( ac_value_list )?
		{
		pushFollow(FOLLOW_type_spec_in_synpred6_MFortranParser20186080);
		type_spec();
		state._fsp--;
		if (state.failed) return;
		match(input,COLON_COLON,FOLLOW_COLON_COLON_in_synpred6_MFortranParser20186082); if (state.failed) return;
		// MFortranParser2018.g:1454:6: ( ac_value_list )?
		int alt688=2;
		int LA688_0 = input.LA(1);
		if ( (LA688_0==BIN_CONST||LA688_0==CHAR_CONST||(LA688_0 >= DEFINED_OP && LA688_0 <= DIGIT_STR)||LA688_0==FALSE||(LA688_0 >= HEX_CONST && LA688_0 <= IDENT)||LA688_0==LBRACKET||LA688_0==LPAREN||LA688_0==MINUS||LA688_0==M_REAL_CONST||LA688_0==NOT||LA688_0==OCT_CONST||LA688_0==PLUS||LA688_0==TRUE) ) {
			alt688=1;
		}
		switch (alt688) {
			case 1 :
				// MFortranParser2018.g:1454:7: ac_value_list
				{
				pushFollow(FOLLOW_ac_value_list_in_synpred6_MFortranParser20186091);
				ac_value_list();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		}

	}
	// $ANTLR end synpred6_MFortranParser2018

	// $ANTLR start synpred7_MFortranParser2018
	public final void synpred7_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:1473:7: ( expr )
		// MFortranParser2018.g:1473:7: expr
		{
		pushFollow(FOLLOW_expr_in_synpred7_MFortranParser20186147);
		expr();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred7_MFortranParser2018

	// $ANTLR start synpred8_MFortranParser2018
	public final void synpred8_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2118:7: ( designator ( ASTERISK data_stmt_constant )? )
		// MFortranParser2018.g:2118:7: designator ( ASTERISK data_stmt_constant )?
		{
		pushFollow(FOLLOW_designator_in_synpred8_MFortranParser20188757);
		designator();
		state._fsp--;
		if (state.failed) return;
		// MFortranParser2018.g:2118:18: ( ASTERISK data_stmt_constant )?
		int alt689=2;
		int LA689_0 = input.LA(1);
		if ( (LA689_0==ASTERISK) ) {
			alt689=1;
		}
		switch (alt689) {
			case 1 :
				// MFortranParser2018.g:2118:19: ASTERISK data_stmt_constant
				{
				match(input,ASTERISK,FOLLOW_ASTERISK_in_synpred8_MFortranParser20188760); if (state.failed) return;
				pushFollow(FOLLOW_data_stmt_constant_in_synpred8_MFortranParser20188762);
				data_stmt_constant();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		}

	}
	// $ANTLR end synpred8_MFortranParser2018

	// $ANTLR start synpred9_MFortranParser2018
	public final void synpred9_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2119:7: ( int_literal_constant ( ASTERISK data_stmt_constant )? )
		// MFortranParser2018.g:2119:7: int_literal_constant ( ASTERISK data_stmt_constant )?
		{
		pushFollow(FOLLOW_int_literal_constant_in_synpred9_MFortranParser20188774);
		int_literal_constant();
		state._fsp--;
		if (state.failed) return;
		// MFortranParser2018.g:2119:28: ( ASTERISK data_stmt_constant )?
		int alt690=2;
		int LA690_0 = input.LA(1);
		if ( (LA690_0==ASTERISK) ) {
			alt690=1;
		}
		switch (alt690) {
			case 1 :
				// MFortranParser2018.g:2119:29: ASTERISK data_stmt_constant
				{
				match(input,ASTERISK,FOLLOW_ASTERISK_in_synpred9_MFortranParser20188777); if (state.failed) return;
				pushFollow(FOLLOW_data_stmt_constant_in_synpred9_MFortranParser20188779);
				data_stmt_constant();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		}

	}
	// $ANTLR end synpred9_MFortranParser2018

	// $ANTLR start synpred10_MFortranParser2018
	public final void synpred10_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2120:7: ( signed_int_literal_constant )
		// MFortranParser2018.g:2120:7: signed_int_literal_constant
		{
		pushFollow(FOLLOW_signed_int_literal_constant_in_synpred10_MFortranParser20188791);
		signed_int_literal_constant();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred10_MFortranParser2018

	// $ANTLR start synpred14_MFortranParser2018
	public final void synpred14_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2124:7: ( char_literal_constant )
		// MFortranParser2018.g:2124:7: char_literal_constant
		{
		pushFollow(FOLLOW_char_literal_constant_in_synpred14_MFortranParser20188823);
		char_literal_constant();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred14_MFortranParser2018

	// $ANTLR start synpred16_MFortranParser2018
	public final void synpred16_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2153:7: ( designator )
		// MFortranParser2018.g:2153:7: designator
		{
		pushFollow(FOLLOW_designator_in_synpred16_MFortranParser20188917);
		designator();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred16_MFortranParser2018

	// $ANTLR start synpred21_MFortranParser2018
	public final void synpred21_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2158:7: ( char_literal_constant )
		// MFortranParser2018.g:2158:7: char_literal_constant
		{
		pushFollow(FOLLOW_char_literal_constant_in_synpred21_MFortranParser20188957);
		char_literal_constant();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred21_MFortranParser2018

	// $ANTLR start synpred23_MFortranParser2018
	public final void synpred23_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:2997:7: ( IDENT LPAREN )
		// MFortranParser2018.g:2997:8: IDENT LPAREN
		{
		match(input,IDENT,FOLLOW_IDENT_in_synpred23_MFortranParser201812492); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred23_MFortranParser201812494); if (state.failed) return;
		}

	}
	// $ANTLR end synpred23_MFortranParser2018

	// $ANTLR start synpred24_MFortranParser2018
	public final void synpred24_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3001:7: ( IDENT LBRACKET )
		// MFortranParser2018.g:3001:8: IDENT LBRACKET
		{
		match(input,IDENT,FOLLOW_IDENT_in_synpred24_MFortranParser201812552); if (state.failed) return;
		match(input,LBRACKET,FOLLOW_LBRACKET_in_synpred24_MFortranParser201812554); if (state.failed) return;
		}

	}
	// $ANTLR end synpred24_MFortranParser2018

	// $ANTLR start synpred25_MFortranParser2018
	public final void synpred25_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3018:7: ( IDENT LPAREN )
		// MFortranParser2018.g:3018:8: IDENT LPAREN
		{
		match(input,IDENT,FOLLOW_IDENT_in_synpred25_MFortranParser201812633); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred25_MFortranParser201812635); if (state.failed) return;
		}

	}
	// $ANTLR end synpred25_MFortranParser2018

	// $ANTLR start synpred26_MFortranParser2018
	public final void synpred26_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3259:7: ( allocate_object LBRACKET )
		// MFortranParser2018.g:3259:8: allocate_object LBRACKET
		{
		pushFollow(FOLLOW_allocate_object_in_synpred26_MFortranParser201813564);
		allocate_object();
		state._fsp--;
		if (state.failed) return;
		match(input,LBRACKET,FOLLOW_LBRACKET_in_synpred26_MFortranParser201813566); if (state.failed) return;
		}

	}
	// $ANTLR end synpred26_MFortranParser2018

	// $ANTLR start synpred27_MFortranParser2018
	public final void synpred27_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3271:7: ( allocate_object )
		// MFortranParser2018.g:3271:8: allocate_object
		{
		pushFollow(FOLLOW_allocate_object_in_synpred27_MFortranParser201813619);
		allocate_object();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred27_MFortranParser2018

	// $ANTLR start synpred28_MFortranParser2018
	public final void synpred28_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3358:7: ( ASTERISK )
		// MFortranParser2018.g:3358:8: ASTERISK
		{
		match(input,ASTERISK,FOLLOW_ASTERISK_in_synpred28_MFortranParser201813886); if (state.failed) return;
		}

	}
	// $ANTLR end synpred28_MFortranParser2018

	// $ANTLR start synpred29_MFortranParser2018
	public final void synpred29_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3359:7: ( expr COLON ASTERISK )
		// MFortranParser2018.g:3359:8: expr COLON ASTERISK
		{
		pushFollow(FOLLOW_expr_in_synpred29_MFortranParser201813900);
		expr();
		state._fsp--;
		if (state.failed) return;
		match(input,COLON,FOLLOW_COLON_in_synpred29_MFortranParser201813902); if (state.failed) return;
		match(input,ASTERISK,FOLLOW_ASTERISK_in_synpred29_MFortranParser201813904); if (state.failed) return;
		}

	}
	// $ANTLR end synpred29_MFortranParser2018

	// $ANTLR start synpred30_MFortranParser2018
	public final void synpred30_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3483:7: ( designator_or_func_ref )
		// MFortranParser2018.g:3483:7: designator_or_func_ref
		{
		pushFollow(FOLLOW_designator_or_func_ref_in_synpred30_MFortranParser201814344);
		designator_or_func_ref();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred30_MFortranParser2018

	// $ANTLR start synpred31_MFortranParser2018
	public final void synpred31_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3484:7: ( literal_constant )
		// MFortranParser2018.g:3484:7: literal_constant
		{
		pushFollow(FOLLOW_literal_constant_in_synpred31_MFortranParser201814352);
		literal_constant();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred31_MFortranParser2018

	// $ANTLR start synpred32_MFortranParser2018
	public final void synpred32_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3485:7: ( array_constructor )
		// MFortranParser2018.g:3485:7: array_constructor
		{
		pushFollow(FOLLOW_array_constructor_in_synpred32_MFortranParser201814360);
		array_constructor();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred32_MFortranParser2018

	// $ANTLR start synpred33_MFortranParser2018
	public final void synpred33_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:3486:7: ( structure_constructor )
		// MFortranParser2018.g:3486:7: structure_constructor
		{
		pushFollow(FOLLOW_structure_constructor_in_synpred33_MFortranParser201814368);
		structure_constructor();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred33_MFortranParser2018

	// $ANTLR start synpred34_MFortranParser2018
	public final void synpred34_MFortranParser2018_fragment() throws RecognitionException {
		Token lbl =null;

		// MFortranParser2018.g:3796:7: ( (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref EQ_GT expr end_of_stmt )
		// MFortranParser2018.g:3796:7: (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref EQ_GT expr end_of_stmt
		{
		// MFortranParser2018.g:3796:7: (lbl= label )?
		int alt691=2;
		int LA691_0 = input.LA(1);
		if ( (LA691_0==DIGIT_STR) ) {
			alt691=1;
		}
		switch (alt691) {
			case 1 :
				// MFortranParser2018.g:3796:8: lbl= label
				{
				pushFollow(FOLLOW_label_in_synpred34_MFortranParser201815583);
				lbl=label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,M_PTR_ASSIGNMENT_STMT,FOLLOW_M_PTR_ASSIGNMENT_STMT_in_synpred34_MFortranParser201815595); if (state.failed) return;
		pushFollow(FOLLOW_data_ref_in_synpred34_MFortranParser201815597);
		data_ref();
		state._fsp--;
		if (state.failed) return;
		match(input,EQ_GT,FOLLOW_EQ_GT_in_synpred34_MFortranParser201815599); if (state.failed) return;
		pushFollow(FOLLOW_expr_in_synpred34_MFortranParser201815601);
		expr();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_end_of_stmt_in_synpred34_MFortranParser201815609);
		end_of_stmt();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred34_MFortranParser2018

	// $ANTLR start synpred35_MFortranParser2018
	public final void synpred35_MFortranParser2018_fragment() throws RecognitionException {
		Token lbl =null;

		// MFortranParser2018.g:3801:7: ( (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_spec_list RPAREN EQ_GT expr end_of_stmt )
		// MFortranParser2018.g:3801:7: (lbl= label )? M_PTR_ASSIGNMENT_STMT data_ref LPAREN bounds_spec_list RPAREN EQ_GT expr end_of_stmt
		{
		// MFortranParser2018.g:3801:7: (lbl= label )?
		int alt692=2;
		int LA692_0 = input.LA(1);
		if ( (LA692_0==DIGIT_STR) ) {
			alt692=1;
		}
		switch (alt692) {
			case 1 :
				// MFortranParser2018.g:3801:8: lbl= label
				{
				pushFollow(FOLLOW_label_in_synpred35_MFortranParser201815630);
				lbl=label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,M_PTR_ASSIGNMENT_STMT,FOLLOW_M_PTR_ASSIGNMENT_STMT_in_synpred35_MFortranParser201815641); if (state.failed) return;
		pushFollow(FOLLOW_data_ref_in_synpred35_MFortranParser201815643);
		data_ref();
		state._fsp--;
		if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred35_MFortranParser201815652); if (state.failed) return;
		pushFollow(FOLLOW_bounds_spec_list_in_synpred35_MFortranParser201815654);
		bounds_spec_list();
		state._fsp--;
		if (state.failed) return;
		match(input,RPAREN,FOLLOW_RPAREN_in_synpred35_MFortranParser201815656); if (state.failed) return;
		match(input,EQ_GT,FOLLOW_EQ_GT_in_synpred35_MFortranParser201815658); if (state.failed) return;
		pushFollow(FOLLOW_expr_in_synpred35_MFortranParser201815660);
		expr();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_end_of_stmt_in_synpred35_MFortranParser201815669);
		end_of_stmt();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred35_MFortranParser2018

	// $ANTLR start synpred36_MFortranParser2018
	public final void synpred36_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4279:7: ( ( label )? ENTRY )
		// MFortranParser2018.g:4279:8: ( label )? ENTRY
		{
		// MFortranParser2018.g:4279:8: ( label )?
		int alt693=2;
		int LA693_0 = input.LA(1);
		if ( (LA693_0==DIGIT_STR) ) {
			alt693=1;
		}
		switch (alt693) {
			case 1 :
				// MFortranParser2018.g:4279:9: label
				{
				pushFollow(FOLLOW_label_in_synpred36_MFortranParser201817463);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,ENTRY,FOLLOW_ENTRY_in_synpred36_MFortranParser201817467); if (state.failed) return;
		}

	}
	// $ANTLR end synpred36_MFortranParser2018

	// $ANTLR start synpred37_MFortranParser2018
	public final void synpred37_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4281:7: ( ( label )? ENUM )
		// MFortranParser2018.g:4281:8: ( label )? ENUM
		{
		// MFortranParser2018.g:4281:8: ( label )?
		int alt694=2;
		int LA694_0 = input.LA(1);
		if ( (LA694_0==DIGIT_STR) ) {
			alt694=1;
		}
		switch (alt694) {
			case 1 :
				// MFortranParser2018.g:4281:9: label
				{
				pushFollow(FOLLOW_label_in_synpred37_MFortranParser201817494);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,ENUM,FOLLOW_ENUM_in_synpred37_MFortranParser201817498); if (state.failed) return;
		}

	}
	// $ANTLR end synpred37_MFortranParser2018

	// $ANTLR start synpred38_MFortranParser2018
	public final void synpred38_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4283:7: ( ( label )? FORMAT )
		// MFortranParser2018.g:4283:8: ( label )? FORMAT
		{
		// MFortranParser2018.g:4283:8: ( label )?
		int alt695=2;
		int LA695_0 = input.LA(1);
		if ( (LA695_0==DIGIT_STR) ) {
			alt695=1;
		}
		switch (alt695) {
			case 1 :
				// MFortranParser2018.g:4283:9: label
				{
				pushFollow(FOLLOW_label_in_synpred38_MFortranParser201817525);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,FORMAT,FOLLOW_FORMAT_in_synpred38_MFortranParser201817529); if (state.failed) return;
		}

	}
	// $ANTLR end synpred38_MFortranParser2018

	// $ANTLR start synpred39_MFortranParser2018
	public final void synpred39_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4285:7: ( ( label )? INTERFACE )
		// MFortranParser2018.g:4285:8: ( label )? INTERFACE
		{
		// MFortranParser2018.g:4285:8: ( label )?
		int alt696=2;
		int LA696_0 = input.LA(1);
		if ( (LA696_0==DIGIT_STR) ) {
			alt696=1;
		}
		switch (alt696) {
			case 1 :
				// MFortranParser2018.g:4285:9: label
				{
				pushFollow(FOLLOW_label_in_synpred39_MFortranParser201817556);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,INTERFACE,FOLLOW_INTERFACE_in_synpred39_MFortranParser201817560); if (state.failed) return;
		}

	}
	// $ANTLR end synpred39_MFortranParser2018

	// $ANTLR start synpred40_MFortranParser2018
	public final void synpred40_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4287:7: ( ( label )? PARAMETER )
		// MFortranParser2018.g:4287:8: ( label )? PARAMETER
		{
		// MFortranParser2018.g:4287:8: ( label )?
		int alt697=2;
		int LA697_0 = input.LA(1);
		if ( (LA697_0==DIGIT_STR) ) {
			alt697=1;
		}
		switch (alt697) {
			case 1 :
				// MFortranParser2018.g:4287:9: label
				{
				pushFollow(FOLLOW_label_in_synpred40_MFortranParser201817587);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,PARAMETER,FOLLOW_PARAMETER_in_synpred40_MFortranParser201817591); if (state.failed) return;
		}

	}
	// $ANTLR end synpred40_MFortranParser2018

	// $ANTLR start synpred41_MFortranParser2018
	public final void synpred41_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4289:7: ( ( label )? PROCEDURE )
		// MFortranParser2018.g:4289:8: ( label )? PROCEDURE
		{
		// MFortranParser2018.g:4289:8: ( label )?
		int alt698=2;
		int LA698_0 = input.LA(1);
		if ( (LA698_0==DIGIT_STR) ) {
			alt698=1;
		}
		switch (alt698) {
			case 1 :
				// MFortranParser2018.g:4289:9: label
				{
				pushFollow(FOLLOW_label_in_synpred41_MFortranParser201817618);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,PROCEDURE,FOLLOW_PROCEDURE_in_synpred41_MFortranParser201817622); if (state.failed) return;
		}

	}
	// $ANTLR end synpred41_MFortranParser2018

	// $ANTLR start synpred42_MFortranParser2018
	public final void synpred42_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4291:7: ( derived_type_stmt )
		// MFortranParser2018.g:4291:8: derived_type_stmt
		{
		pushFollow(FOLLOW_derived_type_stmt_in_synpred42_MFortranParser201817649);
		derived_type_stmt();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred42_MFortranParser2018

	// $ANTLR start synpred43_MFortranParser2018
	public final void synpred43_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4293:7: ( type_declaration_stmt )
		// MFortranParser2018.g:4293:8: type_declaration_stmt
		{
		pushFollow(FOLLOW_type_declaration_stmt_in_synpred43_MFortranParser201817675);
		type_declaration_stmt();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred43_MFortranParser2018

	// $ANTLR start synpred44_MFortranParser2018
	public final void synpred44_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4295:7: ( ( label )? access_spec )
		// MFortranParser2018.g:4295:8: ( label )? access_spec
		{
		// MFortranParser2018.g:4295:8: ( label )?
		int alt699=2;
		int LA699_0 = input.LA(1);
		if ( (LA699_0==DIGIT_STR) ) {
			alt699=1;
		}
		switch (alt699) {
			case 1 :
				// MFortranParser2018.g:4295:9: label
				{
				pushFollow(FOLLOW_label_in_synpred44_MFortranParser201817702);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		pushFollow(FOLLOW_access_spec_in_synpred44_MFortranParser201817706);
		access_spec();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred44_MFortranParser2018

	// $ANTLR start synpred45_MFortranParser2018
	public final void synpred45_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4297:7: ( ( label )? ALLOCATABLE )
		// MFortranParser2018.g:4297:8: ( label )? ALLOCATABLE
		{
		// MFortranParser2018.g:4297:8: ( label )?
		int alt700=2;
		int LA700_0 = input.LA(1);
		if ( (LA700_0==DIGIT_STR) ) {
			alt700=1;
		}
		switch (alt700) {
			case 1 :
				// MFortranParser2018.g:4297:9: label
				{
				pushFollow(FOLLOW_label_in_synpred45_MFortranParser201817733);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,ALLOCATABLE,FOLLOW_ALLOCATABLE_in_synpred45_MFortranParser201817737); if (state.failed) return;
		}

	}
	// $ANTLR end synpred45_MFortranParser2018

	// $ANTLR start synpred46_MFortranParser2018
	public final void synpred46_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4299:7: ( ( label )? ASYNCHRONOUS )
		// MFortranParser2018.g:4299:8: ( label )? ASYNCHRONOUS
		{
		// MFortranParser2018.g:4299:8: ( label )?
		int alt701=2;
		int LA701_0 = input.LA(1);
		if ( (LA701_0==DIGIT_STR) ) {
			alt701=1;
		}
		switch (alt701) {
			case 1 :
				// MFortranParser2018.g:4299:9: label
				{
				pushFollow(FOLLOW_label_in_synpred46_MFortranParser201817765);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,ASYNCHRONOUS,FOLLOW_ASYNCHRONOUS_in_synpred46_MFortranParser201817769); if (state.failed) return;
		}

	}
	// $ANTLR end synpred46_MFortranParser2018

	// $ANTLR start synpred47_MFortranParser2018
	public final void synpred47_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4301:7: ( ( label )? BIND )
		// MFortranParser2018.g:4301:8: ( label )? BIND
		{
		// MFortranParser2018.g:4301:8: ( label )?
		int alt702=2;
		int LA702_0 = input.LA(1);
		if ( (LA702_0==DIGIT_STR) ) {
			alt702=1;
		}
		switch (alt702) {
			case 1 :
				// MFortranParser2018.g:4301:9: label
				{
				pushFollow(FOLLOW_label_in_synpred47_MFortranParser201817797);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,BIND,FOLLOW_BIND_in_synpred47_MFortranParser201817801); if (state.failed) return;
		}

	}
	// $ANTLR end synpred47_MFortranParser2018

	// $ANTLR start synpred48_MFortranParser2018
	public final void synpred48_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4303:7: ( ( label )? CODIMENSION )
		// MFortranParser2018.g:4303:8: ( label )? CODIMENSION
		{
		// MFortranParser2018.g:4303:8: ( label )?
		int alt703=2;
		int LA703_0 = input.LA(1);
		if ( (LA703_0==DIGIT_STR) ) {
			alt703=1;
		}
		switch (alt703) {
			case 1 :
				// MFortranParser2018.g:4303:9: label
				{
				pushFollow(FOLLOW_label_in_synpred48_MFortranParser201817828);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,CODIMENSION,FOLLOW_CODIMENSION_in_synpred48_MFortranParser201817832); if (state.failed) return;
		}

	}
	// $ANTLR end synpred48_MFortranParser2018

	// $ANTLR start synpred49_MFortranParser2018
	public final void synpred49_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4305:7: ( ( label )? DATA )
		// MFortranParser2018.g:4305:8: ( label )? DATA
		{
		// MFortranParser2018.g:4305:8: ( label )?
		int alt704=2;
		int LA704_0 = input.LA(1);
		if ( (LA704_0==DIGIT_STR) ) {
			alt704=1;
		}
		switch (alt704) {
			case 1 :
				// MFortranParser2018.g:4305:9: label
				{
				pushFollow(FOLLOW_label_in_synpred49_MFortranParser201817859);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,DATA,FOLLOW_DATA_in_synpred49_MFortranParser201817863); if (state.failed) return;
		}

	}
	// $ANTLR end synpred49_MFortranParser2018

	// $ANTLR start synpred50_MFortranParser2018
	public final void synpred50_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4307:7: ( ( label )? DIMENSION )
		// MFortranParser2018.g:4307:8: ( label )? DIMENSION
		{
		// MFortranParser2018.g:4307:8: ( label )?
		int alt705=2;
		int LA705_0 = input.LA(1);
		if ( (LA705_0==DIGIT_STR) ) {
			alt705=1;
		}
		switch (alt705) {
			case 1 :
				// MFortranParser2018.g:4307:9: label
				{
				pushFollow(FOLLOW_label_in_synpred50_MFortranParser201817891);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,DIMENSION,FOLLOW_DIMENSION_in_synpred50_MFortranParser201817895); if (state.failed) return;
		}

	}
	// $ANTLR end synpred50_MFortranParser2018

	// $ANTLR start synpred51_MFortranParser2018
	public final void synpred51_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4309:7: ( ( label )? EXTERNAL )
		// MFortranParser2018.g:4309:8: ( label )? EXTERNAL
		{
		// MFortranParser2018.g:4309:8: ( label )?
		int alt706=2;
		int LA706_0 = input.LA(1);
		if ( (LA706_0==DIGIT_STR) ) {
			alt706=1;
		}
		switch (alt706) {
			case 1 :
				// MFortranParser2018.g:4309:9: label
				{
				pushFollow(FOLLOW_label_in_synpred51_MFortranParser201817922);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,EXTERNAL,FOLLOW_EXTERNAL_in_synpred51_MFortranParser201817926); if (state.failed) return;
		}

	}
	// $ANTLR end synpred51_MFortranParser2018

	// $ANTLR start synpred52_MFortranParser2018
	public final void synpred52_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4311:7: ( ( label )? INTRINSIC )
		// MFortranParser2018.g:4311:8: ( label )? INTRINSIC
		{
		// MFortranParser2018.g:4311:8: ( label )?
		int alt707=2;
		int LA707_0 = input.LA(1);
		if ( (LA707_0==DIGIT_STR) ) {
			alt707=1;
		}
		switch (alt707) {
			case 1 :
				// MFortranParser2018.g:4311:9: label
				{
				pushFollow(FOLLOW_label_in_synpred52_MFortranParser201817953);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,INTRINSIC,FOLLOW_INTRINSIC_in_synpred52_MFortranParser201817957); if (state.failed) return;
		}

	}
	// $ANTLR end synpred52_MFortranParser2018

	// $ANTLR start synpred53_MFortranParser2018
	public final void synpred53_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4313:7: ( ( label )? POINTER )
		// MFortranParser2018.g:4313:8: ( label )? POINTER
		{
		// MFortranParser2018.g:4313:8: ( label )?
		int alt708=2;
		int LA708_0 = input.LA(1);
		if ( (LA708_0==DIGIT_STR) ) {
			alt708=1;
		}
		switch (alt708) {
			case 1 :
				// MFortranParser2018.g:4313:9: label
				{
				pushFollow(FOLLOW_label_in_synpred53_MFortranParser201817984);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,POINTER,FOLLOW_POINTER_in_synpred53_MFortranParser201817988); if (state.failed) return;
		}

	}
	// $ANTLR end synpred53_MFortranParser2018

	// $ANTLR start synpred54_MFortranParser2018
	public final void synpred54_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4315:7: ( ( label )? PROTECTED )
		// MFortranParser2018.g:4315:8: ( label )? PROTECTED
		{
		// MFortranParser2018.g:4315:8: ( label )?
		int alt709=2;
		int LA709_0 = input.LA(1);
		if ( (LA709_0==DIGIT_STR) ) {
			alt709=1;
		}
		switch (alt709) {
			case 1 :
				// MFortranParser2018.g:4315:9: label
				{
				pushFollow(FOLLOW_label_in_synpred54_MFortranParser201818016);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,PROTECTED,FOLLOW_PROTECTED_in_synpred54_MFortranParser201818020); if (state.failed) return;
		}

	}
	// $ANTLR end synpred54_MFortranParser2018

	// $ANTLR start synpred55_MFortranParser2018
	public final void synpred55_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4317:7: ( ( label )? SAVE )
		// MFortranParser2018.g:4317:8: ( label )? SAVE
		{
		// MFortranParser2018.g:4317:8: ( label )?
		int alt710=2;
		int LA710_0 = input.LA(1);
		if ( (LA710_0==DIGIT_STR) ) {
			alt710=1;
		}
		switch (alt710) {
			case 1 :
				// MFortranParser2018.g:4317:9: label
				{
				pushFollow(FOLLOW_label_in_synpred55_MFortranParser201818047);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,SAVE,FOLLOW_SAVE_in_synpred55_MFortranParser201818051); if (state.failed) return;
		}

	}
	// $ANTLR end synpred55_MFortranParser2018

	// $ANTLR start synpred56_MFortranParser2018
	public final void synpred56_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4319:7: ( ( label )? TARGET )
		// MFortranParser2018.g:4319:8: ( label )? TARGET
		{
		// MFortranParser2018.g:4319:8: ( label )?
		int alt711=2;
		int LA711_0 = input.LA(1);
		if ( (LA711_0==DIGIT_STR) ) {
			alt711=1;
		}
		switch (alt711) {
			case 1 :
				// MFortranParser2018.g:4319:9: label
				{
				pushFollow(FOLLOW_label_in_synpred56_MFortranParser201818079);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,TARGET,FOLLOW_TARGET_in_synpred56_MFortranParser201818083); if (state.failed) return;
		}

	}
	// $ANTLR end synpred56_MFortranParser2018

	// $ANTLR start synpred57_MFortranParser2018
	public final void synpred57_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:4321:7: ( ( label )? VOLATILE )
		// MFortranParser2018.g:4321:8: ( label )? VOLATILE
		{
		// MFortranParser2018.g:4321:8: ( label )?
		int alt712=2;
		int LA712_0 = input.LA(1);
		if ( (LA712_0==DIGIT_STR) ) {
			alt712=1;
		}
		switch (alt712) {
			case 1 :
				// MFortranParser2018.g:4321:9: label
				{
				pushFollow(FOLLOW_label_in_synpred57_MFortranParser201818111);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,VOLATILE,FOLLOW_VOLATILE_in_synpred57_MFortranParser201818115); if (state.failed) return;
		}

	}
	// $ANTLR end synpred57_MFortranParser2018

	// $ANTLR start synpred58_MFortranParser2018
	public final void synpred58_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5652:7: ( ( label )? READ LPAREN )
		// MFortranParser2018.g:5652:8: ( label )? READ LPAREN
		{
		// MFortranParser2018.g:5652:8: ( label )?
		int alt713=2;
		int LA713_0 = input.LA(1);
		if ( (LA713_0==DIGIT_STR) ) {
			alt713=1;
		}
		switch (alt713) {
			case 1 :
				// MFortranParser2018.g:5652:9: label
				{
				pushFollow(FOLLOW_label_in_synpred58_MFortranParser201823068);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,READ,FOLLOW_READ_in_synpred58_MFortranParser201823072); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred58_MFortranParser201823074); if (state.failed) return;
		}

	}
	// $ANTLR end synpred58_MFortranParser2018

	// $ANTLR start synpred59_MFortranParser2018
	public final void synpred59_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5659:7: ( ( label )? READ )
		// MFortranParser2018.g:5659:8: ( label )? READ
		{
		// MFortranParser2018.g:5659:8: ( label )?
		int alt714=2;
		int LA714_0 = input.LA(1);
		if ( (LA714_0==DIGIT_STR) ) {
			alt714=1;
		}
		switch (alt714) {
			case 1 :
				// MFortranParser2018.g:5659:9: label
				{
				pushFollow(FOLLOW_label_in_synpred59_MFortranParser201823168);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,READ,FOLLOW_READ_in_synpred59_MFortranParser201823172); if (state.failed) return;
		}

	}
	// $ANTLR end synpred59_MFortranParser2018

	// $ANTLR start synpred60_MFortranParser2018
	public final void synpred60_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5785:7: ( expr )
		// MFortranParser2018.g:5785:7: expr
		{
		pushFollow(FOLLOW_expr_in_synpred60_MFortranParser201823756);
		expr();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred60_MFortranParser2018

	// $ANTLR start synpred62_MFortranParser2018
	public final void synpred62_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5897:7: ( ( label )? BACKSPACE LPAREN )
		// MFortranParser2018.g:5897:8: ( label )? BACKSPACE LPAREN
		{
		// MFortranParser2018.g:5897:8: ( label )?
		int alt715=2;
		int LA715_0 = input.LA(1);
		if ( (LA715_0==DIGIT_STR) ) {
			alt715=1;
		}
		switch (alt715) {
			case 1 :
				// MFortranParser2018.g:5897:9: label
				{
				pushFollow(FOLLOW_label_in_synpred62_MFortranParser201824220);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,BACKSPACE,FOLLOW_BACKSPACE_in_synpred62_MFortranParser201824224); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred62_MFortranParser201824226); if (state.failed) return;
		}

	}
	// $ANTLR end synpred62_MFortranParser2018

	// $ANTLR start synpred63_MFortranParser2018
	public final void synpred63_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5903:7: ( ( label )? BACKSPACE )
		// MFortranParser2018.g:5903:8: ( label )? BACKSPACE
		{
		// MFortranParser2018.g:5903:8: ( label )?
		int alt716=2;
		int LA716_0 = input.LA(1);
		if ( (LA716_0==DIGIT_STR) ) {
			alt716=1;
		}
		switch (alt716) {
			case 1 :
				// MFortranParser2018.g:5903:9: label
				{
				pushFollow(FOLLOW_label_in_synpred63_MFortranParser201824302);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,BACKSPACE,FOLLOW_BACKSPACE_in_synpred63_MFortranParser201824306); if (state.failed) return;
		}

	}
	// $ANTLR end synpred63_MFortranParser2018

	// $ANTLR start synpred64_MFortranParser2018
	public final void synpred64_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5921:7: ( ( label )? END FILE LPAREN )
		// MFortranParser2018.g:5921:8: ( label )? END FILE LPAREN
		{
		// MFortranParser2018.g:5921:8: ( label )?
		int alt717=2;
		int LA717_0 = input.LA(1);
		if ( (LA717_0==DIGIT_STR) ) {
			alt717=1;
		}
		switch (alt717) {
			case 1 :
				// MFortranParser2018.g:5921:9: label
				{
				pushFollow(FOLLOW_label_in_synpred64_MFortranParser201824405);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,END,FOLLOW_END_in_synpred64_MFortranParser201824409); if (state.failed) return;
		match(input,FILE,FOLLOW_FILE_in_synpred64_MFortranParser201824411); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred64_MFortranParser201824413); if (state.failed) return;
		}

	}
	// $ANTLR end synpred64_MFortranParser2018

	// $ANTLR start synpred65_MFortranParser2018
	public final void synpred65_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5927:7: ( ( label )? END FILE )
		// MFortranParser2018.g:5927:8: ( label )? END FILE
		{
		// MFortranParser2018.g:5927:8: ( label )?
		int alt718=2;
		int LA718_0 = input.LA(1);
		if ( (LA718_0==DIGIT_STR) ) {
			alt718=1;
		}
		switch (alt718) {
			case 1 :
				// MFortranParser2018.g:5927:9: label
				{
				pushFollow(FOLLOW_label_in_synpred65_MFortranParser201824492);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,END,FOLLOW_END_in_synpred65_MFortranParser201824496); if (state.failed) return;
		match(input,FILE,FOLLOW_FILE_in_synpred65_MFortranParser201824498); if (state.failed) return;
		}

	}
	// $ANTLR end synpred65_MFortranParser2018

	// $ANTLR start synpred66_MFortranParser2018
	public final void synpred66_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5945:7: ( ( label )? REWIND LPAREN )
		// MFortranParser2018.g:5945:8: ( label )? REWIND LPAREN
		{
		// MFortranParser2018.g:5945:8: ( label )?
		int alt719=2;
		int LA719_0 = input.LA(1);
		if ( (LA719_0==DIGIT_STR) ) {
			alt719=1;
		}
		switch (alt719) {
			case 1 :
				// MFortranParser2018.g:5945:9: label
				{
				pushFollow(FOLLOW_label_in_synpred66_MFortranParser201824600);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,REWIND,FOLLOW_REWIND_in_synpred66_MFortranParser201824604); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred66_MFortranParser201824606); if (state.failed) return;
		}

	}
	// $ANTLR end synpred66_MFortranParser2018

	// $ANTLR start synpred67_MFortranParser2018
	public final void synpred67_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5951:7: ( ( label )? REWIND )
		// MFortranParser2018.g:5951:8: ( label )? REWIND
		{
		// MFortranParser2018.g:5951:8: ( label )?
		int alt720=2;
		int LA720_0 = input.LA(1);
		if ( (LA720_0==DIGIT_STR) ) {
			alt720=1;
		}
		switch (alt720) {
			case 1 :
				// MFortranParser2018.g:5951:9: label
				{
				pushFollow(FOLLOW_label_in_synpred67_MFortranParser201824684);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,REWIND,FOLLOW_REWIND_in_synpred67_MFortranParser201824688); if (state.failed) return;
		}

	}
	// $ANTLR end synpred67_MFortranParser2018

	// $ANTLR start synpred68_MFortranParser2018
	public final void synpred68_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5991:7: ( ( label )? FLUSH LPAREN )
		// MFortranParser2018.g:5991:8: ( label )? FLUSH LPAREN
		{
		// MFortranParser2018.g:5991:8: ( label )?
		int alt721=2;
		int LA721_0 = input.LA(1);
		if ( (LA721_0==DIGIT_STR) ) {
			alt721=1;
		}
		switch (alt721) {
			case 1 :
				// MFortranParser2018.g:5991:9: label
				{
				pushFollow(FOLLOW_label_in_synpred68_MFortranParser201824876);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,FLUSH,FOLLOW_FLUSH_in_synpred68_MFortranParser201824880); if (state.failed) return;
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred68_MFortranParser201824882); if (state.failed) return;
		}

	}
	// $ANTLR end synpred68_MFortranParser2018

	// $ANTLR start synpred69_MFortranParser2018
	public final void synpred69_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:5997:7: ( ( label )? FLUSH )
		// MFortranParser2018.g:5997:8: ( label )? FLUSH
		{
		// MFortranParser2018.g:5997:8: ( label )?
		int alt722=2;
		int LA722_0 = input.LA(1);
		if ( (LA722_0==DIGIT_STR) ) {
			alt722=1;
		}
		switch (alt722) {
			case 1 :
				// MFortranParser2018.g:5997:9: label
				{
				pushFollow(FOLLOW_label_in_synpred69_MFortranParser201824961);
				label();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		match(input,FLUSH,FOLLOW_FLUSH_in_synpred69_MFortranParser201824965); if (state.failed) return;
		}

	}
	// $ANTLR end synpred69_MFortranParser2018

	// $ANTLR start synpred70_MFortranParser2018
	public final void synpred70_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:6346:7: ( ( prefix )? function_subprogram )
		// MFortranParser2018.g:6346:7: ( prefix )? function_subprogram
		{
		// MFortranParser2018.g:6346:7: ( prefix )?
		int alt723=2;
		int LA723_0 = input.LA(1);
		if ( (LA723_0==CHARACTER||LA723_0==CLASS||LA723_0==COMPLEX||(LA723_0 >= DOUBLE && LA723_0 <= DOUBLEPRECISION)||LA723_0==ELEMENTAL||LA723_0==IMPURE||LA723_0==INTEGER||LA723_0==LOGICAL||LA723_0==MODULE||LA723_0==NON_RECURSIVE||LA723_0==PURE||(LA723_0 >= REAL && LA723_0 <= RECURSIVE)||LA723_0==TYPE) ) {
			alt723=1;
		}
		switch (alt723) {
			case 1 :
				// MFortranParser2018.g:6346:8: prefix
				{
				pushFollow(FOLLOW_prefix_in_synpred70_MFortranParser201826213);
				prefix();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		pushFollow(FOLLOW_function_subprogram_in_synpred70_MFortranParser201826219);
		function_subprogram();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred70_MFortranParser2018

	// $ANTLR start synpred71_MFortranParser2018
	public final void synpred71_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:6347:7: ( subroutine_subprogram )
		// MFortranParser2018.g:6347:7: subroutine_subprogram
		{
		pushFollow(FOLLOW_subroutine_subprogram_in_synpred71_MFortranParser201826227);
		subroutine_subprogram();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred71_MFortranParser2018

	// $ANTLR start synpred72_MFortranParser2018
	public final void synpred72_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:6637:7: ( ( prefix )? function_stmt specification_part end_function_stmt )
		// MFortranParser2018.g:6637:7: ( prefix )? function_stmt specification_part end_function_stmt
		{
		// MFortranParser2018.g:6637:7: ( prefix )?
		int alt724=2;
		int LA724_0 = input.LA(1);
		if ( (LA724_0==CHARACTER||LA724_0==CLASS||LA724_0==COMPLEX||(LA724_0 >= DOUBLE && LA724_0 <= DOUBLEPRECISION)||LA724_0==ELEMENTAL||LA724_0==IMPURE||LA724_0==INTEGER||LA724_0==LOGICAL||LA724_0==MODULE||LA724_0==NON_RECURSIVE||LA724_0==PURE||(LA724_0 >= REAL && LA724_0 <= RECURSIVE)||LA724_0==TYPE) ) {
			alt724=1;
		}
		switch (alt724) {
			case 1 :
				// MFortranParser2018.g:6637:8: prefix
				{
				pushFollow(FOLLOW_prefix_in_synpred72_MFortranParser201827505);
				prefix();
				state._fsp--;
				if (state.failed) return;
				}
				break;

		}

		pushFollow(FOLLOW_function_stmt_in_synpred72_MFortranParser201827518);
		function_stmt();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_specification_part_in_synpred72_MFortranParser201827520);
		specification_part();
		state._fsp--;
		if (state.failed) return;
		pushFollow(FOLLOW_end_function_stmt_in_synpred72_MFortranParser201827529);
		end_function_stmt();
		state._fsp--;
		if (state.failed) return;
		}

	}
	// $ANTLR end synpred72_MFortranParser2018

	// $ANTLR start synpred73_MFortranParser2018
	public final void synpred73_MFortranParser2018_fragment() throws RecognitionException {
		// MFortranParser2018.g:7312:7: ( EOF )
		// MFortranParser2018.g:7312:8: EOF
		{
		match(input,EOF,FOLLOW_EOF_in_synpred73_MFortranParser201830317); if (state.failed) return;
		}

	}
	// $ANTLR end synpred73_MFortranParser2018

	// Delegated rules

	public final boolean synpred68_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred68_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred70_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred70_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred16_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred16_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred14_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred14_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred41_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred41_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred43_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred43_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred45_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred45_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred72_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred72_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred39_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred39_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred37_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred37_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred35_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred35_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred9_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred9_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred7_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred7_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred58_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred58_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred5_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred5_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred53_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred53_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred51_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred51_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred55_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred55_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred56_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred56_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred26_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred26_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred27_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred27_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred28_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred28_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred29_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred29_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred25_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred25_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred24_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred24_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred62_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred62_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred63_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred63_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred10_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred10_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred60_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred60_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred65_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred65_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred64_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred64_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred66_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred66_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred67_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred67_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred69_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred69_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred42_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred42_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred44_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred44_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred38_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred38_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred73_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred73_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred71_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred71_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred21_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred21_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred36_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred36_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred23_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred23_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred6_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred6_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred59_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred59_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred8_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred8_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred4_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred4_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred57_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred57_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred1_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred1_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred54_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred54_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred50_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred50_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred52_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred52_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred2_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred2_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred30_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred30_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred3_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred3_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred32_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred32_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred33_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred33_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred31_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred31_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred34_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred34_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred47_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred47_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred48_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred48_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred49_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred49_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred46_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred46_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}
	public final boolean synpred40_MFortranParser2018() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred40_MFortranParser2018_fragment(); // can never throw exception
		} catch (RecognitionException re) {
			System.err.println("impossible: "+re);
		}
		boolean success = !state.failed;
		input.rewind(start);
		state.backtracking--;
		state.failed=false;
		return success;
	}


	protected DFA5 dfa5 = new DFA5(this);
	protected DFA184 dfa184 = new DFA184(this);
	protected DFA367 dfa367 = new DFA367(this);
	static final String DFA5_eotS =
		"\130\uffff";
	static final String DFA5_eofS =
		"\130\uffff";
	static final String DFA5_minS =
		"\1\4\1\0\1\uffff\3\0\122\uffff";
	static final String DFA5_maxS =
		"\1\u00e3\1\0\1\uffff\3\0\122\uffff";
	static final String DFA5_acceptS =
		"\2\uffff\1\1\3\uffff\1\5\116\uffff\1\2\1\3\1\4";
	static final String DFA5_specialS =
		"\1\0\1\1\1\uffff\1\2\1\3\1\4\122\uffff}>";
	static final String[] DFA5_transitionS = {
			"\1\6\2\uffff\2\6\2\uffff\1\6\1\uffff\3\6\1\uffff\1\6\1\uffff\1\6\2\uffff"+
			"\1\6\2\uffff\3\6\3\uffff\2\6\1\uffff\1\6\1\uffff\1\6\1\uffff\4\6\3\uffff"+
			"\1\1\5\6\6\uffff\1\6\1\5\1\6\4\uffff\1\6\7\uffff\1\6\1\uffff\1\6\5\uffff"+
			"\1\6\2\uffff\1\4\5\uffff\2\6\4\uffff\2\6\2\uffff\1\2\5\uffff\5\6\13\uffff"+
			"\1\6\10\uffff\2\6\4\uffff\3\6\1\uffff\1\6\1\uffff\1\6\1\uffff\3\6\11"+
			"\uffff\1\6\2\uffff\1\6\1\uffff\1\6\2\uffff\1\3\6\uffff\1\6\2\uffff\1"+
			"\6\2\uffff\3\6\1\uffff\2\6\4\uffff\2\6\2\uffff\2\6\1\uffff\4\6\7\uffff"+
			"\2\6\2\uffff\1\6\2\uffff\1\6\4\uffff\1\6\4\uffff\3\6\2\uffff\1\6",
			"\1\uffff",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS);
	static final short[] DFA5_eof = DFA.unpackEncodedString(DFA5_eofS);
	static final char[] DFA5_min = DFA.unpackEncodedStringToUnsignedChars(DFA5_minS);
	static final char[] DFA5_max = DFA.unpackEncodedStringToUnsignedChars(DFA5_maxS);
	static final short[] DFA5_accept = DFA.unpackEncodedString(DFA5_acceptS);
	static final short[] DFA5_special = DFA.unpackEncodedString(DFA5_specialS);
	static final short[][] DFA5_transition;

	static {
		int numStates = DFA5_transitionS.length;
		DFA5_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA5_transition[i] = DFA.unpackEncodedString(DFA5_transitionS[i]);
		}
	}

	protected class DFA5 extends DFA {

		public DFA5(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 5;
			this.eot = DFA5_eot;
			this.eof = DFA5_eof;
			this.min = DFA5_min;
			this.max = DFA5_max;
			this.accept = DFA5_accept;
			this.special = DFA5_special;
			this.transition = DFA5_transition;
		}
		@Override
		public String getDescription() {
			return "93:1: implicit_part_recursion : ( ( ( label )? IMPLICIT )=> implicit_stmt implicit_part_recursion | ( ( label )? PARAMETER )=> parameter_stmt implicit_part_recursion | ( ( label )? FORMAT )=> format_stmt implicit_part_recursion | ( ( label )? ENTRY )=> entry_stmt implicit_part_recursion |);";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA5_0 = input.LA(1);
						 
						int index5_0 = input.index();
						input.rewind();
						s = -1;
						if ( (LA5_0==DIGIT_STR) ) {s = 1;}
						else if ( (LA5_0==IMPLICIT) && (synpred1_MFortranParser2018())) {s = 2;}
						else if ( (LA5_0==PARAMETER) ) {s = 3;}
						else if ( (LA5_0==FORMAT) ) {s = 4;}
						else if ( (LA5_0==ENTRY) ) {s = 5;}
						else if ( (LA5_0==ABSTRACT||(LA5_0 >= ALLOCATABLE && LA5_0 <= ALLOCATE)||LA5_0==ASSOCIATE||(LA5_0 >= ASYNCHRONOUS && LA5_0 <= BIND)||LA5_0==BLOCK||LA5_0==CALL||LA5_0==CHARACTER||(LA5_0 >= CLASS && LA5_0 <= CODIMENSION)||(LA5_0 >= COMMON && LA5_0 <= COMPLEX)||LA5_0==CONTAINS||LA5_0==CONTINUE||(LA5_0 >= CRITICAL && LA5_0 <= DEALLOCATE)||(LA5_0 >= DIMENSION && LA5_0 <= DOUBLEPRECISION)||LA5_0==END||LA5_0==ENUM||LA5_0==EQUIVALENCE||LA5_0==EXIT||LA5_0==EXTERNAL||LA5_0==FLUSH||(LA5_0 >= GO && LA5_0 <= GOTO)||(LA5_0 >= IDENT && LA5_0 <= IF)||(LA5_0 >= INQUIRE && LA5_0 <= INTRINSIC)||LA5_0==LOGICAL||(LA5_0 >= M_ALLOCATE_STMT_1 && LA5_0 <= M_ASSIGNMENT_STMT)||(LA5_0 >= M_FORALL_CONSTRUCT_STMT && LA5_0 <= M_IF_STMT)||LA5_0==M_INQUIRE_STMT_2||LA5_0==M_PTR_ASSIGNMENT_STMT||(LA5_0 >= M_WHERE_CONSTRUCT_STMT && LA5_0 <= NAMELIST)||LA5_0==NULLIFY||LA5_0==OPEN||LA5_0==OPTIONAL||LA5_0==POINTER||LA5_0==PRAGMA||(LA5_0 >= PRINT && LA5_0 <= PROCEDURE)||(LA5_0 >= PROTECTED && LA5_0 <= PUBLIC)||(LA5_0 >= READ && LA5_0 <= REAL)||(LA5_0 >= RETURN && LA5_0 <= REWIND)||(LA5_0 >= SAVE && LA5_0 <= SELECTTYPE)||(LA5_0 >= STMT_FUNCTION && LA5_0 <= STOP)||LA5_0==SYNC||LA5_0==TARGET||LA5_0==TYPE||(LA5_0 >= VALUE && LA5_0 <= WAIT)||LA5_0==WRITE) ) {s = 6;}
						 
						input.seek(index5_0);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA5_1 = input.LA(1);
						 
						int index5_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred1_MFortranParser2018()) ) {s = 2;}
						else if ( (synpred2_MFortranParser2018()) ) {s = 85;}
						else if ( (synpred3_MFortranParser2018()) ) {s = 86;}
						else if ( (synpred4_MFortranParser2018()) ) {s = 87;}
						else if ( (true) ) {s = 6;}
						 
						input.seek(index5_1);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA5_3 = input.LA(1);
						 
						int index5_3 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred2_MFortranParser2018()) ) {s = 85;}
						else if ( (true) ) {s = 6;}
						 
						input.seek(index5_3);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA5_4 = input.LA(1);
						 
						int index5_4 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred3_MFortranParser2018()) ) {s = 86;}
						else if ( (true) ) {s = 6;}
						 
						input.seek(index5_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA5_5 = input.LA(1);
						 
						int index5_5 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred4_MFortranParser2018()) ) {s = 87;}
						else if ( (true) ) {s = 6;}
						 
						input.seek(index5_5);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 5, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA184_eotS =
		"\74\uffff";
	static final String DFA184_eofS =
		"\1\uffff\1\17\1\25\1\31\12\uffff\1\31\55\uffff";
	static final String DFA184_minS =
		"\1\20\1\27\2\36\2\55\7\uffff\1\14\1\36\5\uffff\1\27\13\uffff\20\0\1\uffff"+
		"\1\0\6\uffff\1\0\3\uffff";
	static final String DFA184_maxS =
		"\1\u00d8\1\u00c8\1\u00da\1\u00c8\2\u008f\7\uffff\1\u00d8\1\u00c8\5\uffff"+
		"\1\137\13\uffff\20\0\1\uffff\1\0\6\uffff\1\0\3\uffff";
	static final String DFA184_acceptS =
		"\6\uffff\1\3\1\4\1\5\1\uffff\1\7\4\uffff\1\1\5\uffff\1\2\3\uffff\1\6\41"+
		"\uffff\1\10";
	static final String DFA184_specialS =
		"\40\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15"+
		"\1\16\1\17\1\uffff\1\20\6\uffff\1\21\3\uffff}>";
	static final String[] DFA184_transitionS = {
			"\1\12\6\uffff\1\3\25\uffff\1\2\37\uffff\1\10\20\uffff\1\12\1\1\32\uffff"+
			"\1\7\3\uffff\1\5\20\uffff\1\6\15\uffff\1\12\14\uffff\1\4\55\uffff\1\10",
			"\1\16\6\uffff\1\17\121\uffff\1\17\11\uffff\1\15\54\uffff\1\17\40\uffff"+
			"\1\17",
			"\1\25\u00a9\uffff\1\25\21\uffff\1\24",
			"\1\31\133\uffff\1\17\115\uffff\1\31",
			"\1\25\141\uffff\1\6",
			"\1\25\141\uffff\1\6",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\61\3\uffff\1\53\6\uffff\1\46\4\uffff\1\57\2\17\15\uffff\1\43\1\45"+
			"\37\uffff\1\52\20\uffff\1\55\1\44\20\uffff\1\56\11\uffff\1\50\3\uffff"+
			"\1\42\20\uffff\1\47\12\uffff\1\40\2\uffff\1\54\14\uffff\1\41\26\uffff"+
			"\1\17\26\uffff\1\51",
			"\1\31\133\uffff\1\17\115\uffff\1\31",
			"",
			"",
			"",
			"",
			"",
			"\1\70\25\uffff\1\25\61\uffff\1\25",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"\1\uffff",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			""
	};

	static final short[] DFA184_eot = DFA.unpackEncodedString(DFA184_eotS);
	static final short[] DFA184_eof = DFA.unpackEncodedString(DFA184_eofS);
	static final char[] DFA184_min = DFA.unpackEncodedStringToUnsignedChars(DFA184_minS);
	static final char[] DFA184_max = DFA.unpackEncodedStringToUnsignedChars(DFA184_maxS);
	static final short[] DFA184_accept = DFA.unpackEncodedString(DFA184_acceptS);
	static final short[] DFA184_special = DFA.unpackEncodedString(DFA184_specialS);
	static final short[][] DFA184_transition;

	static {
		int numStates = DFA184_transitionS.length;
		DFA184_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA184_transition[i] = DFA.unpackEncodedString(DFA184_transitionS[i]);
		}
	}

	protected class DFA184 extends DFA {

		public DFA184(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 184;
			this.eot = DFA184_eot;
			this.eof = DFA184_eof;
			this.min = DFA184_min;
			this.max = DFA184_max;
			this.accept = DFA184_accept;
			this.special = DFA184_special;
			this.transition = DFA184_transition;
		}
		@Override
		public String getDescription() {
			return "2148:1: data_stmt_constant options {backtrack=true; k=3; } : ( designator | signed_int_literal_constant | signed_real_literal_constant | complex_literal_constant | logical_literal_constant | char_literal_constant | boz_literal_constant | structure_constructor );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA184_32 = input.LA(1);
						 
						int index184_32 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_32);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA184_33 = input.LA(1);
						 
						int index184_33 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_33);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA184_34 = input.LA(1);
						 
						int index184_34 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_34);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA184_35 = input.LA(1);
						 
						int index184_35 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_35);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA184_36 = input.LA(1);
						 
						int index184_36 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_36);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA184_37 = input.LA(1);
						 
						int index184_37 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_37);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA184_38 = input.LA(1);
						 
						int index184_38 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_38);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA184_39 = input.LA(1);
						 
						int index184_39 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_39);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA184_40 = input.LA(1);
						 
						int index184_40 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_40);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA184_41 = input.LA(1);
						 
						int index184_41 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_41);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA184_42 = input.LA(1);
						 
						int index184_42 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_42);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA184_43 = input.LA(1);
						 
						int index184_43 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_43);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA184_44 = input.LA(1);
						 
						int index184_44 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_44);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA184_45 = input.LA(1);
						 
						int index184_45 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_45);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA184_46 = input.LA(1);
						 
						int index184_46 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_46);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA184_47 = input.LA(1);
						 
						int index184_47 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_47);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA184_49 = input.LA(1);
						 
						int index184_49 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (true) ) {s = 59;}
						 
						input.seek(index184_49);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA184_56 = input.LA(1);
						 
						int index184_56 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred16_MFortranParser2018()) ) {s = 15;}
						else if ( (synpred21_MFortranParser2018()) ) {s = 25;}
						 
						input.seek(index184_56);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 184, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA367_eotS =
		"\120\uffff";
	static final String DFA367_eofS =
		"\120\uffff";
	static final String DFA367_minS =
		"\1\4\2\0\1\uffff\1\0\4\uffff\1\0\17\uffff\1\0\66\uffff";
	static final String DFA367_maxS =
		"\1\u00e3\2\0\1\uffff\1\0\4\uffff\1\0\17\uffff\1\0\66\uffff";
	static final String DFA367_acceptS =
		"\3\uffff\1\2\1\uffff\2\4\1\5\1\6\1\uffff\11\10\2\11\1\12\1\13\1\14\1\15"+
		"\1\uffff\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\51\uffff\1\1\1\3"+
		"\1\7\1\16";
	static final String DFA367_specialS =
		"\1\0\1\1\1\2\1\uffff\1\3\4\uffff\1\4\17\uffff\1\5\66\uffff}>";
	static final String[] DFA367_transitionS = {
			"\1\6\2\uffff\1\25\1\42\2\uffff\1\42\1\uffff\1\26\1\42\1\27\1\uffff\1"+
			"\42\1\uffff\1\42\2\uffff\1\20\2\uffff\1\22\1\42\1\30\4\uffff\1\16\3\uffff"+
			"\1\42\1\uffff\2\42\1\31\1\42\3\uffff\1\1\1\32\1\42\1\14\1\17\1\15\6\uffff"+
			"\1\42\1\2\1\3\14\uffff\1\42\1\uffff\1\33\5\uffff\1\42\2\uffff\1\4\5\uffff"+
			"\2\42\4\uffff\2\42\10\uffff\1\42\1\12\1\uffff\1\5\1\34\13\uffff\1\21"+
			"\10\uffff\2\42\4\uffff\3\42\1\uffff\1\42\1\uffff\1\42\1\uffff\2\42\12"+
			"\uffff\1\42\2\uffff\1\42\4\uffff\1\7\6\uffff\1\35\2\uffff\1\42\2\uffff"+
			"\1\42\1\24\1\10\1\uffff\1\36\1\23\4\uffff\1\42\1\13\2\uffff\2\42\1\uffff"+
			"\1\37\3\42\10\uffff\1\42\2\uffff\1\42\2\uffff\1\40\4\uffff\1\11\5\uffff"+
			"\1\41\1\42\2\uffff\1\42",
			"\1\uffff",
			"\1\uffff",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA367_eot = DFA.unpackEncodedString(DFA367_eotS);
	static final short[] DFA367_eof = DFA.unpackEncodedString(DFA367_eofS);
	static final char[] DFA367_min = DFA.unpackEncodedStringToUnsignedChars(DFA367_minS);
	static final char[] DFA367_max = DFA.unpackEncodedStringToUnsignedChars(DFA367_maxS);
	static final short[] DFA367_accept = DFA.unpackEncodedString(DFA367_acceptS);
	static final short[] DFA367_special = DFA.unpackEncodedString(DFA367_specialS);
	static final short[][] DFA367_transition;

	static {
		int numStates = DFA367_transitionS.length;
		DFA367_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA367_transition[i] = DFA.unpackEncodedString(DFA367_transitionS[i]);
		}
	}

	protected class DFA367 extends DFA {

		public DFA367(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 367;
			this.eot = DFA367_eot;
			this.eof = DFA367_eof;
			this.min = DFA367_min;
			this.max = DFA367_max;
			this.accept = DFA367_accept;
			this.special = DFA367_special;
			this.transition = DFA367_transition;
		}
		@Override
		public String getDescription() {
			return "4275:1: declaration_construct_and_block : ( ( ( label )? ENTRY )=> entry_stmt declaration_construct_and_block | ( ( label )? ENUM )=> enum_def declaration_construct_and_block | ( ( label )? FORMAT )=> format_stmt declaration_construct_and_block | ( ( label )? INTERFACE )=> interface_block declaration_construct_and_block | ( ( label )? PARAMETER )=> parameter_stmt declaration_construct_and_block | ( ( label )? PROCEDURE )=> procedure_declaration_stmt declaration_construct_and_block | ( derived_type_stmt )=> derived_type_def declaration_construct_and_block | ( type_declaration_stmt )=> type_declaration_stmt declaration_construct_and_block | ( ( label )? access_spec )=> access_stmt declaration_construct_and_block | ( ( label )? ALLOCATABLE )=> allocatable_stmt declaration_construct_and_block | ( ( label )? ASYNCHRONOUS )=> asynchronous_stmt declaration_construct_and_block | ( ( label )? BIND )=> bind_stmt declaration_construct_and_block | ( ( label )? CODIMENSION )=> codimension_stmt declaration_construct_and_block | ( ( label )? DATA )=> data_stmt declaration_construct_and_block | ( ( label )? DIMENSION )=> dimension_stmt declaration_construct_and_block | ( ( label )? EXTERNAL )=> external_stmt declaration_construct_and_block | ( ( label )? INTRINSIC )=> intrinsic_stmt declaration_construct_and_block | ( ( label )? POINTER )=> pointer_stmt declaration_construct_and_block | ( ( label )? PROTECTED )=> protected_stmt declaration_construct_and_block | ( ( label )? SAVE )=> save_stmt declaration_construct_and_block | ( ( label )? TARGET )=> target_stmt declaration_construct_and_block | ( ( label )? VOLATILE )=> volatile_stmt declaration_construct_and_block | block );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA367_0 = input.LA(1);
						 
						int index367_0 = input.index();
						input.rewind();
						s = -1;
						if ( (LA367_0==DIGIT_STR) ) {s = 1;}
						else if ( (LA367_0==ENTRY) ) {s = 2;}
						else if ( (LA367_0==ENUM) && (synpred37_MFortranParser2018())) {s = 3;}
						else if ( (LA367_0==FORMAT) ) {s = 4;}
						else if ( (LA367_0==INTERFACE) && (synpred39_MFortranParser2018())) {s = 5;}
						else if ( (LA367_0==ABSTRACT) && (synpred39_MFortranParser2018())) {s = 6;}
						else if ( (LA367_0==PARAMETER) && (synpred40_MFortranParser2018())) {s = 7;}
						else if ( (LA367_0==PROCEDURE) && (synpred41_MFortranParser2018())) {s = 8;}
						else if ( (LA367_0==TYPE) ) {s = 9;}
						else if ( (LA367_0==INTEGER) && (synpred43_MFortranParser2018())) {s = 10;}
						else if ( (LA367_0==REAL) && (synpred43_MFortranParser2018())) {s = 11;}
						else if ( (LA367_0==DOUBLE) && (synpred43_MFortranParser2018())) {s = 12;}
						else if ( (LA367_0==DOUBLEPRECISION) && (synpred43_MFortranParser2018())) {s = 13;}
						else if ( (LA367_0==COMPLEX) && (synpred43_MFortranParser2018())) {s = 14;}
						else if ( (LA367_0==DOUBLECOMPLEX) && (synpred43_MFortranParser2018())) {s = 15;}
						else if ( (LA367_0==CHARACTER) && (synpred43_MFortranParser2018())) {s = 16;}
						else if ( (LA367_0==LOGICAL) && (synpred43_MFortranParser2018())) {s = 17;}
						else if ( (LA367_0==CLASS) && (synpred43_MFortranParser2018())) {s = 18;}
						else if ( (LA367_0==PUBLIC) && (synpred44_MFortranParser2018())) {s = 19;}
						else if ( (LA367_0==PRIVATE) && (synpred44_MFortranParser2018())) {s = 20;}
						else if ( (LA367_0==ALLOCATABLE) && (synpred45_MFortranParser2018())) {s = 21;}
						else if ( (LA367_0==ASYNCHRONOUS) && (synpred46_MFortranParser2018())) {s = 22;}
						else if ( (LA367_0==BIND) && (synpred47_MFortranParser2018())) {s = 23;}
						else if ( (LA367_0==CODIMENSION) && (synpred48_MFortranParser2018())) {s = 24;}
						else if ( (LA367_0==DATA) ) {s = 25;}
						else if ( (LA367_0==DIMENSION) && (synpred50_MFortranParser2018())) {s = 26;}
						else if ( (LA367_0==EXTERNAL) && (synpred51_MFortranParser2018())) {s = 27;}
						else if ( (LA367_0==INTRINSIC) && (synpred52_MFortranParser2018())) {s = 28;}
						else if ( (LA367_0==POINTER) && (synpred53_MFortranParser2018())) {s = 29;}
						else if ( (LA367_0==PROTECTED) && (synpred54_MFortranParser2018())) {s = 30;}
						else if ( (LA367_0==SAVE) && (synpred55_MFortranParser2018())) {s = 31;}
						else if ( (LA367_0==TARGET) && (synpred56_MFortranParser2018())) {s = 32;}
						else if ( (LA367_0==VOLATILE) && (synpred57_MFortranParser2018())) {s = 33;}
						else if ( (LA367_0==ALLOCATE||LA367_0==ASSOCIATE||LA367_0==BACKSPACE||LA367_0==BLOCK||LA367_0==CALL||LA367_0==CLOSE||LA367_0==CONTINUE||(LA367_0 >= CRITICAL && LA367_0 <= CYCLE)||LA367_0==DEALLOCATE||LA367_0==DO||LA367_0==END||LA367_0==EXIT||LA367_0==FLUSH||(LA367_0 >= GO && LA367_0 <= GOTO)||(LA367_0 >= IDENT && LA367_0 <= IF)||LA367_0==INQUIRE||(LA367_0 >= M_ALLOCATE_STMT_1 && LA367_0 <= M_ASSIGNMENT_STMT)||(LA367_0 >= M_FORALL_CONSTRUCT_STMT && LA367_0 <= M_IF_STMT)||LA367_0==M_INQUIRE_STMT_2||LA367_0==M_PTR_ASSIGNMENT_STMT||(LA367_0 >= M_WHERE_CONSTRUCT_STMT && LA367_0 <= M_WHERE_STMT)||LA367_0==NULLIFY||LA367_0==OPEN||LA367_0==PRAGMA||LA367_0==PRINT||LA367_0==READ||(LA367_0 >= RETURN && LA367_0 <= REWIND)||(LA367_0 >= SELECT && LA367_0 <= SELECTTYPE)||LA367_0==STOP||LA367_0==SYNC||LA367_0==WAIT||LA367_0==WRITE) ) {s = 34;}
						 
						input.seek(index367_0);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA367_1 = input.LA(1);
						 
						int index367_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred36_MFortranParser2018()) ) {s = 76;}
						else if ( (synpred37_MFortranParser2018()) ) {s = 3;}
						else if ( (synpred38_MFortranParser2018()) ) {s = 77;}
						else if ( (synpred39_MFortranParser2018()) ) {s = 6;}
						else if ( (synpred40_MFortranParser2018()) ) {s = 7;}
						else if ( (synpred41_MFortranParser2018()) ) {s = 8;}
						else if ( (synpred42_MFortranParser2018()) ) {s = 78;}
						else if ( (synpred43_MFortranParser2018()) ) {s = 18;}
						else if ( (synpred44_MFortranParser2018()) ) {s = 20;}
						else if ( (synpred45_MFortranParser2018()) ) {s = 21;}
						else if ( (synpred46_MFortranParser2018()) ) {s = 22;}
						else if ( (synpred47_MFortranParser2018()) ) {s = 23;}
						else if ( (synpred48_MFortranParser2018()) ) {s = 24;}
						else if ( (synpred49_MFortranParser2018()) ) {s = 79;}
						else if ( (synpred50_MFortranParser2018()) ) {s = 26;}
						else if ( (synpred51_MFortranParser2018()) ) {s = 27;}
						else if ( (synpred52_MFortranParser2018()) ) {s = 28;}
						else if ( (synpred53_MFortranParser2018()) ) {s = 29;}
						else if ( (synpred54_MFortranParser2018()) ) {s = 30;}
						else if ( (synpred55_MFortranParser2018()) ) {s = 31;}
						else if ( (synpred56_MFortranParser2018()) ) {s = 32;}
						else if ( (synpred57_MFortranParser2018()) ) {s = 33;}
						else if ( (true) ) {s = 34;}
						 
						input.seek(index367_1);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA367_2 = input.LA(1);
						 
						int index367_2 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred36_MFortranParser2018()) ) {s = 76;}
						else if ( (true) ) {s = 34;}
						 
						input.seek(index367_2);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA367_4 = input.LA(1);
						 
						int index367_4 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred38_MFortranParser2018()) ) {s = 77;}
						else if ( (true) ) {s = 34;}
						 
						input.seek(index367_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA367_9 = input.LA(1);
						 
						int index367_9 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred42_MFortranParser2018()) ) {s = 78;}
						else if ( (synpred43_MFortranParser2018()) ) {s = 18;}
						 
						input.seek(index367_9);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA367_25 = input.LA(1);
						 
						int index367_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred49_MFortranParser2018()) ) {s = 79;}
						else if ( (true) ) {s = 34;}
						 
						input.seek(index367_25);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 367, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	public static final BitSet FOLLOW_prefix_in_ext_function_subprogram83 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_subprogram_in_ext_function_subprogram97 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_use_stmt_in_specification_part126 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_import_stmt_in_specification_part142 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000C2102004L});
	public static final BitSet FOLLOW_implicit_part_recursion_in_specification_part155 = new BitSet(new long[]{0x0C0761018A40A092L,0x02003C0000080401L,0x106C481200040000L,0x00000000C2102004L});
	public static final BitSet FOLLOW_declaration_construct_in_specification_part165 = new BitSet(new long[]{0x0C0761018A40A092L,0x02003C0000080401L,0x106C481200040000L,0x00000000C2102004L});
	public static final BitSet FOLLOW_implicit_stmt_in_implicit_part_recursion212 = new BitSet(new long[]{0x0400200000000000L,0x0000000800080000L,0x0000001000000000L});
	public static final BitSet FOLLOW_implicit_part_recursion_in_implicit_part_recursion217 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameter_stmt_in_implicit_part_recursion247 = new BitSet(new long[]{0x0400200000000000L,0x0000000800080000L,0x0000001000000000L});
	public static final BitSet FOLLOW_implicit_part_recursion_in_implicit_part_recursion251 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_format_stmt_in_implicit_part_recursion284 = new BitSet(new long[]{0x0400200000000000L,0x0000000800080000L,0x0000001000000000L});
	public static final BitSet FOLLOW_implicit_part_recursion_in_implicit_part_recursion291 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_entry_stmt_in_implicit_part_recursion325 = new BitSet(new long[]{0x0400200000000000L,0x0000000800080000L,0x0000001000000000L});
	public static final BitSet FOLLOW_implicit_part_recursion_in_implicit_part_recursion333 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_stmt_in_declaration_construct363 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocatable_stmt_in_declaration_construct371 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_asynchronous_stmt_in_declaration_construct379 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_stmt_in_declaration_construct387 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_codimension_stmt_in_declaration_construct395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_common_stmt_in_declaration_construct403 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_in_declaration_construct411 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derived_type_def_in_declaration_construct419 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dimension_stmt_in_declaration_construct427 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_entry_stmt_in_declaration_construct435 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enum_def_in_declaration_construct443 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equivalence_stmt_in_declaration_construct451 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_external_stmt_in_declaration_construct459 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_format_stmt_in_declaration_construct467 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intent_stmt_in_declaration_construct475 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interface_block_in_declaration_construct483 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intrinsic_stmt_in_declaration_construct491 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_namelist_stmt_in_declaration_construct499 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_optional_stmt_in_declaration_construct507 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameter_stmt_in_declaration_construct515 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_stmt_in_declaration_construct523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_procedure_declaration_stmt_in_declaration_construct531 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_protected_stmt_in_declaration_construct539 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_save_stmt_in_declaration_construct547 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_target_stmt_in_declaration_construct555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_declaration_stmt_in_declaration_construct563 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_volatile_stmt_in_declaration_construct571 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_value_stmt_in_declaration_construct579 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_stmt_function_stmt_in_declaration_construct587 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_type_qualifier_stmt_in_declaration_construct595 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_executable_construct_in_execution_part622 = new BitSet(new long[]{0x0600A3D0040A4902L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_execution_part_construct_in_execution_part632 = new BitSet(new long[]{0x0600A3D0040A4902L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_executable_construct_in_execution_part_construct661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_in_execution_part_construct669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_entry_stmt_in_execution_part_construct677 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_format_stmt_in_execution_part_construct685 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contains_stmt_in_internal_subprogram_part712 = new BitSet(new long[]{0x0027200102400002L,0x0200042000400000L,0x3080000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_internal_subprogram_in_internal_subprogram_part722 = new BitSet(new long[]{0x0027200102400002L,0x0200042000400000L,0x3080000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_prefix_in_internal_subprogram763 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_subprogram_in_internal_subprogram768 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subroutine_subprogram_in_internal_subprogram776 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_action_stmt_in_executable_construct800 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_associate_construct_in_executable_construct808 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_block_construct_in_executable_construct816 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_case_construct_in_executable_construct824 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_critical_construct_in_executable_construct832 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_do_construct_in_executable_construct840 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_construct_in_executable_construct848 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_if_construct_in_executable_construct856 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_type_construct_in_executable_construct864 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_construct_in_executable_construct872 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_stmt_in_executable_construct880 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_stmt_in_action_stmt903 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignment_stmt_in_action_stmt911 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_backspace_stmt_in_action_stmt919 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_call_stmt_in_action_stmt927 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_close_stmt_in_action_stmt935 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_computed_goto_stmt_in_action_stmt943 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_continue_stmt_in_action_stmt951 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_cycle_stmt_in_action_stmt959 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_deallocate_stmt_in_action_stmt967 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_endfile_stmt_in_action_stmt975 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_exit_stmt_in_action_stmt983 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_flush_stmt_in_action_stmt991 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_stmt_in_action_stmt999 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_goto_stmt_in_action_stmt1007 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_if_stmt_in_action_stmt1015 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inquire_stmt_in_action_stmt1023 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_nullify_stmt_in_action_stmt1031 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_open_stmt_in_action_stmt1039 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_assignment_stmt_in_action_stmt1047 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_print_stmt_in_action_stmt1055 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_read_stmt_in_action_stmt1063 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_return_stmt_in_action_stmt1071 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rewind_stmt_in_action_stmt1079 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_stop_stmt_in_action_stmt1087 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sync_all_stmt_in_action_stmt1095 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sync_images_stmt_in_action_stmt1103 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sync_memory_stmt_in_action_stmt1111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_wait_stmt_in_action_stmt1119 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_stmt_in_action_stmt1127 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_write_stmt_in_action_stmt1135 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_name_in_keyword1176 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_name1208 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_constant_in_constant1233 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_constant1243 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_constant_in_literal_constant1267 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_real_literal_constant_in_literal_constant1275 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_complex_literal_constant_in_literal_constant1283 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logical_literal_constant_in_literal_constant1291 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_literal_constant1299 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boz_literal_constant_in_literal_constant1307 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_constant_in_int_constant1332 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_int_constant1342 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_power_op_in_intrinsic_operator1369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_mult_op_in_intrinsic_operator1380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_add_op_in_intrinsic_operator1392 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_concat_op_in_intrinsic_operator1405 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rel_op_in_intrinsic_operator1415 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_not_op_in_intrinsic_operator1428 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_and_op_in_intrinsic_operator1441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_or_op_in_intrinsic_operator1454 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equiv_op_in_intrinsic_operator1468 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFINED_OP_in_defined_operator1490 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_extended_intrinsic_op_in_defined_operator1508 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intrinsic_operator_in_extended_intrinsic_op1546 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_label1571 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_label_list1601 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_label_list1614 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_in_label_list1618 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_char_constant1662 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_char_constant1672 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_type_param_value1693 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_type_param_value1712 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_type_param_value1731 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intrinsic_type_spec_in_type_spec1766 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derived_type_spec_in_type_spec1774 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intrinsic_type_spec_in_declaration_type_spec1793 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPE_in_declaration_type_spec1811 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_declaration_type_spec1814 = new BitSet(new long[]{0x0007000100400000L,0x0200040000000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_intrinsic_type_spec_in_declaration_type_spec1816 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_declaration_type_spec1818 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPE_in_declaration_type_spec1836 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_declaration_type_spec1839 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_derived_type_spec_in_declaration_type_spec1841 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_declaration_type_spec1843 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPE_in_declaration_type_spec1861 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_declaration_type_spec1864 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_declaration_type_spec1866 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_declaration_type_spec1868 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_in_declaration_type_spec1886 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_declaration_type_spec1888 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_derived_type_spec_in_declaration_type_spec1890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_declaration_type_spec1892 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_in_declaration_type_spec1910 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_declaration_type_spec1912 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_declaration_type_spec1914 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_declaration_type_spec1916 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_in_intrinsic_type_spec1949 = new BitSet(new long[]{0x0000000000001002L,0x0400000000000000L});
	public static final BitSet FOLLOW_kind_selector_in_intrinsic_type_spec1952 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REAL_in_intrinsic_type_spec1974 = new BitSet(new long[]{0x0000000000001002L,0x0400000000000000L});
	public static final BitSet FOLLOW_kind_selector_in_intrinsic_type_spec1977 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_intrinsic_type_spec1999 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000800000000000L});
	public static final BitSet FOLLOW_PRECISION_in_intrinsic_type_spec2001 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLEPRECISION_in_intrinsic_type_spec2019 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMPLEX_in_intrinsic_type_spec2037 = new BitSet(new long[]{0x0000000000001002L,0x0400000000000000L});
	public static final BitSet FOLLOW_kind_selector_in_intrinsic_type_spec2040 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_intrinsic_type_spec2062 = new BitSet(new long[]{0x0000000100000000L});
	public static final BitSet FOLLOW_COMPLEX_in_intrinsic_type_spec2064 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLECOMPLEX_in_intrinsic_type_spec2082 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHARACTER_in_intrinsic_type_spec2100 = new BitSet(new long[]{0x0000000000001002L,0x0400000000000000L});
	public static final BitSet FOLLOW_char_selector_in_intrinsic_type_spec2103 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LOGICAL_in_intrinsic_type_spec2125 = new BitSet(new long[]{0x0000000000001002L,0x0400000000000000L});
	public static final BitSet FOLLOW_kind_selector_in_intrinsic_type_spec2128 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_kind_selector2169 = new BitSet(new long[]{0x0000300000810000L,0x44018000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_KIND_in_kind_selector2174 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_kind_selector2178 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_kind_selector2182 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_kind_selector2184 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_kind_selector2204 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_DIGIT_STR_in_kind_selector2208 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_signed_int_literal_constant2235 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_MINUS_in_signed_int_literal_constant2241 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_int_literal_constant_in_signed_int_literal_constant2251 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_int_literal_constant2270 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_UNDERSCORE_in_int_literal_constant2273 = new BitSet(new long[]{0x0000200000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_kind_param_in_int_literal_constant2277 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_kind_param2316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_kind_param2326 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_signed_real_literal_constant2358 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
	public static final BitSet FOLLOW_MINUS_in_signed_real_literal_constant2364 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
	public static final BitSet FOLLOW_real_literal_constant_in_signed_real_literal_constant2374 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_M_REAL_CONST_in_real_literal_constant2393 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_UNDERSCORE_in_real_literal_constant2396 = new BitSet(new long[]{0x0000200000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_kind_param_in_real_literal_constant2400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_complex_literal_constant2440 = new BitSet(new long[]{0x0000200000000000L,0x4000000080000000L,0x0000040000008000L});
	public static final BitSet FOLLOW_real_part_in_complex_literal_constant2442 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_complex_literal_constant2444 = new BitSet(new long[]{0x0000200000000000L,0x4000000080000000L,0x0000040000008000L});
	public static final BitSet FOLLOW_imag_part_in_complex_literal_constant2446 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_complex_literal_constant2448 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_int_literal_constant_in_real_part2467 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_real_literal_constant_in_real_part2485 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_real_part2504 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_int_literal_constant_in_imag_part2533 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_real_literal_constant_in_imag_part2551 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_imag_part2569 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_char_selector2607 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_char_length_in_char_selector2609 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_char_selector2612 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_char_selector2632 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_char_selector2634 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_char_selector2644 = new BitSet(new long[]{0x0000300000810000L,0x44018000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_KIND_in_char_selector2649 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_char_selector2651 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_char_selector2655 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_char_selector2684 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_char_selector2702 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_LEN_in_char_selector2706 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_char_selector2708 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_char_selector2710 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_char_selector2720 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
	public static final BitSet FOLLOW_KIND_in_char_selector2724 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_char_selector2726 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_char_selector2728 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_char_selector2757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_char_selector2775 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
	public static final BitSet FOLLOW_KIND_in_char_selector2779 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_char_selector2781 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_char_selector2783 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_char_selector2793 = new BitSet(new long[]{0x0000300010811000L,0x44050000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_LEN_in_char_selector2798 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_char_selector2800 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_char_selector2804 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_char_selector2833 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_length_selector2862 = new BitSet(new long[]{0x0000300010811000L,0x44050000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_LEN_in_length_selector2868 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_length_selector2870 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_length_selector2875 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_length_selector2877 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_length_selector2895 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_char_length_in_length_selector2897 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_length_selector2900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_char_length2935 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_char_length2937 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_char_length2939 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_constant_in_char_length2949 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_char_literal_constant2970 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_UNDERSCORE_in_char_literal_constant2972 = new BitSet(new long[]{0x0000000000800000L});
	public static final BitSet FOLLOW_CHAR_CONST_in_char_literal_constant2974 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_char_literal_constant2992 = new BitSet(new long[]{0x0000000000800000L});
	public static final BitSet FOLLOW_CHAR_CONST_in_char_literal_constant2994 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHAR_CONST_in_char_literal_constant3012 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRUE_in_logical_literal_constant3041 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_UNDERSCORE_in_logical_literal_constant3046 = new BitSet(new long[]{0x0000200000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_kind_param_in_logical_literal_constant3050 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FALSE_in_logical_literal_constant3070 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_UNDERSCORE_in_logical_literal_constant3074 = new BitSet(new long[]{0x0000200000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_kind_param_in_logical_literal_constant3078 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derived_type_stmt_in_derived_type_def3113 = new BitSet(new long[]{0x0207600D0A400080L,0x0204840000000000L,0x104C080008000000L,0x0000000002000040L});
	public static final BitSet FOLLOW_type_param_or_comp_def_stmt_list_in_derived_type_def3124 = new BitSet(new long[]{0x0207200502400000L,0x0200040000000000L,0x100C000000000000L,0x0000000002000040L});
	public static final BitSet FOLLOW_private_or_sequence_in_derived_type_def3137 = new BitSet(new long[]{0x0207200502400000L,0x0200040000000000L,0x100C000000000000L,0x0000000002000040L});
	public static final BitSet FOLLOW_component_def_stmt_in_derived_type_def3162 = new BitSet(new long[]{0x0207200502400000L,0x0200040000000000L,0x1008000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_type_bound_procedure_part_in_derived_type_def3175 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_type_stmt_in_derived_type_def3186 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_derived_type_stmt3217 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_TYPE_in_derived_type_stmt3222 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_derived_type_stmt3234 = new BitSet(new long[]{0x0000000000008010L,0x0000000000000200L,0x0044000000000000L});
	public static final BitSet FOLLOW_type_attr_spec_list_in_derived_type_stmt3236 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_derived_type_stmt3243 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_derived_type_stmt3255 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_derived_type_stmt3265 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_derived_type_stmt3267 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_derived_type_stmt3269 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_derived_type_stmt3282 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_generic_name_list3319 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_generic_name_list3340 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_generic_name_list3344 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_access_spec_in_type_attr_spec3386 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EXTENDS_in_type_attr_spec3404 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_type_attr_spec3406 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_attr_spec3408 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_type_attr_spec3410 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ABSTRACT_in_type_attr_spec3428 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BIND_in_type_attr_spec3448 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_type_attr_spec3450 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_attr_spec3452 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_type_attr_spec3454 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_attr_spec_in_type_attr_spec_list3489 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_type_attr_spec_list3493 = new BitSet(new long[]{0x0000000000008010L,0x0000000000000200L,0x0044000000000000L});
	public static final BitSet FOLLOW_type_attr_spec_in_type_attr_spec_list3495 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_private_components_stmt_in_private_or_sequence3524 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sequence_stmt_in_private_or_sequence3532 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_type_stmt3558 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_type_stmt3563 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_TYPE_in_end_type_stmt3565 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_type_stmt3577 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_type_stmt3581 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_sequence_stmt3617 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000040L});
	public static final BitSet FOLLOW_SEQUENCE_in_sequence_stmt3622 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sequence_stmt3624 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_param_attr_spec_in_type_param_or_comp_def_stmt3653 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_type_param_or_comp_def_stmt3655 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_type_param_decl_list_in_type_param_or_comp_def_stmt3657 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_param_or_comp_def_stmt3659 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_component_attr_spec_list_in_type_param_or_comp_def_stmt3676 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_type_param_or_comp_def_stmt3678 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_component_decl_list_in_type_param_or_comp_def_stmt3680 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_param_or_comp_def_stmt3682 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_param_or_comp_def_stmt_in_type_param_or_comp_def_stmt_list3716 = new BitSet(new long[]{0x0000400808000082L,0x0004800000000000L,0x0044080008000000L});
	public static final BitSet FOLLOW_type_param_or_comp_def_stmt_in_type_param_or_comp_def_stmt_list3720 = new BitSet(new long[]{0x0000400808000082L,0x0004800000000000L,0x0044080008000000L});
	public static final BitSet FOLLOW_IDENT_in_type_param_decl3748 = new BitSet(new long[]{0x8000000000000002L});
	public static final BitSet FOLLOW_EQUALS_in_type_param_decl3752 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_type_param_decl3754 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_param_decl_in_type_param_decl_list3792 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_type_param_decl_list3796 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_type_param_decl_in_type_param_decl_list3798 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_KIND_in_type_param_attr_spec3822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LEN_in_type_param_attr_spec3841 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_component_def_stmt_in_component_def_stmt3879 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_proc_component_def_stmt_in_component_def_stmt3887 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_data_component_def_stmt3918 = new BitSet(new long[]{0x0007000102400000L,0x0200040000000000L,0x1000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_declaration_type_spec_in_data_component_def_stmt3930 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_data_component_def_stmt3943 = new BitSet(new long[]{0x0000400808000080L,0x0000000000000000L,0x0044080008000000L});
	public static final BitSet FOLLOW_component_attr_spec_list_in_data_component_def_stmt3945 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_data_component_def_stmt3961 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_component_decl_list_in_data_component_def_stmt3973 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_data_component_def_stmt3975 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_spec_in_component_attr_spec4003 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALLOCATABLE_in_component_attr_spec4021 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CODIMENSION_in_component_attr_spec4039 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_component_attr_spec4041 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_component_attr_spec4043 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_component_attr_spec4045 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTIGUOUS_in_component_attr_spec4063 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIMENSION_in_component_attr_spec4081 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_component_attr_spec4083 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_component_array_spec_in_component_attr_spec4085 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_component_attr_spec4087 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_POINTER_in_component_attr_spec4105 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_component_attr_spec_extension_in_component_attr_spec4123 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NO_LANG_EXT_in_component_attr_spec_extension4140 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_component_attr_spec_in_component_attr_spec_list4165 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_component_attr_spec_list4169 = new BitSet(new long[]{0x0000400808000080L,0x0000000000000000L,0x0044080008000000L});
	public static final BitSet FOLLOW_component_attr_spec_in_component_attr_spec_list4171 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IDENT_in_component_decl4200 = new BitSet(new long[]{0x8000000000001002L,0x0401000000000008L});
	public static final BitSet FOLLOW_LPAREN_in_component_decl4210 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_component_array_spec_in_component_decl4212 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_component_decl4214 = new BitSet(new long[]{0x8000000000001002L,0x0001000000000008L});
	public static final BitSet FOLLOW_LBRACKET_in_component_decl4227 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_component_decl4229 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_component_decl4231 = new BitSet(new long[]{0x8000000000001002L,0x0000000000000008L});
	public static final BitSet FOLLOW_ASTERISK_in_component_decl4244 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_char_length_in_component_decl4246 = new BitSet(new long[]{0x8000000000000002L,0x0000000000000008L});
	public static final BitSet FOLLOW_component_initialization_in_component_decl4259 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_component_decl_in_component_decl_list4301 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_component_decl_list4305 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_component_decl_in_component_decl_list4307 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_explicit_shape_spec_list_in_component_array_spec4331 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_deferred_shape_spec_list_in_component_array_spec4349 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_proc_component_def_stmt4389 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_proc_component_def_stmt4401 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_proc_component_def_stmt4403 = new BitSet(new long[]{0x0007000102400000L,0x0200040080000000L,0x1000000000000000L,0x0000000002000002L});
	public static final BitSet FOLLOW_proc_interface_in_proc_component_def_stmt4407 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_proc_component_def_stmt4413 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_proc_component_def_stmt4415 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044082002000000L});
	public static final BitSet FOLLOW_proc_component_attr_spec_list_in_proc_component_def_stmt4423 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_proc_component_def_stmt4425 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_proc_decl_list_in_proc_component_def_stmt4427 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_proc_component_def_stmt4429 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_POINTER_in_proc_component_attr_spec4458 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PASS_in_proc_component_attr_spec4476 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_proc_component_attr_spec4480 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_proc_component_attr_spec4484 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_proc_component_attr_spec4486 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOPASS_in_proc_component_attr_spec4507 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_spec_in_proc_component_attr_spec4525 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_proc_component_attr_spec_in_proc_component_attr_spec_list4560 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_proc_component_attr_spec_list4571 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044082002000000L});
	public static final BitSet FOLLOW_proc_component_attr_spec_in_proc_component_attr_spec_list4573 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_EQUALS_in_component_initialization4602 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_component_initialization4604 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQ_GT_in_component_initialization4612 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_null_init_in_component_initialization4614 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_private_components_stmt4645 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_PRIVATE_in_private_components_stmt4657 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_private_components_stmt4659 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contains_stmt_in_type_bound_procedure_part4692 = new BitSet(new long[]{0x0000200000000000L,0x0000000001008000L,0x000C000000000000L});
	public static final BitSet FOLLOW_binding_private_stmt_in_type_bound_procedure_part4696 = new BitSet(new long[]{0x0000200000000000L,0x0000000001008000L,0x0008000000000000L});
	public static final BitSet FOLLOW_type_bound_proc_binding_in_type_bound_procedure_part4709 = new BitSet(new long[]{0x0000200000000002L,0x0000000001008000L,0x0008000000000000L});
	public static final BitSet FOLLOW_type_bound_proc_binding_in_type_bound_procedure_part4713 = new BitSet(new long[]{0x0000200000000002L,0x0000000001008000L,0x0008000000000000L});
	public static final BitSet FOLLOW_label_in_binding_private_stmt4761 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0004000000000000L});
	public static final BitSet FOLLOW_PRIVATE_in_binding_private_stmt4773 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_binding_private_stmt4775 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_bound_proc_binding4815 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_type_bound_procedure_stmt_in_type_bound_proc_binding4820 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_bound_proc_binding4822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_bound_proc_binding4843 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_bound_generic_stmt_in_type_bound_proc_binding4848 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_bound_proc_binding4850 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_bound_proc_binding4871 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
	public static final BitSet FOLLOW_final_procedure_stmt_in_type_bound_proc_binding4876 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_bound_proc_binding4878 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROCEDURE_in_type_bound_procedure_stmt4917 = new BitSet(new long[]{0x0000000060000000L,0x0400000080000000L});
	public static final BitSet FOLLOW_LPAREN_in_type_bound_procedure_stmt4927 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_bound_procedure_stmt4931 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_type_bound_procedure_stmt4933 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_type_bound_procedure_stmt4946 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0044002002800000L});
	public static final BitSet FOLLOW_binding_attr_list_in_type_bound_procedure_stmt4948 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_type_bound_procedure_stmt4963 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_type_bound_proc_decl_list_in_type_bound_procedure_stmt4982 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_type_bound_proc_decl5012 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_type_bound_proc_decl5022 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_bound_proc_decl5026 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_bound_proc_decl_in_type_bound_proc_decl_list5057 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_type_bound_proc_decl_list5067 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_type_bound_proc_decl_in_type_bound_proc_decl_list5069 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_GENERIC_in_type_bound_generic_stmt5096 = new BitSet(new long[]{0x0000000060000000L});
	public static final BitSet FOLLOW_COMMA_in_type_bound_generic_stmt5100 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044000000000000L});
	public static final BitSet FOLLOW_access_spec_in_type_bound_generic_stmt5102 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_type_bound_generic_stmt5114 = new BitSet(new long[]{0x0000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_generic_spec_in_type_bound_generic_stmt5116 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_type_bound_generic_stmt5118 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_type_bound_generic_stmt5120 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PASS_in_binding_attr5153 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_binding_attr5157 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_binding_attr5159 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_binding_attr5161 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOPASS_in_binding_attr5183 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NON_OVERRIDABLE_in_binding_attr5201 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFERRED_in_binding_attr5219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_spec_in_binding_attr5237 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_binding_attr_in_binding_attr_list5272 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_binding_attr_list5283 = new BitSet(new long[]{0x0000080000000000L,0x0000000000000000L,0x0044002002800000L});
	public static final BitSet FOLLOW_binding_attr_in_binding_attr_list5285 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_FINAL_in_final_procedure_stmt5309 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_final_procedure_stmt5313 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_final_procedure_stmt5318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_derived_type_spec5352 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_derived_type_spec5356 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_spec_list_in_derived_type_spec5358 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_derived_type_spec5362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_keyword_in_type_param_spec5400 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_type_param_spec5402 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_value_in_type_param_spec5408 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_param_spec_in_type_param_spec_list5443 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_type_param_spec_list5454 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_spec_in_type_param_spec_list5456 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IDENT_in_structure_constructor5479 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_structure_constructor5481 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_type_param_spec_list_in_structure_constructor5483 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_structure_constructor5485 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_structure_constructor5494 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000002L});
	public static final BitSet FOLLOW_component_spec_list_in_structure_constructor5498 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_structure_constructor5503 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_keyword_in_component_spec5540 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_component_spec5542 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_component_data_source_in_component_spec5548 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_component_spec_in_component_spec_list5583 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_component_spec_list5594 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_component_spec_in_component_spec_list5596 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_component_data_source5619 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enum_def_stmt_in_enum_def5648 = new BitSet(new long[]{0x1000200000000000L});
	public static final BitSet FOLLOW_enumerator_def_stmt_in_enum_def5657 = new BitSet(new long[]{0x1200200000000000L});
	public static final BitSet FOLLOW_enumerator_def_stmt_in_enum_def5667 = new BitSet(new long[]{0x1200200000000000L});
	public static final BitSet FOLLOW_end_enum_stmt_in_enum_def5680 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_enum_def_stmt5711 = new BitSet(new long[]{0x0800000000000000L});
	public static final BitSet FOLLOW_ENUM_in_enum_def_stmt5730 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_enum_def_stmt5732 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_BIND_in_enum_def_stmt5734 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_enum_def_stmt5736 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_enum_def_stmt5738 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_enum_def_stmt5740 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_enum_def_stmt5742 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_enumerator_def_stmt5783 = new BitSet(new long[]{0x1000000000000000L});
	public static final BitSet FOLLOW_ENUMERATOR_in_enumerator_def_stmt5795 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_enumerator_def_stmt5799 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_enumerator_list_in_enumerator_def_stmt5804 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_enumerator_def_stmt5806 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_enumerator5839 = new BitSet(new long[]{0x8000000000000002L});
	public static final BitSet FOLLOW_EQUALS_in_enumerator5843 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_enumerator5845 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerator_in_enumerator_list5883 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_enumerator_list5893 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_enumerator_in_enumerator_list5895 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_end_enum_stmt5929 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_enum_stmt5941 = new BitSet(new long[]{0x0800000000000000L});
	public static final BitSet FOLLOW_ENUM_in_end_enum_stmt5943 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_enum_stmt5945 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BIN_CONST_in_boz_literal_constant5973 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OCT_CONST_in_boz_literal_constant5983 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HEX_CONST_in_boz_literal_constant5994 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_array_constructor6025 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_array_constructor6027 = new BitSet(new long[]{0x0007300100C10000L,0x46010400C0002000L,0x1000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_spec_in_array_constructor6029 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_array_constructor6031 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_array_constructor6033 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LBRACKET_in_array_constructor6041 = new BitSet(new long[]{0x0007300100C10000L,0x46010400C0002000L,0x1000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_spec_in_array_constructor6043 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_array_constructor6045 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_spec_in_ac_spec6080 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_ac_spec6082 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_value_list_in_ac_spec6091 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ac_value_list_in_ac_spec6111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_ac_value6147 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ac_implied_do_in_ac_value6155 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ac_value_in_ac_value_list6180 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_ac_value_list6191 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_value_in_ac_value_list6193 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_LPAREN_in_ac_implied_do6216 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_value_list_in_ac_implied_do6218 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_ac_implied_do6220 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_ac_implied_do_control_in_ac_implied_do6222 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_ac_implied_do6224 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_ac_implied_do_control6257 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_ac_implied_do_control6259 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_ac_implied_do_control6261 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_ac_implied_do_control6263 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_ac_implied_do_control6265 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_ac_implied_do_control6276 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_ac_implied_do_control6278 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_declaration_stmt6324 = new BitSet(new long[]{0x0007000102400000L,0x0200040000000000L,0x1000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_declaration_type_spec_in_type_declaration_stmt6336 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_type_declaration_stmt6347 = new BitSet(new long[]{0x000040080800A080L,0x0000280000000400L,0x0064081208000000L,0x00000000C0100004L});
	public static final BitSet FOLLOW_attr_spec_in_type_declaration_stmt6349 = new BitSet(new long[]{0x0000000060000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_type_declaration_stmt6355 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_entity_decl_list_in_type_declaration_stmt6366 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_declaration_stmt6368 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_spec_in_attr_spec6397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALLOCATABLE_in_attr_spec6415 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASYNCHRONOUS_in_attr_spec6433 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CODIMENSION_in_attr_spec6451 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_attr_spec6453 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_attr_spec6455 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_attr_spec6457 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTIGUOUS_in_attr_spec6475 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIMENSION_in_attr_spec6493 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_attr_spec6495 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_attr_spec6497 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_attr_spec6499 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EXTERNAL_in_attr_spec6517 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTENT_in_attr_spec6535 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_attr_spec6537 = new BitSet(new long[]{0x0000000000000000L,0x0000014000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_intent_spec_in_attr_spec6539 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_attr_spec6541 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTRINSIC_in_attr_spec6559 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_language_binding_spec_in_attr_spec6577 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPTIONAL_in_attr_spec6595 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PARAMETER_in_attr_spec6613 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_POINTER_in_attr_spec6631 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROTECTED_in_attr_spec6649 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SAVE_in_attr_spec6667 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TARGET_in_attr_spec6685 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VALUE_in_attr_spec6703 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VOLATILE_in_attr_spec6721 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_attr_spec_extension_in_attr_spec6739 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NO_LANG_EXT_in_attr_spec_extension6766 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_entity_decl6799 = new BitSet(new long[]{0x8000000000001002L,0x0401000000000008L});
	public static final BitSet FOLLOW_LPAREN_in_entity_decl6810 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_entity_decl6812 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_entity_decl6814 = new BitSet(new long[]{0x8000000000001002L,0x0001000000000008L});
	public static final BitSet FOLLOW_LBRACKET_in_entity_decl6830 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_entity_decl6832 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_entity_decl6834 = new BitSet(new long[]{0x8000000000001002L,0x0000000000000008L});
	public static final BitSet FOLLOW_ASTERISK_in_entity_decl6850 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_char_length_in_entity_decl6852 = new BitSet(new long[]{0x8000000000000002L,0x0000000000000008L});
	public static final BitSet FOLLOW_initialization_in_entity_decl6868 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_entity_decl_in_entity_decl_list6908 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_entity_decl_list6919 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_entity_decl_in_entity_decl_list6921 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IDENT_in_object_name6949 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQUALS_in_initialization6970 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_initialization6972 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQ_GT_in_initialization6991 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_designator_in_initialization6993 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_null_init7022 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_null_init7024 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_null_init7026 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PUBLIC_in_access_spec7053 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PRIVATE_in_access_spec7069 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BIND_in_language_binding_spec7101 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_language_binding_spec7103 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_language_binding_spec7105 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_language_binding_spec7115 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_name_in_language_binding_spec7117 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_language_binding_spec7119 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_language_binding_spec7121 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_language_binding_spec7127 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_array_spec_element_in_coarray_spec7159 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_coarray_spec7168 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_element_in_coarray_spec7170 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_DIMENSION_in_dimension_spec7201 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_dimension_spec7203 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_dimension_spec7205 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_dimension_spec7207 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_array_spec_element_in_array_spec7238 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_array_spec7247 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_element_in_array_spec7249 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_array_spec_element7288 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_array_spec_element7292 = new BitSet(new long[]{0x0000300000811002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_array_spec_element7311 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_array_spec_element7330 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_array_spec_element7371 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_array_spec_element7381 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DODOT_in_array_spec_element7391 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_explicit_shape_spec7417 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_explicit_shape_spec7420 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_explicit_shape_spec7422 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_explicit_shape_spec_in_explicit_shape_spec_list7457 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_explicit_shape_spec_list7467 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_explicit_shape_spec_in_explicit_shape_spec_list7469 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COLON_in_deferred_shape_spec_list7513 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_deferred_shape_spec_list7524 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_deferred_shape_spec_list7526 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IN_in_intent_spec7550 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OUT_in_intent_spec7560 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IN_in_intent_spec7570 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_OUT_in_intent_spec7572 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INOUT_in_intent_spec7582 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_access_stmt7615 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044000000000000L});
	public static final BitSet FOLLOW_access_spec_in_access_stmt7627 = new BitSet(new long[]{0x2000000020000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_access_stmt7642 = new BitSet(new long[]{0x0000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_access_id_list_in_access_stmt7656 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_access_stmt7669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_generic_spec_in_access_id7698 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_id_in_access_id_list7725 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_access_id_list7736 = new BitSet(new long[]{0x0000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_access_id_in_access_id_list7738 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_allocatable_stmt7774 = new BitSet(new long[]{0x0000000000000080L});
	public static final BitSet FOLLOW_ALLOCATABLE_in_allocatable_stmt7785 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_allocatable_stmt7789 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocatable_decl_list_in_allocatable_stmt7794 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_allocatable_stmt7796 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_object_name_in_allocatable_decl7832 = new BitSet(new long[]{0x0000000000000002L,0x0401000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_allocatable_decl7844 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_allocatable_decl7846 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_allocatable_decl7848 = new BitSet(new long[]{0x0000000000000002L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_allocatable_decl7863 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_allocatable_decl7865 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_allocatable_decl7867 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocatable_decl_in_allocatable_decl_list7907 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_allocatable_decl_list7918 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocatable_decl_in_allocatable_decl_list7920 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_asynchronous_stmt7956 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_ASYNCHRONOUS_in_asynchronous_stmt7968 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_asynchronous_stmt7972 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_asynchronous_stmt7977 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_asynchronous_stmt7986 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_bind_stmt8026 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_language_binding_spec_in_bind_stmt8038 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_COLON_COLON_in_bind_stmt8042 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_bind_entity_list_in_bind_stmt8047 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_bind_stmt8056 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_bind_entity8083 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_in_bind_entity8100 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_bind_entity8102 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_bind_entity8104 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_entity_in_bind_entity_list8138 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_bind_entity_list8148 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_bind_entity_in_bind_entity_list8150 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_codimension_stmt8185 = new BitSet(new long[]{0x0000000008000000L});
	public static final BitSet FOLLOW_CODIMENSION_in_codimension_stmt8196 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_codimension_stmt8200 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_codimension_decl_list_in_codimension_stmt8205 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_codimension_stmt8214 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_codimension_decl8241 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_codimension_decl8243 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_codimension_decl8245 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_codimension_decl8247 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_codimension_decl_in_codimension_decl_list8280 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_codimension_decl_list8290 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_codimension_decl_in_codimension_decl_list8292 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_contiguous_stmt8327 = new BitSet(new long[]{0x0000000800000000L});
	public static final BitSet FOLLOW_CONTIGUOUS_in_contiguous_stmt8338 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_contiguous_stmt8342 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_contiguous_stmt8347 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_contiguous_stmt8356 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_data_stmt8396 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_DATA_in_data_stmt8408 = new BitSet(new long[]{0x0000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_data_stmt_set_in_data_stmt8410 = new BitSet(new long[]{0x2000200040800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_COMMA_in_data_stmt8423 = new BitSet(new long[]{0x0000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_data_stmt_set_in_data_stmt8428 = new BitSet(new long[]{0x2000200040800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_data_stmt8441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_object_list_in_data_stmt_set8468 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_data_stmt_set8476 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_value_list_in_data_stmt_set8478 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_data_stmt_set8480 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_data_stmt_object8512 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_implied_do_in_data_stmt_object8520 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_object_in_data_stmt_object_list8545 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_data_stmt_object_list8555 = new BitSet(new long[]{0x0000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_data_stmt_object_in_data_stmt_object_list8557 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_LPAREN_in_data_implied_do8585 = new BitSet(new long[]{0x0000000000000000L,0x0400000080000000L});
	public static final BitSet FOLLOW_data_i_do_object_list_in_data_implied_do8587 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_data_implied_do8596 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_data_implied_do8598 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_data_implied_do8600 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_data_implied_do8602 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_data_implied_do8611 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_data_implied_do8613 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_data_implied_do8624 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_data_implied_do8626 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_data_implied_do8632 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_ref_in_data_i_do_object8666 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_implied_do_in_data_i_do_object8674 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_i_do_object_in_data_i_do_object_list8699 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_data_i_do_object_list8710 = new BitSet(new long[]{0x0000000000000000L,0x0400000080000000L});
	public static final BitSet FOLLOW_data_i_do_object_in_data_i_do_object_list8712 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_designator_in_data_stmt_value8757 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_ASTERISK_in_data_stmt_value8760 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_constant_in_data_stmt_value8762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_constant_in_data_stmt_value8774 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_ASTERISK_in_data_stmt_value8777 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_constant_in_data_stmt_value8779 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_int_literal_constant_in_data_stmt_value8791 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_real_literal_constant_in_data_stmt_value8799 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_complex_literal_constant_in_data_stmt_value8807 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logical_literal_constant_in_data_stmt_value8815 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_data_stmt_value8823 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boz_literal_constant_in_data_stmt_value8831 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structure_constructor_in_data_stmt_value8839 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_value_in_data_stmt_value_list8864 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_data_stmt_value_list8874 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_value_in_data_stmt_value_list8876 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_designator_in_data_stmt_constant8917 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_int_literal_constant_in_data_stmt_constant8925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_real_literal_constant_in_data_stmt_constant8933 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_complex_literal_constant_in_data_stmt_constant8941 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logical_literal_constant_in_data_stmt_constant8949 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_data_stmt_constant8957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boz_literal_constant_in_data_stmt_constant8965 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structure_constructor_in_data_stmt_constant8973 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_dimension_stmt9004 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_DIMENSION_in_dimension_stmt9015 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_dimension_stmt9019 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_dimension_decl_in_dimension_stmt9031 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_dimension_stmt9035 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_dimension_decl_in_dimension_stmt9037 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_dimension_stmt9050 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_dimension_decl9077 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_dimension_decl9079 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_dimension_decl9081 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_dimension_decl9083 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_intent_stmt9123 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_INTENT_in_intent_stmt9135 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_intent_stmt9137 = new BitSet(new long[]{0x0000000000000000L,0x0000014000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_intent_spec_in_intent_stmt9139 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_intent_stmt9141 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_intent_stmt9145 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_intent_stmt9150 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_intent_stmt9159 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_optional_stmt9200 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_OPTIONAL_in_optional_stmt9212 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_optional_stmt9216 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_optional_stmt9221 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_optional_stmt9230 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_parameter_stmt9270 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_PARAMETER_in_parameter_stmt9281 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_parameter_stmt9283 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_named_constant_def_list_in_parameter_stmt9285 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_parameter_stmt9287 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_parameter_stmt9295 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_named_constant_def9324 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_named_constant_def9326 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_named_constant_def9328 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_named_constant_def_in_named_constant_def_list9363 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_named_constant_def_list9373 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_named_constant_def_in_named_constant_def_list9375 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_pointer_stmt9410 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_POINTER_in_pointer_stmt9422 = new BitSet(new long[]{0x0000000020000000L,0x0400000080000000L});
	public static final BitSet FOLLOW_cray_pointer_assoc_list_in_pointer_stmt9432 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_pointer_stmt9449 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_pointer_decl_list_in_pointer_stmt9454 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pointer_stmt9473 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_pointer_decl9506 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_pointer_decl9517 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_deferred_shape_spec_list_in_pointer_decl9519 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_pointer_decl9521 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_cray_pointer_assoc9552 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_cray_pointer_assoc9556 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_cray_pointer_assoc9558 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_cray_pointer_assoc9562 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_cray_pointer_assoc9564 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_decl_in_pointer_decl_list9599 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_pointer_decl_list9609 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_pointer_decl_in_pointer_decl_list9611 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_cray_pointer_assoc_in_cray_pointer_assoc_list9641 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_cray_pointer_assoc_list9651 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_cray_pointer_assoc_in_cray_pointer_assoc_list9653 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_protected_stmt9688 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0020000000000000L});
	public static final BitSet FOLLOW_PROTECTED_in_protected_stmt9699 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_protected_stmt9703 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_protected_stmt9708 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_protected_stmt9716 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_save_stmt9756 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
	public static final BitSet FOLLOW_SAVE_in_save_stmt9768 = new BitSet(new long[]{0x2000000020000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_COLON_COLON_in_save_stmt9774 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_saved_entity_list_in_save_stmt9779 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_save_stmt9793 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_saved_entity9824 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_in_saved_entity9842 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_saved_entity9846 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_saved_entity9848 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_saved_entity_in_saved_entity_list9884 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_saved_entity_list9894 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_saved_entity_in_saved_entity_list9896 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_target_stmt9931 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_TARGET_in_target_stmt9942 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_target_stmt9946 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_target_decl_list_in_target_stmt9951 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_target_stmt9959 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_target_decl9992 = new BitSet(new long[]{0x0000000000000002L,0x0401000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_target_decl10002 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_array_spec_in_target_decl10004 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_target_decl10006 = new BitSet(new long[]{0x0000000000000002L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_target_decl10020 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000002001000000L});
	public static final BitSet FOLLOW_coarray_spec_in_target_decl10022 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_target_decl10024 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_target_decl_in_target_decl_list10064 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_target_decl_list10075 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_target_decl_in_target_decl_list10077 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_value_stmt10112 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_VALUE_in_value_stmt10123 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_value_stmt10127 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_value_stmt10132 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_value_stmt10141 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_volatile_stmt10181 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_VOLATILE_in_volatile_stmt10193 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_volatile_stmt10197 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_volatile_stmt10202 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_volatile_stmt10211 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_implicit_stmt10247 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_IMPLICIT_in_implicit_stmt10259 = new BitSet(new long[]{0x0007000102400000L,0x0200040000000000L,0x1000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_implicit_spec_list_in_implicit_stmt10268 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_implicit_stmt10277 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_implicit_stmt10299 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_IMPLICIT_in_implicit_stmt10311 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_NONE_in_implicit_stmt10313 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_implicit_stmt10323 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L,0x0000000000000000L,0x0000000002000002L});
	public static final BitSet FOLLOW_implicit_none_spec_in_implicit_stmt10330 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_implicit_stmt10334 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_implicit_stmt10345 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_type_spec_in_implicit_spec10374 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_implicit_spec10376 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_letter_spec_list_in_implicit_spec10378 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_implicit_spec10380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_implicit_spec_in_implicit_spec_list10415 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_implicit_spec_list10423 = new BitSet(new long[]{0x0007000102400000L,0x0200040000000000L,0x1000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_implicit_spec_in_implicit_spec_list10425 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IDENT_in_letter_spec10452 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L});
	public static final BitSet FOLLOW_MINUS_in_letter_spec10456 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_letter_spec10460 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_letter_spec_in_letter_spec_list10499 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_letter_spec_list10509 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_letter_spec_in_letter_spec_list10511 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_EXTERNAL_in_implicit_none_spec10539 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPE_in_implicit_none_spec10549 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_import_stmt10581 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_IMPORT_in_import_stmt10592 = new BitSet(new long[]{0x2000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_import_stmt10598 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_import_stmt10603 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_import_stmt10616 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_import_stmt10637 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_IMPORT_in_import_stmt10648 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_import_stmt10650 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_ONLY_in_import_stmt10652 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_import_stmt10654 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_import_stmt10656 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_import_stmt10665 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_import_stmt10686 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_IMPORT_in_import_stmt10697 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_import_stmt10699 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_NONE_in_import_stmt10701 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_import_stmt10710 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_import_stmt10731 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_IMPORT_in_import_stmt10742 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_import_stmt10744 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ALL_in_import_stmt10746 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_import_stmt10755 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_namelist_stmt10796 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_NAMELIST_in_namelist_stmt10807 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_namelist_stmt10809 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_namelist_stmt10813 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_namelist_stmt10815 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_namelist_group_object_list_in_namelist_stmt10833 = new BitSet(new long[]{0x2000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_COMMA_in_namelist_stmt10845 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_namelist_stmt10850 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_namelist_stmt10854 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_namelist_stmt10856 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_namelist_group_object_list_in_namelist_stmt10882 = new BitSet(new long[]{0x2000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_end_of_stmt_in_namelist_stmt10902 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_namelist_group_object_list10941 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_namelist_group_object_list10953 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_namelist_group_object_list10957 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_equivalence_stmt11003 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_EQUIVALENCE_in_equivalence_stmt11014 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_equivalence_set_list_in_equivalence_stmt11016 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_equivalence_stmt11024 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_equivalence_set11053 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_equivalence_object_in_equivalence_set11055 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_equivalence_set11057 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_equivalence_object_list_in_equivalence_set11059 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_equivalence_set11061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equivalence_set_in_equivalence_set_list11092 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_equivalence_set_list11103 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_equivalence_set_in_equivalence_set_list11105 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_substring_in_equivalence_object11139 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equivalence_object_in_equivalence_object_list11166 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_equivalence_object_list11177 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_equivalence_object_in_equivalence_object_list11179 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_common_stmt11215 = new BitSet(new long[]{0x0000000080000000L});
	public static final BitSet FOLLOW_COMMON_in_common_stmt11226 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000500L});
	public static final BitSet FOLLOW_common_block_name_in_common_stmt11232 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_common_block_object_list_in_common_stmt11254 = new BitSet(new long[]{0x2000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000500L});
	public static final BitSet FOLLOW_COMMA_in_common_stmt11266 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000500L});
	public static final BitSet FOLLOW_common_block_name_in_common_stmt11273 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_common_block_object_list_in_common_stmt11295 = new BitSet(new long[]{0x2000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000500L});
	public static final BitSet FOLLOW_end_of_stmt_in_common_stmt11309 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_SLASH_in_common_block_name11341 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_in_common_block_name11351 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_IDENT_in_common_block_name11354 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_SLASH_in_common_block_name11358 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_common_block_object11383 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_common_block_object11393 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_explicit_shape_spec_list_in_common_block_object11395 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_common_block_object11397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_common_block_object_in_common_block_object_list11436 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_common_block_object_list11446 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_common_block_object_in_common_block_object_list11448 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_CIVL_PRIMITIVE_in_quantified_expr11473 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_quantified_expr11475 = new BitSet(new long[]{0x0007000100400000L,0x0200040000000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_intrinsic_type_spec_in_quantified_expr11477 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_entity_decl_list_in_quantified_expr11479 = new BitSet(new long[]{0x0000000010000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_quantified_expr11486 = new BitSet(new long[]{0x0000300001810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_quantified_expr_in_quantified_expr11489 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_quantified_expr11491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_quantified_expr11499 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_quantified_expr11501 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVL_PRIMITIVE_in_civl_stmt11522 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_civl_stmt11524 = new BitSet(new long[]{0x0000300001810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000002L});
	public static final BitSet FOLLOW_expr_in_civl_stmt11532 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_quantified_expr_in_civl_stmt11541 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_civl_stmt11551 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PRAGMA_in_pragma_type_qualifier_stmt11579 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_pragma_type_qualifier_stmt11581 = new BitSet(new long[]{0x0000000001000000L});
	public static final BitSet FOLLOW_CIVL_PRIMITIVE_in_pragma_type_qualifier_stmt11583 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pragma_type_qualifier_stmt11585 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PRAGMA_in_pragma_stmt11622 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_pragma_stmt11624 = new BitSet(new long[]{0xDFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000001FFFFFFFFFFL});
	public static final BitSet FOLLOW_pragma_tokens_in_pragma_stmt11627 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_civl_stmt_in_pragma_stmt11629 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pragma_stmt11634 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_pragma_tokens11675 = new BitSet(new long[]{0xDFFFFFFFFEFFFFF2L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000001FFFFFFFFFFL});
	public static final BitSet FOLLOW_data_ref_in_designator11731 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_designator11734 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_in_designator11736 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_designator11740 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_designator11760 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_designator11762 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_in_designator11764 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_designator11766 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_ref_in_designator_or_func_ref11805 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_designator_or_func_ref11816 = new BitSet(new long[]{0x0000300010811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_or_arg_list_in_designator_or_func_ref11818 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_designator_or_func_ref11820 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_designator_or_func_ref11859 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_designator_or_func_ref11861 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_in_designator_or_func_ref11863 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_designator_or_func_ref11865 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_substring_range_or_arg_list11904 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_substring_range_or_arg_list11907 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_substring_range_or_arg_list11930 = new BitSet(new long[]{0x0000000050000000L});
	public static final BitSet FOLLOW_substr_range_or_arg_list_suffix_in_substring_range_or_arg_list11932 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_substring_range_or_arg_list11950 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_substring_range_or_arg_list11952 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_substring_range_or_arg_list11954 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_substring_range_or_arg_list11976 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_actual_arg_spec_in_substring_range_or_arg_list11978 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_IDENT_in_substring_range_or_arg_list12003 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_substring_range_or_arg_list12005 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_substring_range_or_arg_list12012 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_in_substring_range_or_arg_list12016 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_substring_range_or_arg_list12037 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_actual_arg_spec_in_substring_range_or_arg_list12039 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COLON_in_substr_range_or_arg_list_suffix12093 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_substr_range_or_arg_list_suffix12096 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_substr_range_or_arg_list_suffix12132 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_actual_arg_spec_in_substr_range_or_arg_list_suffix12134 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_designator_in_variable12169 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_logical_variable12201 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_char_variable12229 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_default_char_variable12257 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_int_variable12286 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_ref_in_substring12323 = new BitSet(new long[]{0x0000000000000002L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_substring12333 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_in_substring12335 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_substring12337 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_substring12349 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_substring12358 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_substring_range_in_substring12360 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_substring12362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_substring_range12391 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_substring_range12397 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_substring_range12400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_part_ref_in_data_ref12441 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_PERCENT_in_data_ref12451 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_part_ref_in_data_ref12453 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_IDENT_in_part_ref12510 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_part_ref12512 = new BitSet(new long[]{0x0000300070811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_section_subscript_list_in_part_ref12514 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_part_ref12516 = new BitSet(new long[]{0x0000000000000002L,0x0001000000000000L});
	public static final BitSet FOLLOW_image_selector_in_part_ref12529 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_part_ref12570 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_image_selector_in_part_ref12572 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_part_ref12590 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_part_ref_no_image_selector12651 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_part_ref_no_image_selector12653 = new BitSet(new long[]{0x0000300070811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_section_subscript_list_in_part_ref_no_image_selector12655 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_part_ref_no_image_selector12657 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_part_ref_no_image_selector12675 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_section_subscript12736 = new BitSet(new long[]{0x0000000030000000L});
	public static final BitSet FOLLOW_section_subscript_ambiguous_in_section_subscript12738 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_section_subscript12746 = new BitSet(new long[]{0x0000300010810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript12749 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_section_subscript12756 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript12758 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_COLON_in_section_subscript12780 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript12782 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_section_subscript12800 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_section_subscript12802 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript12804 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_section_subscript12827 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_section_subscript12829 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_section_subscript12831 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_in_section_subscript12835 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_section_subscript12854 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_in_section_subscript12858 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_section_subscript_ambiguous12932 = new BitSet(new long[]{0x0000300010810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript_ambiguous12935 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_section_subscript_ambiguous12942 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript_ambiguous12944 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_COLON_in_section_subscript_ambiguous12964 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_section_subscript_ambiguous12966 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_section_subscript_in_section_subscript_list13008 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_section_subscript_list13019 = new BitSet(new long[]{0x0000300070811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_section_subscript_in_section_subscript_list13021 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_LBRACKET_in_image_selector13051 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_cosubscript_list_in_image_selector13053 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_image_selector13056 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000010000201000L});
	public static final BitSet FOLLOW_image_selector_spec_list_in_image_selector13058 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_image_selector13064 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_cosubscript_list13101 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_cosubscript_list13111 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_cosubscript_list13113 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_STAT_in_image_selector_spec13137 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_image_selector_spec13139 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_designator_in_image_selector_spec13141 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TEAM_in_image_selector_spec13159 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_image_selector_spec13161 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_image_selector_spec13163 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TEAM_NUMBER_in_image_selector_spec13181 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_image_selector_spec13183 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_image_selector_spec13185 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_image_selector_spec_in_image_selector_spec_list13221 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_image_selector_spec_list13231 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000010000201000L});
	public static final BitSet FOLLOW_image_selector_spec_in_image_selector_spec_list13233 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_allocate_stmt13268 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
	public static final BitSet FOLLOW_M_ALLOCATE_STMT_1_in_allocate_stmt13280 = new BitSet(new long[]{0x0000000000000100L});
	public static final BitSet FOLLOW_ALLOCATE_in_allocate_stmt13282 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_allocate_stmt13284 = new BitSet(new long[]{0x0007000100400000L,0x0200040080000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_type_spec_in_allocate_stmt13293 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_allocate_stmt13295 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocation_list_in_allocate_stmt13297 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_allocate_stmt13307 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L,0x0000000000000002L,0x0000000000001800L});
	public static final BitSet FOLLOW_alloc_opt_list_in_allocate_stmt13309 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_allocate_stmt13316 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_allocate_stmt13325 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_allocate_stmt13346 = new BitSet(new long[]{0x0000000000000100L});
	public static final BitSet FOLLOW_ALLOCATE_in_allocate_stmt13358 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_allocate_stmt13360 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocation_list_in_allocate_stmt13362 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_allocate_stmt13372 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L,0x0000000000000002L,0x0000000000001800L});
	public static final BitSet FOLLOW_alloc_opt_list_in_allocate_stmt13374 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_allocate_stmt13381 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_allocate_stmt13389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ERRMSG_in_alloc_opt13418 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_alloc_opt13420 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_default_char_variable_in_alloc_opt13422 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MOLD_in_alloc_opt13440 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_alloc_opt13442 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_alloc_opt13444 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SOURCE_in_alloc_opt13462 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_alloc_opt13464 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_alloc_opt13466 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAT_in_alloc_opt13484 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_alloc_opt13486 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_designator_in_alloc_opt13488 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alloc_opt_in_alloc_opt_list13523 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_alloc_opt_list13533 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L,0x0000000000000002L,0x0000000000001800L});
	public static final BitSet FOLLOW_alloc_opt_in_alloc_opt_list13535 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_allocate_object_in_allocation13582 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_allocation13584 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_allocate_coarray_spec_in_allocation13586 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_RBRACKET_in_allocation13588 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_object_in_allocation13635 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocation_in_allocation_list13669 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_allocation_list13679 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocation_in_allocation_list13681 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_part_ref_no_image_selector_in_allocate_object13713 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_PERCENT_in_allocate_object13722 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_part_ref_no_image_selector_in_allocate_object13724 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_allocate_object_in_allocate_object_list13753 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_allocate_object_list13763 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocate_object_in_allocate_object_list13765 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_allocate_shape_spec13793 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_allocate_shape_spec13796 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_allocate_shape_spec13798 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_shape_spec_in_allocate_shape_spec_list13835 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_allocate_shape_spec_list13845 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_allocate_shape_spec_in_allocate_shape_spec_list13847 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_ASTERISK_in_allocate_coarray_spec13891 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_allocate_coarray_spec13909 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_allocate_coarray_spec13911 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_allocate_coarray_spec13913 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_allocate_coshape_spec13938 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_allocate_coshape_spec13942 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_allocate_coshape_spec13944 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_coshape_spec_in_allocate_coshape_spec_list13982 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_allocate_coshape_spec_list13991 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_allocate_coshape_spec_in_allocate_coshape_spec_list13993 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_nullify_stmt14027 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000010000000L});
	public static final BitSet FOLLOW_NULLIFY_in_nullify_stmt14038 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_nullify_stmt14040 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_pointer_object_list_in_nullify_stmt14042 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_nullify_stmt14044 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_nullify_stmt14052 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_ref_in_pointer_object14081 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_object_in_pointer_object_list14114 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_pointer_object_list14124 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_pointer_object_in_pointer_object_list14126 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_deallocate_stmt14161 = new BitSet(new long[]{0x0000020000000000L});
	public static final BitSet FOLLOW_DEALLOCATE_in_deallocate_stmt14172 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_deallocate_stmt14174 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_allocate_object_list_in_deallocate_stmt14176 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_deallocate_stmt14186 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L,0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_dealloc_opt_list_in_deallocate_stmt14188 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_deallocate_stmt14194 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_deallocate_stmt14202 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAT_in_dealloc_opt14235 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_dealloc_opt14237 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_designator_in_dealloc_opt14239 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ERRMSG_in_dealloc_opt14257 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_dealloc_opt14259 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_default_char_variable_in_dealloc_opt14261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dealloc_opt_in_dealloc_opt_list14296 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_dealloc_opt_list14306 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L,0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_dealloc_opt_in_dealloc_opt_list14308 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_designator_or_func_ref_in_primary14344 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_constant_in_primary14352 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_array_constructor_in_primary14360 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structure_constructor_in_primary14368 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primary14376 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_primary14378 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_primary14380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_defined_unary_op_in_level_1_expr14404 = new BitSet(new long[]{0x0000200000810000L,0x04010000C0002000L,0x0000000020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_primary_in_level_1_expr14417 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFINED_OP_in_defined_unary_op14450 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_level_1_expr_in_power_operand14475 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_power_op_in_power_operand14486 = new BitSet(new long[]{0x0000300000810000L,0x04010000C0002000L,0x0000000020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_power_operand_in_power_operand14488 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_power_operand_in_mult_operand14525 = new BitSet(new long[]{0x0000000000001002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_mult_op_in_mult_operand14536 = new BitSet(new long[]{0x0000300000810000L,0x04010000C0002000L,0x0000000020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_power_operand_in_mult_operand14538 = new BitSet(new long[]{0x0000000000001002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_add_op_in_signed_operand14591 = new BitSet(new long[]{0x0000300000810000L,0x04010000C0002000L,0x0000000020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_mult_operand_in_signed_operand14602 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_operand_in_add_operand14634 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L,0x0000040000000000L});
	public static final BitSet FOLLOW_add_op_in_add_operand14646 = new BitSet(new long[]{0x0000300000810000L,0x04010000C0002000L,0x0000000020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_mult_operand_in_add_operand14648 = new BitSet(new long[]{0x0000000000000002L,0x4000000000000000L,0x0000040000000000L});
	public static final BitSet FOLLOW_add_operand_in_level_2_expr14703 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_concat_op_in_level_2_expr14714 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_add_operand_in_level_2_expr14716 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_POWER_in_power_op14771 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_mult_op14796 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_in_mult_op14806 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_add_op14831 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MINUS_in_add_op14841 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_level_2_expr_in_level_3_expr14866 = new BitSet(new long[]{0x4000000000000002L,0x081A000038800004L,0x0000000000080000L,0x0000000000000200L});
	public static final BitSet FOLLOW_rel_op_in_level_3_expr14876 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_level_2_expr_in_level_3_expr14878 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_SLASH_in_concat_op14919 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQ_in_rel_op14947 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NE_in_rel_op14957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LT_in_rel_op14967 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LE_in_rel_op14977 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GT_in_rel_op14987 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GE_in_rel_op14997 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQ_EQ_in_rel_op15007 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SLASH_EQ_in_rel_op15017 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LESSTHAN_in_rel_op15027 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LESSTHAN_EQ_in_rel_op15037 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GREATERTHAN_in_rel_op15047 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GREATERTHAN_EQ_in_rel_op15057 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_not_op_in_and_operand15087 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_level_3_expr_in_and_operand15092 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_and_op_in_and_operand15102 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_not_op_in_and_operand15108 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_level_3_expr_in_and_operand15113 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_and_operand_in_or_operand15167 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_or_op_in_or_operand15170 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_and_operand_in_or_operand15172 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_or_operand_in_equiv_operand15209 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L,0x0000000000100000L});
	public static final BitSet FOLLOW_equiv_op_in_equiv_operand15220 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_or_operand_in_equiv_operand15222 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L,0x0000000000100000L});
	public static final BitSet FOLLOW_equiv_operand_in_level_5_expr15276 = new BitSet(new long[]{0x0000100000000002L});
	public static final BitSet FOLLOW_defined_binary_op_in_level_5_expr15287 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_equiv_operand_in_level_5_expr15289 = new BitSet(new long[]{0x0000100000000002L});
	public static final BitSet FOLLOW_NOT_in_not_op15343 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AND_in_and_op15369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OR_in_or_op15394 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EQV_in_equiv_op15419 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NEQV_in_equiv_op15429 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_level_5_expr_in_expr15450 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFINED_OP_in_defined_binary_op15475 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_assignment_stmt15510 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_M_ASSIGNMENT_STMT_in_assignment_stmt15521 = new BitSet(new long[]{0x0000200000800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_variable_in_assignment_stmt15523 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_assignment_stmt15525 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_assignment_stmt15527 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_assignment_stmt15536 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_pointer_assignment_stmt15583 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15595 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_data_ref_in_pointer_assignment_stmt15597 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_pointer_assignment_stmt15599 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_pointer_assignment_stmt15601 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pointer_assignment_stmt15609 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_pointer_assignment_stmt15630 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15641 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_data_ref_in_pointer_assignment_stmt15643 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_pointer_assignment_stmt15652 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_bounds_spec_list_in_pointer_assignment_stmt15654 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_pointer_assignment_stmt15656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_pointer_assignment_stmt15658 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_pointer_assignment_stmt15660 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pointer_assignment_stmt15669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_pointer_assignment_stmt15690 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_M_PTR_ASSIGNMENT_STMT_in_pointer_assignment_stmt15702 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_data_ref_in_pointer_assignment_stmt15704 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_pointer_assignment_stmt15713 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_bounds_remapping_list_in_pointer_assignment_stmt15715 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_pointer_assignment_stmt15717 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_pointer_assignment_stmt15719 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_pointer_assignment_stmt15721 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_pointer_assignment_stmt15730 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_data_pointer_object15759 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_bounds_spec15780 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_bounds_spec15782 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bounds_spec_in_bounds_spec_list15809 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_bounds_spec_list15819 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_bounds_spec_in_bounds_spec_list15821 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_bounds_remapping15845 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_bounds_remapping15847 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_bounds_remapping15849 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bounds_remapping_in_bounds_remapping_list15884 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_bounds_remapping_list15894 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_bounds_remapping_in_bounds_remapping_list15896 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_designator_in_proc_pointer_object15923 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_where_stmt15961 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_M_WHERE_STMT_in_where_stmt15972 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_WHERE_in_where_stmt15974 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_where_stmt15976 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_where_stmt15978 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_where_stmt15980 = new BitSet(new long[]{0x0000200000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_assignment_stmt_in_where_stmt15989 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_construct_stmt_in_where_construct16023 = new BitSet(new long[]{0x0340200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_where_body_construct_in_where_construct16033 = new BitSet(new long[]{0x0340200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_masked_elsewhere_stmt_in_where_construct16049 = new BitSet(new long[]{0x0340200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_where_body_construct_in_where_construct16053 = new BitSet(new long[]{0x0340200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_elsewhere_stmt_in_where_construct16090 = new BitSet(new long[]{0x0200200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_where_body_construct_in_where_construct16094 = new BitSet(new long[]{0x0200200000000000L,0x0000000080000000L,0x0000000000030008L});
	public static final BitSet FOLLOW_end_where_stmt_in_where_construct16128 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_where_construct_stmt16167 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_where_construct_stmt16169 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_M_WHERE_CONSTRUCT_STMT_in_where_construct_stmt16182 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_WHERE_in_where_construct_stmt16184 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_where_construct_stmt16186 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_where_construct_stmt16188 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_where_construct_stmt16190 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_where_construct_stmt16199 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignment_stmt_in_where_body_construct16233 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_stmt_in_where_body_construct16241 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_construct_in_where_body_construct16249 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_masked_elsewhere_stmt16285 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_ELSE_in_masked_elsewhere_stmt16296 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_WHERE_in_masked_elsewhere_stmt16298 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_masked_elsewhere_stmt16300 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_masked_elsewhere_stmt16302 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_masked_elsewhere_stmt16304 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_masked_elsewhere_stmt16308 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_masked_elsewhere_stmt16321 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_masked_elsewhere_stmt16342 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_ELSEWHERE_in_masked_elsewhere_stmt16353 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_masked_elsewhere_stmt16355 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_masked_elsewhere_stmt16357 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_masked_elsewhere_stmt16359 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_masked_elsewhere_stmt16363 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_masked_elsewhere_stmt16375 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_elsewhere_stmt16416 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_ELSE_in_elsewhere_stmt16428 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_WHERE_in_elsewhere_stmt16430 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_elsewhere_stmt16433 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_elsewhere_stmt16446 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_elsewhere_stmt16467 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_ELSEWHERE_in_elsewhere_stmt16479 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_elsewhere_stmt16482 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_elsewhere_stmt16494 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_where_stmt16534 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_where_stmt16545 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_WHERE_in_end_where_stmt16547 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_where_stmt16551 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_where_stmt16564 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_construct_stmt_in_forall_construct16597 = new BitSet(new long[]{0x0200200000000000L,0x0000000080000000L,0x0000000000034308L});
	public static final BitSet FOLLOW_forall_body_construct_in_forall_construct16607 = new BitSet(new long[]{0x0200200000000000L,0x0000000080000000L,0x0000000000034308L});
	public static final BitSet FOLLOW_end_forall_stmt_in_forall_construct16618 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_forall_construct_stmt16648 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_IDENT_in_forall_construct_stmt16662 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_forall_construct_stmt16664 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_M_FORALL_CONSTRUCT_STMT_in_forall_construct_stmt16677 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_FORALL_in_forall_construct_stmt16679 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_concurrent_header_in_forall_construct_stmt16681 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_forall_construct_stmt16690 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_assignment_stmt_in_forall_body_construct16725 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_stmt_in_forall_body_construct16733 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_where_construct_in_forall_body_construct16741 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_construct_in_forall_body_construct16749 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_forall_stmt_in_forall_body_construct16757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignment_stmt_in_forall_assignment_stmt16780 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_assignment_stmt_in_forall_assignment_stmt16798 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_forall_stmt16838 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_forall_stmt16850 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_FORALL_in_end_forall_stmt16852 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_forall_stmt16856 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_forall_stmt16868 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_forall_stmt16908 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_M_FORALL_STMT_in_forall_stmt16920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_FORALL_in_forall_stmt16922 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_concurrent_header_in_forall_stmt16924 = new BitSet(new long[]{0x0000200000000000L,0x0000000000000000L,0x0000000000004008L});
	public static final BitSet FOLLOW_forall_assignment_stmt_in_forall_stmt16926 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_execution_part_construct_in_block16966 = new BitSet(new long[]{0x0600A3D0040A4902L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_associate_stmt_in_associate_construct16989 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_associate_construct16997 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_associate_stmt_in_associate_construct17005 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_associate_stmt17046 = new BitSet(new long[]{0x0000000000000800L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_associate_stmt17059 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_associate_stmt17061 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_ASSOCIATE_in_associate_stmt17074 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_associate_stmt17076 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_association_list_in_associate_stmt17078 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_associate_stmt17080 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_associate_stmt17089 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_association17118 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_association17120 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_selector_in_association17122 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_association_in_association_list17157 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_association_list17167 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_association_in_association_list17169 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_selector17193 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_associate_stmt17225 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_associate_stmt17236 = new BitSet(new long[]{0x0000000000000800L});
	public static final BitSet FOLLOW_ASSOCIATE_in_end_associate_stmt17238 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_associate_stmt17241 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_associate_stmt17254 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_block_stmt_in_block_construct17287 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200361186090500L,0x986E48109003570CL,0x00000009A212403DL});
	public static final BitSet FOLLOW_specification_part_and_block_in_block_construct17295 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_block_stmt_in_block_construct17304 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_block_stmt17334 = new BitSet(new long[]{0x0000000000020000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_block_stmt17347 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_block_stmt17349 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_BLOCK_in_block_stmt17355 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_block_stmt17364 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_use_stmt_in_specification_part_and_block17400 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200361186090500L,0x986E48109003570CL,0x00000009A212403DL});
	public static final BitSet FOLLOW_import_stmt_in_specification_part_and_block17416 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200361186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_specification_part_and_block17430 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_entry_stmt_in_declaration_construct_and_block17482 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17484 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enum_def_in_declaration_construct_and_block17513 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17515 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_format_stmt_in_declaration_construct_and_block17544 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17546 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interface_block_in_declaration_construct_and_block17575 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17577 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameter_stmt_in_declaration_construct_and_block17606 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17608 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_procedure_declaration_stmt_in_declaration_construct_and_block17638 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17640 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derived_type_def_in_declaration_construct_and_block17664 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17666 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_declaration_stmt_in_declaration_construct_and_block17690 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17692 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_stmt_in_declaration_construct_and_block17721 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17723 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocatable_stmt_in_declaration_construct_and_block17752 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17755 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_asynchronous_stmt_in_declaration_construct_and_block17785 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17787 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_bind_stmt_in_declaration_construct_and_block17816 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17818 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_codimension_stmt_in_declaration_construct_and_block17847 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17849 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_stmt_in_declaration_construct_and_block17879 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17881 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dimension_stmt_in_declaration_construct_and_block17910 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17912 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_external_stmt_in_declaration_construct_and_block17941 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17943 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_intrinsic_stmt_in_declaration_construct_and_block17972 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block17974 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_stmt_in_declaration_construct_and_block18004 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18006 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_protected_stmt_in_declaration_construct_and_block18035 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18037 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_save_stmt_in_declaration_construct_and_block18067 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18069 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_target_stmt_in_declaration_construct_and_block18099 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18101 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_volatile_stmt_in_declaration_construct_and_block18131 = new BitSet(new long[]{0x0E07E3D10E4AE990L,0x0200360186090500L,0x986E48109003570CL,0x000000098212403DL});
	public static final BitSet FOLLOW_declaration_construct_and_block_in_declaration_construct_and_block18133 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_block_in_declaration_construct_and_block18141 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_block_stmt18176 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_block_stmt18188 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_BLOCK_in_end_block_stmt18190 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_block_stmt18193 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_block_stmt18206 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_change_team_stmt_in_change_team_construct18239 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_change_team_construct18241 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_change_team_stmt_in_change_team_construct18243 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_change_team_stmt18273 = new BitSet(new long[]{0x0000000000200000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_change_team_stmt18286 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_change_team_stmt18288 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_CHANGE_in_change_team_stmt18294 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_TEAM_in_change_team_stmt18296 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_change_team_stmt18305 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_change_team_stmt18307 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_change_team_stmt18310 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_coarray_association_list_in_change_team_stmt18312 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_change_team_stmt18326 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_sync_stat_list_in_change_team_stmt18328 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_change_team_stmt18335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_codimension_decl_in_coarray_association18364 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_coarray_association18366 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_coarray_association18368 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_coarray_association_in_coarray_association_list18407 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_coarray_association_list18417 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_coarray_association_in_coarray_association_list18419 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_end_change_team_stmt18450 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_change_team_stmt18461 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_TEAM_in_end_change_team_stmt18463 = new BitSet(new long[]{0x0000000000000002L,0x0400000080000000L});
	public static final BitSet FOLLOW_LPAREN_in_end_change_team_stmt18474 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_sync_stat_list_in_end_change_team_stmt18477 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_end_change_team_stmt18483 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_change_team_stmt18496 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_critical_stmt_in_critical_construct18532 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_critical_construct18534 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_critical_stmt_in_critical_construct18536 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_critical_stmt18576 = new BitSet(new long[]{0x0000004000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_critical_stmt18588 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_critical_stmt18590 = new BitSet(new long[]{0x0000004000000000L});
	public static final BitSet FOLLOW_CRITICAL_in_critical_stmt18596 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_critical_stmt18605 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_critical_stmt18645 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_critical_stmt18657 = new BitSet(new long[]{0x0000004000000000L});
	public static final BitSet FOLLOW_CRITICAL_in_end_critical_stmt18659 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_critical_stmt18662 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_critical_stmt18675 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_do_stmt_in_do_construct18705 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x880240009003770CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_do_construct18713 = new BitSet(new long[]{0x0200200000000000L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_end_do_in_do_construct18721 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_do_stmt18762 = new BitSet(new long[]{0x0000800000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_do_stmt18776 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_do_stmt18778 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_DO_in_do_stmt18784 = new BitSet(new long[]{0x2000200240000000L,0x0000000080000000L,0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_DIGIT_STR_in_do_stmt18795 = new BitSet(new long[]{0x2000000240000000L,0x0000000080000000L,0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_loop_control_in_do_stmt18810 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_do_stmt18823 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_loop_control18858 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_loop_control18863 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_loop_control18865 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_loop_control18867 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_loop_control18869 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_loop_control18871 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_loop_control18882 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_loop_control18884 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_loop_control18909 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_WHILE_in_loop_control18914 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_loop_control18916 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_loop_control18918 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_loop_control18920 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_loop_control18941 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_CONCURRENT_in_loop_control18946 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_concurrent_header_in_loop_control18948 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_concurrent_header18981 = new BitSet(new long[]{0x0007000100400000L,0x0200040080000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_intrinsic_type_spec_in_concurrent_header18991 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_concurrent_header18993 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_concurrent_control_list_in_concurrent_header19006 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_concurrent_header19017 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_concurrent_header19019 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_concurrent_header19032 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_concurrent_control19065 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_concurrent_control19067 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_concurrent_control19069 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_concurrent_control19071 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_concurrent_control19073 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_concurrent_control19084 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_concurrent_control19086 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_concurrent_control_in_concurrent_control_list19125 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_concurrent_control_list19135 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_concurrent_control_in_concurrent_control_list19137 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_locality_spec_in_concurrent_locality19173 = new BitSet(new long[]{0x0000040000000002L,0x00C0000000000000L,0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LOCAL_in_locality_spec19197 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_locality_spec19199 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_locality_spec19201 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_locality_spec19203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LOCAL_INT_in_locality_spec19221 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_locality_spec19223 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_locality_spec19225 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_locality_spec19227 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHARED_in_locality_spec19245 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_locality_spec19247 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_locality_spec19249 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_locality_spec19251 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_locality_spec19269 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_locality_spec19271 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000200000L});
	public static final BitSet FOLLOW_NONE_in_locality_spec19273 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_locality_spec19275 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_end_do_stmt_in_end_do19308 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_do_term_action_stmt_in_end_do19316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_do_term_action_stmt19346 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_M_LBL_DO_TERMINAL_in_do_term_action_stmt19350 = new BitSet(new long[]{0x0200229004084100L,0x0000020006010100L,0x880200009002560CL,0x0000000900024001L});
	public static final BitSet FOLLOW_action_stmt_in_do_term_action_stmt19360 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_END_in_do_term_action_stmt19373 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_DO_in_do_term_action_stmt19375 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_do_term_action_stmt19391 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_do_term_action_stmt19416 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_do_stmt19464 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_do_stmt19476 = new BitSet(new long[]{0x0000800000000000L});
	public static final BitSet FOLLOW_DO_in_end_do_stmt19478 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_do_stmt19482 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_do_stmt19496 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_cycle_stmt19536 = new BitSet(new long[]{0x0000008000000000L});
	public static final BitSet FOLLOW_CYCLE_in_cycle_stmt19548 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_cycle_stmt19551 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_cycle_stmt19564 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_if_then_stmt_in_if_construct19601 = new BitSet(new long[]{0x06C0A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_if_construct19603 = new BitSet(new long[]{0x02C0200000000000L});
	public static final BitSet FOLLOW_else_if_stmt_in_if_construct19614 = new BitSet(new long[]{0x06C0A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_if_construct19616 = new BitSet(new long[]{0x02C0200000000000L});
	public static final BitSet FOLLOW_else_stmt_in_if_construct19632 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_if_construct19634 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_if_stmt_in_if_construct19647 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_if_then_stmt19673 = new BitSet(new long[]{0x0000000000000000L,0x0000000180000000L});
	public static final BitSet FOLLOW_IDENT_in_if_then_stmt19688 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_if_then_stmt19690 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_IF_in_if_then_stmt19701 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_if_then_stmt19703 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_if_then_stmt19705 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_if_then_stmt19707 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_THEN_in_if_then_stmt19709 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_if_then_stmt19718 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_else_if_stmt19754 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_ELSE_in_else_if_stmt19766 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_IF_in_else_if_stmt19768 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_else_if_stmt19770 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_else_if_stmt19772 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_else_if_stmt19774 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_THEN_in_else_if_stmt19776 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_else_if_stmt19789 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_else_if_stmt19801 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_else_if_stmt19822 = new BitSet(new long[]{0x0080000000000000L});
	public static final BitSet FOLLOW_ELSEIF_in_else_if_stmt19833 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_else_if_stmt19835 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_else_if_stmt19837 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_else_if_stmt19839 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_THEN_in_else_if_stmt19841 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_else_if_stmt19854 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_else_if_stmt19866 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_else_stmt19902 = new BitSet(new long[]{0x0040000000000000L});
	public static final BitSet FOLLOW_ELSE_in_else_stmt19913 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_else_stmt19919 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_else_stmt19930 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_if_stmt19966 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_if_stmt19977 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_IF_in_end_if_stmt19979 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_if_stmt19985 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_if_stmt19997 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_if_stmt20037 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_M_IF_STMT_in_if_stmt20049 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_IF_in_if_stmt20051 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_if_stmt20053 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_if_stmt20055 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_if_stmt20057 = new BitSet(new long[]{0x0200229004084100L,0x0000020006010100L,0x880200009002560CL,0x0000000900024001L});
	public static final BitSet FOLLOW_action_stmt_in_if_stmt20066 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_case_stmt_in_case_construct20100 = new BitSet(new long[]{0x0200200000100000L});
	public static final BitSet FOLLOW_case_stmt_in_case_construct20104 = new BitSet(new long[]{0x0600A3D0041A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_case_construct20106 = new BitSet(new long[]{0x0200200000100000L});
	public static final BitSet FOLLOW_end_select_stmt_in_case_construct20111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_case_stmt20141 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000018L});
	public static final BitSet FOLLOW_IDENT_in_select_case_stmt20154 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_select_case_stmt20156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000018L});
	public static final BitSet FOLLOW_SELECT_in_select_case_stmt20170 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_CASE_in_select_case_stmt20172 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_SELECTCASE_in_select_case_stmt20184 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_case_stmt20197 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_select_case_stmt20199 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_case_stmt20201 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_select_case_stmt20210 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_case_stmt20254 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_CASE_in_case_stmt20265 = new BitSet(new long[]{0x0000040000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_case_selector_in_case_stmt20267 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_case_stmt20271 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_case_stmt20284 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_select_stmt20324 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_select_stmt20335 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SELECT_in_end_select_stmt20337 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_select_stmt20340 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_select_stmt20353 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_case_selector20385 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_case_value_range_list_in_case_selector20387 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_case_selector20389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_case_selector20407 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_case_value_range20440 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_case_value_in_case_value_range20442 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_case_value_in_case_value_range20450 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_case_value_range_suffix_in_case_value_range20452 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_case_value_range_suffix20473 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_case_value_in_case_value_range_suffix20477 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_case_value_range_in_case_value_range_list20513 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_case_value_range_list20525 = new BitSet(new long[]{0x0000300010810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_case_value_range_in_case_value_range_list20527 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_case_value20551 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_rank_stmt_in_select_rank_construct20572 = new BitSet(new long[]{0x0200200000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_select_rank_case_stmt_in_select_rank_construct20581 = new BitSet(new long[]{0x0600A3D0040A4900L,0x0000020186090100L,0x8A0240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_block_in_select_rank_construct20583 = new BitSet(new long[]{0x0200200000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_end_select_rank_stmt_in_select_rank_construct20593 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_rank_stmt20629 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_stmt20643 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_select_rank_stmt20645 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SELECT_in_select_rank_stmt20655 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_RANK_in_select_rank_stmt20657 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_rank_stmt20659 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_stmt20671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_select_rank_stmt20673 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_selector_in_select_rank_stmt20677 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_rank_stmt20679 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_select_rank_stmt20687 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_rank_stmt20708 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_stmt20723 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_select_rank_stmt20725 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SELECTRANK_in_select_rank_stmt20735 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_rank_stmt20737 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_stmt20749 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_select_rank_stmt20751 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_selector_in_select_rank_stmt20755 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_rank_stmt20757 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_select_rank_stmt20765 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_rank_case_stmt20801 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_RANK_in_select_rank_case_stmt20813 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_rank_case_stmt20815 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_select_rank_case_stmt20817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_rank_case_stmt20819 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_case_stmt20823 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_rank_case_stmt20849 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_RANK_in_select_rank_case_stmt20860 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_rank_case_stmt20862 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_select_rank_case_stmt20864 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_rank_case_stmt20866 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_case_stmt20870 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_rank_case_stmt20895 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0200000000000000L});
	public static final BitSet FOLLOW_RANK_in_select_rank_case_stmt20906 = new BitSet(new long[]{0x0000040000000000L});
	public static final BitSet FOLLOW_DEFAULT_in_select_rank_case_stmt20908 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_select_rank_case_stmt20912 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_select_rank_stmt20956 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_select_rank_stmt20968 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SELECT_in_end_select_rank_stmt20970 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_select_rank_stmt20974 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_select_rank_stmt20988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_select_type_stmt_in_select_type_construct21017 = new BitSet(new long[]{0x0200200002000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_type_guard_stmt_in_select_type_construct21021 = new BitSet(new long[]{0x0600A3D0060A4900L,0x0000020186090100L,0x880240009003570CL,0x0000000902024039L});
	public static final BitSet FOLLOW_block_in_select_type_construct21023 = new BitSet(new long[]{0x0200200002000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_end_select_type_stmt_in_select_type_construct21035 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_type_stmt21072 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_IDENT_in_select_type_stmt21085 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_select_type_stmt21087 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SELECT_in_select_type_stmt21098 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_TYPE_in_select_type_stmt21100 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_type_stmt21102 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_IDENT_in_select_type_stmt21114 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_select_type_stmt21116 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_selector_in_select_type_stmt21120 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_type_stmt21122 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_select_type_stmt21131 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_select_type_stmt21152 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_IDENT_in_select_type_stmt21166 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_select_type_stmt21168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_SELECTTYPE_in_select_type_stmt21179 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_select_type_stmt21181 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_IDENT_in_select_type_stmt21193 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_select_type_stmt21195 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_selector_in_select_type_stmt21199 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_select_type_stmt21201 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_select_type_stmt21210 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_guard_stmt21250 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_TYPE_in_type_guard_stmt21262 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_IS_in_type_guard_stmt21264 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_type_guard_stmt21266 = new BitSet(new long[]{0x0007000100400000L,0x0200040080000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_type_spec_in_type_guard_stmt21268 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_type_guard_stmt21270 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_guard_stmt21280 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_guard_stmt21294 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_guard_stmt21315 = new BitSet(new long[]{0x0000000002000000L});
	public static final BitSet FOLLOW_CLASS_in_type_guard_stmt21326 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_IS_in_type_guard_stmt21328 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_type_guard_stmt21330 = new BitSet(new long[]{0x0007000100400000L,0x0200040080000000L,0x1000000000000000L});
	public static final BitSet FOLLOW_type_spec_in_type_guard_stmt21332 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_type_guard_stmt21334 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_guard_stmt21344 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_guard_stmt21358 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_type_guard_stmt21379 = new BitSet(new long[]{0x0000000002000000L});
	public static final BitSet FOLLOW_CLASS_in_type_guard_stmt21391 = new BitSet(new long[]{0x0000040000000000L});
	public static final BitSet FOLLOW_DEFAULT_in_type_guard_stmt21393 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_type_guard_stmt21404 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_type_guard_stmt21417 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_select_type_stmt21457 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_select_type_stmt21468 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_SELECT_in_end_select_type_stmt21470 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_select_type_stmt21474 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_select_type_stmt21487 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_exit_stmt21527 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
	public static final BitSet FOLLOW_EXIT_in_exit_stmt21539 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_exit_stmt21542 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_exit_stmt21555 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_goto_stmt21595 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_GO_in_goto_stmt21606 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000800000L});
	public static final BitSet FOLLOW_TO_in_goto_stmt21608 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_DIGIT_STR_in_goto_stmt21610 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_goto_stmt21619 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_goto_stmt21640 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_GOTO_in_goto_stmt21651 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_DIGIT_STR_in_goto_stmt21653 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_goto_stmt21662 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_computed_goto_stmt21698 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
	public static final BitSet FOLLOW_GO_in_computed_goto_stmt21709 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000800000L});
	public static final BitSet FOLLOW_TO_in_computed_goto_stmt21711 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_computed_goto_stmt21713 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_list_in_computed_goto_stmt21715 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_computed_goto_stmt21717 = new BitSet(new long[]{0x0000300040810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_COMMA_in_computed_goto_stmt21721 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_computed_goto_stmt21726 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_computed_goto_stmt21735 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_computed_goto_stmt21756 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_GOTO_in_computed_goto_stmt21767 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_computed_goto_stmt21769 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_list_in_computed_goto_stmt21771 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_computed_goto_stmt21773 = new BitSet(new long[]{0x0000300040810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_COMMA_in_computed_goto_stmt21777 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_computed_goto_stmt21782 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_computed_goto_stmt21792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_continue_stmt21828 = new BitSet(new long[]{0x0000001000000000L});
	public static final BitSet FOLLOW_CONTINUE_in_continue_stmt21839 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_continue_stmt21848 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_stop_stmt21889 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_STOP_in_stop_stmt21900 = new BitSet(new long[]{0x2000200040800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_stop_code_in_stop_stmt21903 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_stop_stmt21917 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0100000000000000L});
	public static final BitSet FOLLOW_QUIET_in_stop_stmt21921 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_stop_stmt21923 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_stop_stmt21925 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_stop_stmt21935 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_error_stop_stmt21975 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
	public static final BitSet FOLLOW_ERROR_in_error_stop_stmt21986 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_STOP_in_error_stop_stmt21988 = new BitSet(new long[]{0x2000200040800000L,0x0000000080000000L});
	public static final BitSet FOLLOW_stop_code_in_error_stop_stmt21991 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_error_stop_stmt22004 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0100000000000000L});
	public static final BitSet FOLLOW_QUIET_in_error_stop_stmt22008 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_error_stop_stmt22010 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_error_stop_stmt22012 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_error_stop_stmt22022 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_error_stop_stmt22044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_ERRORSTOP_in_error_stop_stmt22055 = new BitSet(new long[]{0x2000300040810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_error_stop_stmt22058 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_error_stop_stmt22071 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0100000000000000L});
	public static final BitSet FOLLOW_QUIET_in_error_stop_stmt22075 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_error_stop_stmt22077 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_error_stop_stmt22079 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_error_stop_stmt22089 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_constant_in_stop_code22118 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_stop_code22136 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_sync_all_stmt22182 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_SYNC_in_sync_all_stmt22193 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ALL_in_sync_all_stmt22195 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_sync_all_stmt22198 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_sync_all_stmt22200 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sync_all_stmt22211 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_sync_all_stmt22232 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_SYNC_in_sync_all_stmt22243 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ALL_in_sync_all_stmt22245 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_sync_all_stmt22247 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_sync_stat_list_in_sync_all_stmt22249 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_sync_all_stmt22251 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sync_all_stmt22260 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_sync_stat22289 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_sync_stat22291 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_sync_stat22293 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_sync_stat_in_sync_stat_list22328 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_sync_stat_list22339 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_sync_stat_in_sync_stat_list22341 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_sync_images_stmt22376 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_SYNC_in_sync_images_stmt22387 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_IMAGES_in_sync_images_stmt22389 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_sync_images_stmt22391 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_image_set_in_sync_images_stmt22393 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_sync_images_stmt22403 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_sync_stat_list_in_sync_images_stmt22405 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_sync_images_stmt22411 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sync_images_stmt22420 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_image_set22449 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_image_set22459 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_sync_memory_stmt22491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_SYNC_in_sync_memory_stmt22503 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
	public static final BitSet FOLLOW_MEMORY_in_sync_memory_stmt22505 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_sync_memory_stmt22508 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_sync_memory_stmt22510 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sync_memory_stmt22521 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_sync_memory_stmt22542 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000020000L});
	public static final BitSet FOLLOW_SYNC_in_sync_memory_stmt22554 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L});
	public static final BitSet FOLLOW_MEMORY_in_sync_memory_stmt22556 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_sync_memory_stmt22558 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_sync_stat_list_in_sync_memory_stmt22560 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_sync_memory_stmt22562 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_sync_memory_stmt22571 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_io_unit22664 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_io_unit22674 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_file_unit_number22697 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_open_stmt22730 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_OPEN_in_open_stmt22742 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_open_stmt22744 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_connect_spec_list_in_open_stmt22746 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_open_stmt22748 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_open_stmt22757 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_connect_spec22786 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_connect_spec22804 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_connect_spec22806 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_connect_spec22808 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_connect_spec_in_connect_spec_list22843 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_connect_spec_list22853 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_connect_spec_in_connect_spec_list22855 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_close_stmt22896 = new BitSet(new long[]{0x0000000004000000L});
	public static final BitSet FOLLOW_CLOSE_in_close_stmt22907 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_close_stmt22909 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_close_spec_list_in_close_stmt22911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_close_stmt22913 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_close_stmt22922 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_close_spec22952 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_close_spec22970 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_close_spec22972 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_close_spec22974 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_close_spec_in_close_spec_list23005 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_close_spec_list23015 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_close_spec_in_close_spec_list23017 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_read_stmt23092 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L});
	public static final BitSet FOLLOW_READ_in_read_stmt23108 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_read_stmt23110 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_io_control_spec_list_in_read_stmt23112 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_read_stmt23114 = new BitSet(new long[]{0x2000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_input_item_list_in_read_stmt23128 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_read_stmt23144 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_read_stmt23190 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L});
	public static final BitSet FOLLOW_READ_in_read_stmt23206 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_format_in_read_stmt23208 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_read_stmt23223 = new BitSet(new long[]{0x0000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_input_item_list_in_read_stmt23225 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_read_stmt23243 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_write_stmt23287 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_WRITE_in_write_stmt23298 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_write_stmt23300 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_io_control_spec_list_in_write_stmt23302 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_write_stmt23304 = new BitSet(new long[]{0x2000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_output_item_list_in_write_stmt23314 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_write_stmt23327 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_print_stmt23367 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0002000000000000L});
	public static final BitSet FOLLOW_PRINT_in_print_stmt23378 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_format_in_print_stmt23380 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_print_stmt23391 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_output_item_list_in_print_stmt23393 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_print_stmt23406 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_io_control_spec23435 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_io_control_spec23455 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_io_control_spec23475 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_io_control_spec23477 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_io_control_spec23479 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_io_control_spec23500 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_io_control_spec23502 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_io_control_spec23504 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_io_control_spec_in_io_control_spec_list23601 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_io_control_spec_list23611 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_io_control_spec_in_io_control_spec_list23613 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_format23642 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_format23652 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_variable_in_input_item23676 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_io_implied_do_in_input_item23684 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_input_item_in_input_item_list23709 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_input_item_list23719 = new BitSet(new long[]{0x0000200000800000L,0x0400000080000000L});
	public static final BitSet FOLLOW_input_item_in_input_item_list23721 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_expr_in_output_item23756 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_io_implied_do_in_output_item23764 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_output_item_in_output_item_list23789 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_output_item_list23799 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_output_item_in_output_item_list23801 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_LPAREN_in_io_implied_do23825 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_io_implied_do_object_in_io_implied_do23827 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_io_implied_do_suffix_in_io_implied_do23829 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_io_implied_do23831 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_output_item_in_io_implied_do_object23860 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_io_implied_do_suffix23893 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_io_implied_do_object_in_io_implied_do_suffix23895 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_io_implied_do_suffix_in_io_implied_do_suffix23897 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_io_implied_do_suffix23905 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_io_implied_do_control_in_io_implied_do_suffix23907 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_io_implied_do_control23930 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_io_implied_do_control23932 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_io_implied_do_control23934 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_io_implied_do_control23936 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_io_implied_do_control23938 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_io_implied_do_control23949 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_io_implied_do_control23951 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPE_in_dtv_type_spec23985 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_dtv_type_spec23987 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_derived_type_spec_in_dtv_type_spec23989 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_dtv_type_spec23991 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CLASS_in_dtv_type_spec24009 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_dtv_type_spec24011 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_derived_type_spec_in_dtv_type_spec24013 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_dtv_type_spec24015 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_wait_stmt24055 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_WAIT_in_wait_stmt24067 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_wait_stmt24069 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_wait_spec_list_in_wait_stmt24071 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_wait_stmt24073 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_wait_stmt24081 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_wait_spec24110 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_wait_spec24128 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_wait_spec24130 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_wait_spec24132 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_wait_spec_in_wait_spec_list24167 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_wait_spec_list24177 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_wait_spec_in_wait_spec_list24179 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_backspace_stmt24244 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_BACKSPACE_in_backspace_stmt24260 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_backspace_stmt24262 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_position_spec_list_in_backspace_stmt24264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_backspace_stmt24266 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_backspace_stmt24278 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_backspace_stmt24324 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_BACKSPACE_in_backspace_stmt24340 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_file_unit_number_in_backspace_stmt24342 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_backspace_stmt24355 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_endfile_stmt24431 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_endfile_stmt24447 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_FILE_in_endfile_stmt24449 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_endfile_stmt24451 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_position_spec_list_in_endfile_stmt24453 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_endfile_stmt24455 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_endfile_stmt24468 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_endfile_stmt24517 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_endfile_stmt24533 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_FILE_in_endfile_stmt24535 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_file_unit_number_in_endfile_stmt24537 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_endfile_stmt24550 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_rewind_stmt24625 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_REWIND_in_rewind_stmt24641 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_rewind_stmt24643 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_position_spec_list_in_rewind_stmt24645 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_rewind_stmt24647 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_rewind_stmt24660 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_rewind_stmt24706 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_REWIND_in_rewind_stmt24721 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_file_unit_number_in_rewind_stmt24723 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_rewind_stmt24736 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_position_spec24769 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_position_spec24787 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_position_spec24789 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_position_spec24791 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_position_spec_in_position_spec_list24826 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_position_spec_list24837 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_position_spec_in_position_spec_list24839 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_flush_stmt24901 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_FLUSH_in_flush_stmt24917 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_flush_stmt24919 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_flush_spec_list_in_flush_stmt24921 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_flush_stmt24923 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_flush_stmt24936 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_flush_stmt24983 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_FLUSH_in_flush_stmt24997 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_file_unit_number_in_flush_stmt24999 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_flush_stmt25011 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_flush_spec25043 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_flush_spec25061 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_flush_spec25063 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_flush_spec25065 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_flush_spec_in_flush_spec_list25101 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_flush_spec_list25111 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_flush_spec_in_flush_spec_list25113 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_inquire_stmt25148 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_INQUIRE_in_inquire_stmt25159 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_inquire_stmt25161 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_inquire_spec_list_in_inquire_stmt25163 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_inquire_stmt25165 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_inquire_stmt25174 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_inquire_stmt25195 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001000L});
	public static final BitSet FOLLOW_M_INQUIRE_STMT_2_in_inquire_stmt25206 = new BitSet(new long[]{0x0000000000000000L,0x0000020000000000L});
	public static final BitSet FOLLOW_INQUIRE_in_inquire_stmt25208 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_inquire_stmt25210 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_inquire_stmt25219 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_inquire_stmt25223 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_inquire_stmt25225 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_inquire_stmt25234 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_output_item_list_in_inquire_stmt25236 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_inquire_stmt25245 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_inquire_spec25274 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_inquire_spec25292 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_inquire_spec25294 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_inquire_spec25296 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inquire_spec_in_inquire_spec_list25331 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_inquire_spec_list25341 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_inquire_spec_in_inquire_spec_list25343 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_format_stmt25378 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_FORMAT_in_format_stmt25389 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_format_specification_in_format_stmt25391 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_format_stmt25400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_format_specification25434 = new BitSet(new long[]{0x0000200040000000L,0x0400000000000000L,0x0000000000000070L,0x0000000000000002L});
	public static final BitSet FOLLOW_format_item_list_in_format_specification25438 = new BitSet(new long[]{0x0000000040000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_format_specification25452 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_unlimited_format_item_in_format_specification25454 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_format_specification25460 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_M_DATA_EDIT_DESC_in_format_item25494 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_M_CTRL_EDIT_DESC_in_format_item25513 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_M_CSTR_EDIT_DESC_in_format_item25531 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIGIT_STR_in_format_item25550 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_format_item25564 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L,0x0000000000000070L});
	public static final BitSet FOLLOW_format_item_list_in_format_item25566 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_format_item25568 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_format_item_in_format_item_list25605 = new BitSet(new long[]{0x0000200040000002L,0x0400000000000000L,0x0000000000000070L});
	public static final BitSet FOLLOW_COMMA_in_format_item_list25617 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L,0x0000000000000070L});
	public static final BitSet FOLLOW_format_item_in_format_item_list25621 = new BitSet(new long[]{0x0000200040000002L,0x0400000000000000L,0x0000000000000070L});
	public static final BitSet FOLLOW_ASTERISK_in_unlimited_format_item25645 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_unlimited_format_item25647 = new BitSet(new long[]{0x0000200000000000L,0x0400000000000000L,0x0000000000000070L});
	public static final BitSet FOLLOW_format_item_list_in_unlimited_format_item25649 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_unlimited_format_item25651 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_program_stmt_in_main_program25691 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_main_program25699 = new BitSet(new long[]{0x0200A2D4040A4900L,0x0000020186010100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_execution_part_in_main_program25709 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_internal_subprogram_part_in_main_program25724 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_program_stmt_in_main_program25737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_program_stmt25770 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L});
	public static final BitSet FOLLOW_PROGRAM_in_program_stmt25781 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_program_stmt25783 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_program_stmt25792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_program_stmt25832 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_program_stmt25843 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0010000000000000L});
	public static final BitSet FOLLOW_PROGRAM_in_end_program_stmt25845 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_program_stmt25848 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_program_stmt25861 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_program_stmt25882 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_program_stmt25893 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_program_stmt25902 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_module_stmt_in_module25936 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_module25944 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_module_subprogram_part_in_module25954 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_module_stmt_in_module25965 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_module_stmt25995 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_MODULE_in_module_stmt26006 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_module_stmt26010 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_module_stmt26023 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_module_stmt26063 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_module_stmt26074 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_MODULE_in_end_module_stmt26076 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_module_stmt26079 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_module_stmt26091 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_module_stmt26112 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_module_stmt26117 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_module_stmt26126 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contains_stmt_in_module_subprogram_part26163 = new BitSet(new long[]{0x0027200102400002L,0x0200042000400000L,0x3080000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_module_subprogram_in_module_subprogram_part26173 = new BitSet(new long[]{0x0027200102400002L,0x0200042000400000L,0x3080000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_prefix_in_module_subprogram26213 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_subprogram_in_module_subprogram26219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subroutine_subprogram_in_module_subprogram26227 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_separate_module_subprogram_in_module_subprogram26235 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_use_stmt26265 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
	public static final BitSet FOLLOW_USE_in_use_stmt26276 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_use_stmt26280 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_module_nature_in_use_stmt26282 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_use_stmt26288 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_use_stmt26299 = new BitSet(new long[]{0x2000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_use_stmt26302 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_rename_list_in_use_stmt26304 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_use_stmt26317 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_use_stmt26338 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000020000000L});
	public static final BitSet FOLLOW_USE_in_use_stmt26349 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_use_stmt26353 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_module_nature_in_use_stmt26355 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_use_stmt26361 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_use_stmt26372 = new BitSet(new long[]{0x0000000040000000L});
	public static final BitSet FOLLOW_COMMA_in_use_stmt26374 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000040000000L});
	public static final BitSet FOLLOW_ONLY_in_use_stmt26376 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_use_stmt26378 = new BitSet(new long[]{0x2000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_only_list_in_use_stmt26381 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_use_stmt26394 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTRINSIC_in_module_nature26423 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NON_INTRINSIC_in_module_nature26444 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_rename26477 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_rename26479 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_rename26483 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPERATOR_in_rename26503 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_rename26505 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_DEFINED_OP_in_rename26509 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_rename26511 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_rename26520 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_OPERATOR_in_rename26524 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_rename26526 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_DEFINED_OP_in_rename26530 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_rename26532 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rename_in_rename_list26568 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_rename_list26578 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000100000000L});
	public static final BitSet FOLLOW_rename_in_rename_list26580 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_generic_spec_in_only26613 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rename_in_only26622 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_only_in_only_list26649 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_only_list26659 = new BitSet(new long[]{0x0000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_only_in_only_list26661 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_submodule_stmt_in_submodule26693 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_submodule26701 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_module_subprogram_part_in_submodule26711 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_submodule_stmt_in_submodule26724 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_submodule_stmt26754 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
	public static final BitSet FOLLOW_SUBMODULE_in_submodule_stmt26765 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_submodule_stmt26767 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_parent_identifier_in_submodule_stmt26769 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_submodule_stmt26771 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_submodule_stmt26773 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_submodule_stmt26781 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_parent_identifier26812 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_COLON_in_parent_identifier26822 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_parent_identifier26826 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_submodule_stmt26864 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_submodule_stmt26874 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
	public static final BitSet FOLLOW_SUBMODULE_in_end_submodule_stmt26879 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_submodule_stmt26884 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_submodule_stmt26896 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_block_data_stmt_in_block_data26930 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_block_data26938 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_block_data_stmt_in_block_data26946 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_block_data_stmt26976 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_BLOCK_in_block_data_stmt26987 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_DATA_in_block_data_stmt26989 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_block_data_stmt26992 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_block_data_stmt27005 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_block_data_stmt27026 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_BLOCKDATA_in_block_data_stmt27037 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_block_data_stmt27040 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_block_data_stmt27052 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_block_data_stmt27092 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_block_data_stmt27103 = new BitSet(new long[]{0x0000000000020000L});
	public static final BitSet FOLLOW_BLOCK_in_end_block_data_stmt27105 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_DATA_in_end_block_data_stmt27107 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_block_data_stmt27110 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_block_data_stmt27123 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_block_data_stmt27144 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_block_data_stmt27155 = new BitSet(new long[]{0x0000000000040000L});
	public static final BitSet FOLLOW_BLOCKDATA_in_end_block_data_stmt27157 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_block_data_stmt27160 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_block_data_stmt27172 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_block_data_stmt27193 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_block_data_stmt27204 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_block_data_stmt27206 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interface_stmt_in_interface_block27240 = new BitSet(new long[]{0x0227200102400000L,0x0200042000400000L,0x3088000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_interface_specification_in_interface_block27250 = new BitSet(new long[]{0x0227200102400000L,0x0200042000400000L,0x3088000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_end_interface_stmt_in_interface_block27261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interface_body_in_interface_specification27285 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_procedure_stmt_in_interface_specification27293 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_interface_stmt27323 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_INTERFACE_in_interface_stmt27335 = new BitSet(new long[]{0x2000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_generic_spec_in_interface_stmt27338 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_interface_stmt27351 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_interface_stmt27372 = new BitSet(new long[]{0x0000000000000010L});
	public static final BitSet FOLLOW_ABSTRACT_in_interface_stmt27383 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_INTERFACE_in_interface_stmt27385 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_interface_stmt27394 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_interface_stmt27434 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_interface_stmt27445 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_INTERFACE_in_end_interface_stmt27447 = new BitSet(new long[]{0x2000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_generic_spec_in_end_interface_stmt27451 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_interface_stmt27464 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_prefix_in_interface_body27505 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_stmt_in_interface_body27518 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_interface_body27520 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_function_stmt_in_interface_body27529 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subroutine_stmt_in_interface_body27547 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_interface_body27549 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_subroutine_stmt_in_interface_body27558 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_procedure_stmt27598 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000001L});
	public static final BitSet FOLLOW_MODULE_in_procedure_stmt27611 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_procedure_stmt27624 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_procedure_stmt27626 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_procedure_stmt27635 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_generic_spec27664 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPERATOR_in_generic_spec27682 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_generic_spec27684 = new BitSet(new long[]{0x4000100000001200L,0x481A000038800006L,0x0000240404180000L,0x0000000000000700L});
	public static final BitSet FOLLOW_defined_operator_in_generic_spec27686 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_generic_spec27688 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASSIGNMENT_in_generic_spec27706 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_generic_spec27708 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_generic_spec27710 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_generic_spec27712 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_defined_io_generic_spec_in_generic_spec27730 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_READ_in_defined_io_generic_spec27759 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_defined_io_generic_spec27761 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_FORMATTED_in_defined_io_generic_spec27763 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_defined_io_generic_spec27765 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_READ_in_defined_io_generic_spec27783 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_defined_io_generic_spec27785 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000008000000L});
	public static final BitSet FOLLOW_UNFORMATTED_in_defined_io_generic_spec27787 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_defined_io_generic_spec27789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WRITE_in_defined_io_generic_spec27807 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_defined_io_generic_spec27809 = new BitSet(new long[]{0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_FORMATTED_in_defined_io_generic_spec27811 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_defined_io_generic_spec27813 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WRITE_in_defined_io_generic_spec27831 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_defined_io_generic_spec27833 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000008000000L});
	public static final BitSet FOLLOW_UNFORMATTED_in_defined_io_generic_spec27835 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_defined_io_generic_spec27837 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GENERIC_in_generic_stmt27870 = new BitSet(new long[]{0x0000000060000000L});
	public static final BitSet FOLLOW_COMMA_in_generic_stmt27874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044000000000000L});
	public static final BitSet FOLLOW_access_spec_in_generic_stmt27876 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_generic_stmt27888 = new BitSet(new long[]{0x0000000000000400L,0x0000000080000000L,0x0800000100000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_generic_spec_in_generic_stmt27890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_generic_stmt27892 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_generic_stmt27894 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_external_stmt27934 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_EXTERNAL_in_external_stmt27945 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_external_stmt27949 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_external_stmt27954 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_external_stmt27963 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_procedure_declaration_stmt28003 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_procedure_declaration_stmt28014 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_procedure_declaration_stmt28016 = new BitSet(new long[]{0x0007000102400000L,0x0200040080000000L,0x1000000000000000L,0x0000000002000002L});
	public static final BitSet FOLLOW_proc_interface_in_procedure_declaration_stmt28020 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_procedure_declaration_stmt28026 = new BitSet(new long[]{0x0000000060000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COMMA_in_procedure_declaration_stmt28038 = new BitSet(new long[]{0x0000000000008000L,0x0000080000000000L,0x0064080208000000L,0x0000000000000004L});
	public static final BitSet FOLLOW_proc_attr_spec_in_procedure_declaration_stmt28040 = new BitSet(new long[]{0x0000000060000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_procedure_declaration_stmt28046 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_proc_decl_list_in_procedure_declaration_stmt28057 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_procedure_declaration_stmt28066 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_proc_interface28095 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_type_spec_in_proc_interface28105 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_access_spec_in_proc_attr_spec28126 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_language_binding_spec_in_proc_attr_spec28145 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTENT_in_proc_attr_spec28163 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_proc_attr_spec28165 = new BitSet(new long[]{0x0000000000000000L,0x0000014000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_intent_spec_in_proc_attr_spec28167 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_proc_attr_spec28169 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OPTIONAL_in_proc_attr_spec28187 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_POINTER_in_proc_attr_spec28205 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROTECTED_in_proc_attr_spec28223 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SAVE_in_proc_attr_spec28241 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_proc_attr_spec_extension_in_proc_attr_spec28261 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NO_LANG_EXT_in_proc_attr_spec_extension28288 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_proc_decl28311 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_proc_decl28315 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_proc_pointer_init_in_proc_decl28317 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_proc_decl_in_proc_decl_list28357 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_proc_decl_list28367 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_proc_decl_in_proc_decl_list28369 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_null_init_in_proc_pointer_init28396 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_proc_pointer_init28414 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_intrinsic_stmt28454 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_INTRINSIC_in_intrinsic_stmt28465 = new BitSet(new long[]{0x0000000020000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_intrinsic_stmt28468 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_generic_name_list_in_intrinsic_stmt28472 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_intrinsic_stmt28481 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_call_stmt28525 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_CALL_in_call_stmt28536 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_procedure_designator_in_call_stmt28538 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_call_stmt28549 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000002L});
	public static final BitSet FOLLOW_actual_arg_spec_list_in_call_stmt28562 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_call_stmt28568 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_call_stmt28587 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_data_ref_in_procedure_designator28616 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_actual_arg_spec28642 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_actual_arg_spec28644 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_actual_arg_spec28659 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_actual_arg_spec28682 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_label_in_actual_arg_spec28686 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_actual_arg_spec_in_actual_arg_spec_list28733 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_actual_arg_spec_list28743 = new BitSet(new long[]{0x0000300000811000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_actual_arg_spec_in_actual_arg_spec_list28745 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_prefix_spec_in_prefix28777 = new BitSet(new long[]{0x0027000102400002L,0x0200042000000000L,0x3080000001000001L,0x0000000002000000L});
	public static final BitSet FOLLOW_prefix_spec_in_prefix28786 = new BitSet(new long[]{0x0027000102400002L,0x0200042000000000L,0x3080000001000001L,0x0000000002000000L});
	public static final BitSet FOLLOW_declaration_type_spec_in_prefix_spec28809 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELEMENTAL_in_prefix_spec28827 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPURE_in_prefix_spec28845 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MODULE_in_prefix_spec28863 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NON_RECURSIVE_in_prefix_spec28881 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PURE_in_prefix_spec28899 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RECURSIVE_in_prefix_spec28917 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_function_stmt_in_function_subprogram28954 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_function_subprogram28962 = new BitSet(new long[]{0x0200A2D4040A4900L,0x0000020186010100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_execution_part_in_function_subprogram28972 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_internal_subprogram_part_in_function_subprogram28986 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_function_stmt_in_function_subprogram28998 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_function_stmt29039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_FUNCTION_in_function_stmt29050 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_function_stmt29052 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_function_stmt29054 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_generic_name_list_in_function_stmt29065 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_function_stmt29078 = new BitSet(new long[]{0x2000000000008000L,0x0000000000000000L,0x4000000000000000L});
	public static final BitSet FOLLOW_suffix_in_function_stmt29081 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_function_stmt29094 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_language_binding_spec_in_suffix29130 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x4000000000000000L});
	public static final BitSet FOLLOW_RESULT_in_suffix29141 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_suffix29143 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_suffix29145 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_suffix29147 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RESULT_in_suffix29170 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_suffix29172 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_suffix29174 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_suffix29176 = new BitSet(new long[]{0x0000000000008002L});
	public static final BitSet FOLLOW_language_binding_spec_in_suffix29187 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_function_stmt29232 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_function_stmt29243 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_FUNCTION_in_end_function_stmt29245 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_function_stmt29248 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_function_stmt29260 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_function_stmt29281 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_function_stmt29292 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_function_stmt29294 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subroutine_stmt_in_subroutine_subprogram29328 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_subroutine_subprogram29336 = new BitSet(new long[]{0x0200A2D4040A4900L,0x0000020186010100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_execution_part_in_subroutine_subprogram29346 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_internal_subprogram_part_in_subroutine_subprogram29360 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_subroutine_stmt_in_subroutine_subprogram29372 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_subroutine_stmt29412 = new BitSet(new long[]{0x0027000102400000L,0x0200042000000000L,0x3080000001000001L,0x0000000002010000L});
	public static final BitSet FOLLOW_prefix_in_subroutine_stmt29424 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_SUBROUTINE_in_subroutine_stmt29437 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_subroutine_stmt29439 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_subroutine_stmt29450 = new BitSet(new long[]{0x0000000000001000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_dummy_arg_list_in_subroutine_stmt29453 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_subroutine_stmt29468 = new BitSet(new long[]{0x2000000000008000L});
	public static final BitSet FOLLOW_language_binding_spec_in_subroutine_stmt29481 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_subroutine_stmt29503 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_dummy_arg29544 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_dummy_arg29554 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dummy_arg_in_dummy_arg_list29581 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_COMMA_in_dummy_arg_list29591 = new BitSet(new long[]{0x0000000000001000L,0x0000000080000000L});
	public static final BitSet FOLLOW_dummy_arg_in_dummy_arg_list29593 = new BitSet(new long[]{0x0000000040000002L});
	public static final BitSet FOLLOW_label_in_end_subroutine_stmt29628 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_subroutine_stmt29639 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_SUBROUTINE_in_end_subroutine_stmt29641 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_subroutine_stmt29644 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_subroutine_stmt29656 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_subroutine_stmt29677 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_subroutine_stmt29688 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_subroutine_stmt29697 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_mp_subprogram_stmt_in_separate_module_subprogram29734 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_separate_module_subprogram29742 = new BitSet(new long[]{0x0200A2D4040A4900L,0x0000020186010100L,0x880240009003570CL,0x0000000900024039L});
	public static final BitSet FOLLOW_execution_part_in_separate_module_subprogram29752 = new BitSet(new long[]{0x0200200400000000L});
	public static final BitSet FOLLOW_internal_subprogram_part_in_separate_module_subprogram29767 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_mp_subprogram_stmt_in_separate_module_subprogram29780 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_mp_subprogram_stmt29810 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_MODULE_in_mp_subprogram_stmt29821 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_mp_subprogram_stmt29823 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_mp_subprogram_stmt29825 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_mp_subprogram_stmt29834 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_end_mp_subprogram_stmt29874 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_end_mp_subprogram_stmt29885 = new BitSet(new long[]{0x2000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_end_mp_subprogram_stmt29896 = new BitSet(new long[]{0x2000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_end_mp_subprogram_stmt29911 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_end_mp_subprogram_stmt29933 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_entry_stmt29974 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_ENTRY_in_entry_stmt29986 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_entry_stmt29988 = new BitSet(new long[]{0x2000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_entry_stmt29999 = new BitSet(new long[]{0x0000000000001000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_dummy_arg_list_in_entry_stmt30002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_entry_stmt30017 = new BitSet(new long[]{0x2000000000008000L,0x0000000000000000L,0x4000000000000000L});
	public static final BitSet FOLLOW_suffix_in_entry_stmt30020 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_entry_stmt30042 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_return_stmt30083 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x8000000000000000L});
	public static final BitSet FOLLOW_RETURN_in_return_stmt30095 = new BitSet(new long[]{0x2000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_return_stmt30098 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_return_stmt30111 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_contains_stmt30151 = new BitSet(new long[]{0x0000000400000000L});
	public static final BitSet FOLLOW_CONTAINS_in_contains_stmt30162 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_contains_stmt30170 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_stmt_function_stmt30210 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
	public static final BitSet FOLLOW_STMT_FUNCTION_in_stmt_function_stmt30221 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_IDENT_in_stmt_function_stmt30223 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_stmt_function_stmt30225 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_generic_name_list_in_stmt_function_stmt30236 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_stmt_function_stmt30249 = new BitSet(new long[]{0x8000000000000000L});
	public static final BitSet FOLLOW_EQUALS_in_stmt_function_stmt30251 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_stmt_function_stmt30253 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_stmt_function_stmt30262 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EOS_in_end_of_stmt30298 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EOF_in_end_of_stmt30322 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred1_MFortranParser2018191 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_IMPLICIT_in_synpred1_MFortranParser2018195 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred2_MFortranParser2018227 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_PARAMETER_in_synpred2_MFortranParser2018231 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred3_MFortranParser2018261 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_FORMAT_in_synpred3_MFortranParser2018265 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred4_MFortranParser2018301 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_ENTRY_in_synpred4_MFortranParser2018305 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_prefix_in_synpred5_MFortranParser2018763 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_subprogram_in_synpred5_MFortranParser2018768 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_spec_in_synpred6_MFortranParser20186080 = new BitSet(new long[]{0x0000000020000000L});
	public static final BitSet FOLLOW_COLON_COLON_in_synpred6_MFortranParser20186082 = new BitSet(new long[]{0x0000300000810002L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_ac_value_list_in_synpred6_MFortranParser20186091 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_synpred7_MFortranParser20186147 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_synpred8_MFortranParser20188757 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_ASTERISK_in_synpred8_MFortranParser20188760 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_constant_in_synpred8_MFortranParser20188762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_int_literal_constant_in_synpred9_MFortranParser20188774 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_ASTERISK_in_synpred9_MFortranParser20188777 = new BitSet(new long[]{0x0000200000810000L,0x44000000C0002000L,0x0000040020008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_data_stmt_constant_in_synpred9_MFortranParser20188779 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_signed_int_literal_constant_in_synpred10_MFortranParser20188791 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_synpred14_MFortranParser20188823 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_synpred16_MFortranParser20188917 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_char_literal_constant_in_synpred21_MFortranParser20188957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_synpred23_MFortranParser201812492 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred23_MFortranParser201812494 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_synpred24_MFortranParser201812552 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_synpred24_MFortranParser201812554 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENT_in_synpred25_MFortranParser201812633 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred25_MFortranParser201812635 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_object_in_synpred26_MFortranParser201813564 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
	public static final BitSet FOLLOW_LBRACKET_in_synpred26_MFortranParser201813566 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_allocate_object_in_synpred27_MFortranParser201813619 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASTERISK_in_synpred28_MFortranParser201813886 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_synpred29_MFortranParser201813900 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_COLON_in_synpred29_MFortranParser201813902 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_ASTERISK_in_synpred29_MFortranParser201813904 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_or_func_ref_in_synpred30_MFortranParser201814344 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_literal_constant_in_synpred31_MFortranParser201814352 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_array_constructor_in_synpred32_MFortranParser201814360 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structure_constructor_in_synpred33_MFortranParser201814368 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred34_MFortranParser201815583 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_M_PTR_ASSIGNMENT_STMT_in_synpred34_MFortranParser201815595 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_data_ref_in_synpred34_MFortranParser201815597 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_synpred34_MFortranParser201815599 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_synpred34_MFortranParser201815601 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_synpred34_MFortranParser201815609 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred35_MFortranParser201815630 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_M_PTR_ASSIGNMENT_STMT_in_synpred35_MFortranParser201815641 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_data_ref_in_synpred35_MFortranParser201815643 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred35_MFortranParser201815652 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_bounds_spec_list_in_synpred35_MFortranParser201815654 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_synpred35_MFortranParser201815656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
	public static final BitSet FOLLOW_EQ_GT_in_synpred35_MFortranParser201815658 = new BitSet(new long[]{0x0000300000810000L,0x44010000C0002000L,0x0000040024008000L,0x0000000001000000L});
	public static final BitSet FOLLOW_expr_in_synpred35_MFortranParser201815660 = new BitSet(new long[]{0x2000000000000000L});
	public static final BitSet FOLLOW_end_of_stmt_in_synpred35_MFortranParser201815669 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred36_MFortranParser201817463 = new BitSet(new long[]{0x0400000000000000L});
	public static final BitSet FOLLOW_ENTRY_in_synpred36_MFortranParser201817467 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred37_MFortranParser201817494 = new BitSet(new long[]{0x0800000000000000L});
	public static final BitSet FOLLOW_ENUM_in_synpred37_MFortranParser201817498 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred38_MFortranParser201817525 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
	public static final BitSet FOLLOW_FORMAT_in_synpred38_MFortranParser201817529 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred39_MFortranParser201817556 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_INTERFACE_in_synpred39_MFortranParser201817560 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred40_MFortranParser201817587 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000001000000000L});
	public static final BitSet FOLLOW_PARAMETER_in_synpred40_MFortranParser201817591 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred41_MFortranParser201817618 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0008000000000000L});
	public static final BitSet FOLLOW_PROCEDURE_in_synpred41_MFortranParser201817622 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derived_type_stmt_in_synpred42_MFortranParser201817649 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_type_declaration_stmt_in_synpred43_MFortranParser201817675 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred44_MFortranParser201817702 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0044000000000000L});
	public static final BitSet FOLLOW_access_spec_in_synpred44_MFortranParser201817706 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred45_MFortranParser201817733 = new BitSet(new long[]{0x0000000000000080L});
	public static final BitSet FOLLOW_ALLOCATABLE_in_synpred45_MFortranParser201817737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred46_MFortranParser201817765 = new BitSet(new long[]{0x0000000000002000L});
	public static final BitSet FOLLOW_ASYNCHRONOUS_in_synpred46_MFortranParser201817769 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred47_MFortranParser201817797 = new BitSet(new long[]{0x0000000000008000L});
	public static final BitSet FOLLOW_BIND_in_synpred47_MFortranParser201817801 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred48_MFortranParser201817828 = new BitSet(new long[]{0x0000000008000000L});
	public static final BitSet FOLLOW_CODIMENSION_in_synpred48_MFortranParser201817832 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred49_MFortranParser201817859 = new BitSet(new long[]{0x0000010000000000L});
	public static final BitSet FOLLOW_DATA_in_synpred49_MFortranParser201817863 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred50_MFortranParser201817891 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_DIMENSION_in_synpred50_MFortranParser201817895 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred51_MFortranParser201817922 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
	public static final BitSet FOLLOW_EXTERNAL_in_synpred51_MFortranParser201817926 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred52_MFortranParser201817953 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
	public static final BitSet FOLLOW_INTRINSIC_in_synpred52_MFortranParser201817957 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred53_MFortranParser201817984 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_POINTER_in_synpred53_MFortranParser201817988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred54_MFortranParser201818016 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0020000000000000L});
	public static final BitSet FOLLOW_PROTECTED_in_synpred54_MFortranParser201818020 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred55_MFortranParser201818047 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
	public static final BitSet FOLLOW_SAVE_in_synpred55_MFortranParser201818051 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred56_MFortranParser201818079 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000100000L});
	public static final BitSet FOLLOW_TARGET_in_synpred56_MFortranParser201818083 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred57_MFortranParser201818111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000080000000L});
	public static final BitSet FOLLOW_VOLATILE_in_synpred57_MFortranParser201818115 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred58_MFortranParser201823068 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L});
	public static final BitSet FOLLOW_READ_in_synpred58_MFortranParser201823072 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred58_MFortranParser201823074 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred59_MFortranParser201823168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0800000000000000L});
	public static final BitSet FOLLOW_READ_in_synpred59_MFortranParser201823172 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expr_in_synpred60_MFortranParser201823756 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred62_MFortranParser201824220 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_BACKSPACE_in_synpred62_MFortranParser201824224 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred62_MFortranParser201824226 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred63_MFortranParser201824302 = new BitSet(new long[]{0x0000000000004000L});
	public static final BitSet FOLLOW_BACKSPACE_in_synpred63_MFortranParser201824306 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred64_MFortranParser201824405 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_synpred64_MFortranParser201824409 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_FILE_in_synpred64_MFortranParser201824411 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred64_MFortranParser201824413 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred65_MFortranParser201824492 = new BitSet(new long[]{0x0200000000000000L});
	public static final BitSet FOLLOW_END_in_synpred65_MFortranParser201824496 = new BitSet(new long[]{0x0000000000000000L,0x0000000000004000L});
	public static final BitSet FOLLOW_FILE_in_synpred65_MFortranParser201824498 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred66_MFortranParser201824600 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_REWIND_in_synpred66_MFortranParser201824604 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred66_MFortranParser201824606 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred67_MFortranParser201824684 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000001L});
	public static final BitSet FOLLOW_REWIND_in_synpred67_MFortranParser201824688 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred68_MFortranParser201824876 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_FLUSH_in_synpred68_MFortranParser201824880 = new BitSet(new long[]{0x0000000000000000L,0x0400000000000000L});
	public static final BitSet FOLLOW_LPAREN_in_synpred68_MFortranParser201824882 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_label_in_synpred69_MFortranParser201824961 = new BitSet(new long[]{0x0000000000000000L,0x0000000000010000L});
	public static final BitSet FOLLOW_FLUSH_in_synpred69_MFortranParser201824965 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_prefix_in_synpred70_MFortranParser201826213 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_subprogram_in_synpred70_MFortranParser201826219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_subroutine_subprogram_in_synpred71_MFortranParser201826227 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_prefix_in_synpred72_MFortranParser201827505 = new BitSet(new long[]{0x0000200000000000L,0x0000000000400000L});
	public static final BitSet FOLLOW_function_stmt_in_synpred72_MFortranParser201827518 = new BitSet(new long[]{0x0C0761018A40A090L,0x02003C1800080401L,0x106C481200040000L,0x00000000E2102004L});
	public static final BitSet FOLLOW_specification_part_in_synpred72_MFortranParser201827520 = new BitSet(new long[]{0x0200200000000000L});
	public static final BitSet FOLLOW_end_function_stmt_in_synpred72_MFortranParser201827529 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EOF_in_synpred73_MFortranParser201830317 = new BitSet(new long[]{0x0000000000000002L});
}