CivlCParser.java

// $ANTLR 3.5.2 CivlCParser.g 2023-12-13 01:56:12

package dev.civl.abc.front.c.parse;

import java.util.Set;
import java.util.HashSet;
import dev.civl.abc.front.IF.RuntimeParseException;


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

import org.antlr.runtime.tree.*;


@SuppressWarnings("all")
public class CivlCParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "AMPERSAND", "AND", "ANNOTATION_END", 
		"ANNOTATION_START", "ARROW", "ASSIGN", "AT", "BITANDEQ", "BITOR", "BITOREQ", 
		"BITXOR", "BITXOREQ", "BLOCK_COMMENT", "BinaryExponentPart", "CChar", 
		"CHARACTER_CONSTANT", "COLON", "COMMA", "COMMENT", "DEFINE", "DEFINED", 
		"DIV", "DIVEQ", "DOT", "DOTDOT", "DecimalConstant", "DecimalFloatingConstant", 
		"Digit", "ELIF", "ELLIPSIS", "ELSE", "ENDIF", "EQUALS", "EQUIV_ACSL", 
		"ERROR", "EXTENDED_IDENTIFIER", "EscapeSequence", "ExponentPart", "FLOATING_CONSTANT", 
		"FloatingSuffix", "FractionalConstant", "GT", "GTE", "HASH", "HASHHASH", 
		"HexEscape", "HexFractionalConstant", "HexPrefix", "HexQuad", "HexadecimalConstant", 
		"HexadecimalDigit", "HexadecimalFloatingConstant", "IDENTIFIER", "IF", 
		"IFDEF", "IFNDEF", "IMPLIES", "IMPLIES_ACSL", "INCLUDE", "INLINE_ANNOTATION_START", 
		"INLINE_COMMENT", "INTEGER_CONSTANT", "IdentifierNonDigit", "IntegerSuffix", 
		"LCURLY", "LEXCON", "LINE", "LPAREN", "LSLIST", "LSQUARE", "LT", "LTE", 
		"LongLongSuffix", "LongSuffix", "MINUSMINUS", "MOD", "MODEQ", "NEQ", "NEWLINE", 
		"NOT", "NonDigit", "NonZeroDigit", "OR", "OTHER", "OctalConstant", "OctalDigit", 
		"OctalEscape", "PLUS", "PLUSEQ", "PLUSPLUS", "PP_NUMBER", "PRAGMA", "QMARK", 
		"RCURLY", "REXCON", "RPAREN", "RSLIST", "RSQUARE", "SChar", "SEMI", "SHIFTLEFT", 
		"SHIFTLEFTEQ", "SHIFTRIGHT", "SHIFTRIGHTEQ", "STAR", "STAREQ", "STRING_LITERAL", 
		"SUB", "SUBEQ", "TILDE", "UNDEF", "UniversalCharacterName", "UnsignedSuffix", 
		"WS", "XOR_ACSL", "Zero", "ABSTRACT", "ALIGNAS", "ALIGNOF", "ASM", "ASSIGNS", 
		"ATOMIC", "AUTO", "BIG_O", "BODY", "BOOL", "BREAK", "CALLS", "CASE", "CATCH", 
		"CHAR", "CHOOSE", "CIVLATOMIC", "CIVLFOR", "COLLECTIVE", "COMPLEX", "CONST", 
		"CONTIN", "CONTINUE", "DEFAULT", "DEPENDS", "DERIV", "DEVICE", "DIFFERENTIABLE", 
		"DO", "DOMAIN", "DOUBLE", "ENSURES", "ENUM", "EXISTS", "EXPR", "EXTERN", 
		"FATOMIC", "FILE", "FLOAT", "FOR", "FORALL", "GENERIC", "GLOBAL", "GOTO", 
		"GUARD", "HERE", "IMAGINARY", "INLINE", "INPUT", "INT", "INVARIANT", "LAMBDA", 
		"LONG", "MEM_TYPE", "NORETURN", "ORIGINAL", "OUTPUT", "PARAMLIST", "PARFOR", 
		"PELSE", "PIF", "PPRAGMA", "PROCNULL", "PURE", "RANGE", "READS", "REAL", 
		"REGISTER", "REQUIRES", "RESTRICT", "RESULT", "RETURN", "RUN", "SCOPEOF", 
		"SELF", "SEQUENCE", "SHARED", "SHORT", "SIGNED", "SIZEOF", "SPAWN", "STATE_F", 
		"STATE_NULL", "STATIC", "STATICASSERT", "STRUCT", "SWITCH", "SYSTEM", 
		"TEXT_BLOCK", "THREADLOCAL", "TYPEDEF", "TYPEOF", "UNIFORM", "UNION", 
		"UNSIGNED", "UPDATE", "VALUE_AT", "VOID", "VOLATILE", "WHEN", "WHILE", 
		"WITH", "ABSENT", "ABSTRACT_DECLARATOR", "ANNOTATION", "ARGUMENT_LIST", 
		"ARRAY_ELEMENT_DESIGNATOR", "ARRAY_SUFFIX", "BLOCK_ITEM_LIST", "BOUND_VARIABLE_DECLARATION", 
		"BOUND_VARIABLE_DECLARATION_LIST", "BOUND_VARIABLE_NAME_LIST", "BOUND_VARIABLE_RANGE", 
		"BOUND_VARIABLE_RANGE_LIST", "CALL", "CASE_LABELED_STATEMENT", "CAST", 
		"COMPOUND_LITERAL", "COMPOUND_STATEMENT", "CONTRACT", "DECLARATION", "DECLARATION_LIST", 
		"DECLARATION_SPECIFIERS", "DECLARATOR", "DEFAULT_LABELED_STATEMENT", "DERIVATIVE_EXPRESSION", 
		"DESIGNATED_INITIALIZER", "DESIGNATION", "DIRECT_ABSTRACT_DECLARATOR", 
		"DIRECT_DECLARATOR", "ENUMERATION_CONSTANT", "ENUMERATOR", "ENUMERATOR_LIST", 
		"EXPRESSION_STATEMENT", "FIELD_DESIGNATOR", "FUNCTION_DEFINITION", "FUNCTION_SUFFIX", 
		"GENERIC_ASSOCIATION", "GENERIC_ASSOC_LIST", "IDENTIFIER_LABELED_STATEMENT", 
		"IDENTIFIER_LIST", "INDEX", "INITIALIZER_LIST", "INIT_DECLARATOR", "INIT_DECLARATOR_LIST", 
		"INTERVAL", "INTERVAL_SEQ", "LIB_NAME", "OPERATOR", "PARAMETER_DECLARATION", 
		"PARAMETER_LIST", "PARAMETER_TYPE_LIST", "PARENTHESIZED_EXPRESSION", "PARTIAL", 
		"PARTIAL_LIST", "POINTER", "POST_DECREMENT", "POST_INCREMENT", "PRE_DECREMENT", 
		"PRE_INCREMENT", "PROGRAM", "QUANTIFIED", "SCALAR_INITIALIZER", "SPECIFIER_QUALIFIER_LIST", 
		"STATEMENT", "STATEMENT_EXPRESSION", "STRUCT_DECLARATION", "STRUCT_DECLARATION_LIST", 
		"STRUCT_DECLARATOR", "STRUCT_DECLARATOR_LIST", "TOKEN_LIST", "TRANSLATION_UNIT", 
		"TYPE", "TYPEDEF_NAME", "TYPEOF_EXPRESSION", "TYPEOF_TYPE", "TYPE_NAME", 
		"TYPE_QUALIFIER_LIST"
	};
	public static final int EOF=-1;
	public static final int AMPERSAND=4;
	public static final int AND=5;
	public static final int ANNOTATION_END=6;
	public static final int ANNOTATION_START=7;
	public static final int ARROW=8;
	public static final int ASSIGN=9;
	public static final int AT=10;
	public static final int BITANDEQ=11;
	public static final int BITOR=12;
	public static final int BITOREQ=13;
	public static final int BITXOR=14;
	public static final int BITXOREQ=15;
	public static final int BLOCK_COMMENT=16;
	public static final int BinaryExponentPart=17;
	public static final int CChar=18;
	public static final int CHARACTER_CONSTANT=19;
	public static final int COLON=20;
	public static final int COMMA=21;
	public static final int COMMENT=22;
	public static final int DEFINE=23;
	public static final int DEFINED=24;
	public static final int DIV=25;
	public static final int DIVEQ=26;
	public static final int DOT=27;
	public static final int DOTDOT=28;
	public static final int DecimalConstant=29;
	public static final int DecimalFloatingConstant=30;
	public static final int Digit=31;
	public static final int ELIF=32;
	public static final int ELLIPSIS=33;
	public static final int ELSE=34;
	public static final int ENDIF=35;
	public static final int EQUALS=36;
	public static final int EQUIV_ACSL=37;
	public static final int ERROR=38;
	public static final int EXTENDED_IDENTIFIER=39;
	public static final int EscapeSequence=40;
	public static final int ExponentPart=41;
	public static final int FLOATING_CONSTANT=42;
	public static final int FloatingSuffix=43;
	public static final int FractionalConstant=44;
	public static final int GT=45;
	public static final int GTE=46;
	public static final int HASH=47;
	public static final int HASHHASH=48;
	public static final int HexEscape=49;
	public static final int HexFractionalConstant=50;
	public static final int HexPrefix=51;
	public static final int HexQuad=52;
	public static final int HexadecimalConstant=53;
	public static final int HexadecimalDigit=54;
	public static final int HexadecimalFloatingConstant=55;
	public static final int IDENTIFIER=56;
	public static final int IF=57;
	public static final int IFDEF=58;
	public static final int IFNDEF=59;
	public static final int IMPLIES=60;
	public static final int IMPLIES_ACSL=61;
	public static final int INCLUDE=62;
	public static final int INLINE_ANNOTATION_START=63;
	public static final int INLINE_COMMENT=64;
	public static final int INTEGER_CONSTANT=65;
	public static final int IdentifierNonDigit=66;
	public static final int IntegerSuffix=67;
	public static final int LCURLY=68;
	public static final int LEXCON=69;
	public static final int LINE=70;
	public static final int LPAREN=71;
	public static final int LSLIST=72;
	public static final int LSQUARE=73;
	public static final int LT=74;
	public static final int LTE=75;
	public static final int LongLongSuffix=76;
	public static final int LongSuffix=77;
	public static final int MINUSMINUS=78;
	public static final int MOD=79;
	public static final int MODEQ=80;
	public static final int NEQ=81;
	public static final int NEWLINE=82;
	public static final int NOT=83;
	public static final int NonDigit=84;
	public static final int NonZeroDigit=85;
	public static final int OR=86;
	public static final int OTHER=87;
	public static final int OctalConstant=88;
	public static final int OctalDigit=89;
	public static final int OctalEscape=90;
	public static final int PLUS=91;
	public static final int PLUSEQ=92;
	public static final int PLUSPLUS=93;
	public static final int PP_NUMBER=94;
	public static final int PRAGMA=95;
	public static final int QMARK=96;
	public static final int RCURLY=97;
	public static final int REXCON=98;
	public static final int RPAREN=99;
	public static final int RSLIST=100;
	public static final int RSQUARE=101;
	public static final int SChar=102;
	public static final int SEMI=103;
	public static final int SHIFTLEFT=104;
	public static final int SHIFTLEFTEQ=105;
	public static final int SHIFTRIGHT=106;
	public static final int SHIFTRIGHTEQ=107;
	public static final int STAR=108;
	public static final int STAREQ=109;
	public static final int STRING_LITERAL=110;
	public static final int SUB=111;
	public static final int SUBEQ=112;
	public static final int TILDE=113;
	public static final int UNDEF=114;
	public static final int UniversalCharacterName=115;
	public static final int UnsignedSuffix=116;
	public static final int WS=117;
	public static final int XOR_ACSL=118;
	public static final int Zero=119;
	public static final int ABSTRACT=120;
	public static final int ALIGNAS=121;
	public static final int ALIGNOF=122;
	public static final int ASM=123;
	public static final int ASSIGNS=124;
	public static final int ATOMIC=125;
	public static final int AUTO=126;
	public static final int BIG_O=127;
	public static final int BODY=128;
	public static final int BOOL=129;
	public static final int BREAK=130;
	public static final int CALLS=131;
	public static final int CASE=132;
	public static final int CATCH=133;
	public static final int CHAR=134;
	public static final int CHOOSE=135;
	public static final int CIVLATOMIC=136;
	public static final int CIVLFOR=137;
	public static final int COLLECTIVE=138;
	public static final int COMPLEX=139;
	public static final int CONST=140;
	public static final int CONTIN=141;
	public static final int CONTINUE=142;
	public static final int DEFAULT=143;
	public static final int DEPENDS=144;
	public static final int DERIV=145;
	public static final int DEVICE=146;
	public static final int DIFFERENTIABLE=147;
	public static final int DO=148;
	public static final int DOMAIN=149;
	public static final int DOUBLE=150;
	public static final int ENSURES=151;
	public static final int ENUM=152;
	public static final int EXISTS=153;
	public static final int EXPR=154;
	public static final int EXTERN=155;
	public static final int FATOMIC=156;
	public static final int FILE=157;
	public static final int FLOAT=158;
	public static final int FOR=159;
	public static final int FORALL=160;
	public static final int GENERIC=161;
	public static final int GLOBAL=162;
	public static final int GOTO=163;
	public static final int GUARD=164;
	public static final int HERE=165;
	public static final int IMAGINARY=166;
	public static final int INLINE=167;
	public static final int INPUT=168;
	public static final int INT=169;
	public static final int INVARIANT=170;
	public static final int LAMBDA=171;
	public static final int LONG=172;
	public static final int MEM_TYPE=173;
	public static final int NORETURN=174;
	public static final int ORIGINAL=175;
	public static final int OUTPUT=176;
	public static final int PARAMLIST=177;
	public static final int PARFOR=178;
	public static final int PELSE=179;
	public static final int PIF=180;
	public static final int PPRAGMA=181;
	public static final int PROCNULL=182;
	public static final int PURE=183;
	public static final int RANGE=184;
	public static final int READS=185;
	public static final int REAL=186;
	public static final int REGISTER=187;
	public static final int REQUIRES=188;
	public static final int RESTRICT=189;
	public static final int RESULT=190;
	public static final int RETURN=191;
	public static final int RUN=192;
	public static final int SCOPEOF=193;
	public static final int SELF=194;
	public static final int SEQUENCE=195;
	public static final int SHARED=196;
	public static final int SHORT=197;
	public static final int SIGNED=198;
	public static final int SIZEOF=199;
	public static final int SPAWN=200;
	public static final int STATE_F=201;
	public static final int STATE_NULL=202;
	public static final int STATIC=203;
	public static final int STATICASSERT=204;
	public static final int STRUCT=205;
	public static final int SWITCH=206;
	public static final int SYSTEM=207;
	public static final int TEXT_BLOCK=208;
	public static final int THREADLOCAL=209;
	public static final int TYPEDEF=210;
	public static final int TYPEOF=211;
	public static final int UNIFORM=212;
	public static final int UNION=213;
	public static final int UNSIGNED=214;
	public static final int UPDATE=215;
	public static final int VALUE_AT=216;
	public static final int VOID=217;
	public static final int VOLATILE=218;
	public static final int WHEN=219;
	public static final int WHILE=220;
	public static final int WITH=221;
	public static final int ABSENT=222;
	public static final int ABSTRACT_DECLARATOR=223;
	public static final int ANNOTATION=224;
	public static final int ARGUMENT_LIST=225;
	public static final int ARRAY_ELEMENT_DESIGNATOR=226;
	public static final int ARRAY_SUFFIX=227;
	public static final int BLOCK_ITEM_LIST=228;
	public static final int BOUND_VARIABLE_DECLARATION=229;
	public static final int BOUND_VARIABLE_DECLARATION_LIST=230;
	public static final int BOUND_VARIABLE_NAME_LIST=231;
	public static final int BOUND_VARIABLE_RANGE=232;
	public static final int BOUND_VARIABLE_RANGE_LIST=233;
	public static final int CALL=234;
	public static final int CASE_LABELED_STATEMENT=235;
	public static final int CAST=236;
	public static final int COMPOUND_LITERAL=237;
	public static final int COMPOUND_STATEMENT=238;
	public static final int CONTRACT=239;
	public static final int DECLARATION=240;
	public static final int DECLARATION_LIST=241;
	public static final int DECLARATION_SPECIFIERS=242;
	public static final int DECLARATOR=243;
	public static final int DEFAULT_LABELED_STATEMENT=244;
	public static final int DERIVATIVE_EXPRESSION=245;
	public static final int DESIGNATED_INITIALIZER=246;
	public static final int DESIGNATION=247;
	public static final int DIRECT_ABSTRACT_DECLARATOR=248;
	public static final int DIRECT_DECLARATOR=249;
	public static final int ENUMERATION_CONSTANT=250;
	public static final int ENUMERATOR=251;
	public static final int ENUMERATOR_LIST=252;
	public static final int EXPRESSION_STATEMENT=253;
	public static final int FIELD_DESIGNATOR=254;
	public static final int FUNCTION_DEFINITION=255;
	public static final int FUNCTION_SUFFIX=256;
	public static final int GENERIC_ASSOCIATION=257;
	public static final int GENERIC_ASSOC_LIST=258;
	public static final int IDENTIFIER_LABELED_STATEMENT=259;
	public static final int IDENTIFIER_LIST=260;
	public static final int INDEX=261;
	public static final int INITIALIZER_LIST=262;
	public static final int INIT_DECLARATOR=263;
	public static final int INIT_DECLARATOR_LIST=264;
	public static final int INTERVAL=265;
	public static final int INTERVAL_SEQ=266;
	public static final int LIB_NAME=267;
	public static final int OPERATOR=268;
	public static final int PARAMETER_DECLARATION=269;
	public static final int PARAMETER_LIST=270;
	public static final int PARAMETER_TYPE_LIST=271;
	public static final int PARENTHESIZED_EXPRESSION=272;
	public static final int PARTIAL=273;
	public static final int PARTIAL_LIST=274;
	public static final int POINTER=275;
	public static final int POST_DECREMENT=276;
	public static final int POST_INCREMENT=277;
	public static final int PRE_DECREMENT=278;
	public static final int PRE_INCREMENT=279;
	public static final int PROGRAM=280;
	public static final int QUANTIFIED=281;
	public static final int SCALAR_INITIALIZER=282;
	public static final int SPECIFIER_QUALIFIER_LIST=283;
	public static final int STATEMENT=284;
	public static final int STATEMENT_EXPRESSION=285;
	public static final int STRUCT_DECLARATION=286;
	public static final int STRUCT_DECLARATION_LIST=287;
	public static final int STRUCT_DECLARATOR=288;
	public static final int STRUCT_DECLARATOR_LIST=289;
	public static final int TOKEN_LIST=290;
	public static final int TRANSLATION_UNIT=291;
	public static final int TYPE=292;
	public static final int TYPEDEF_NAME=293;
	public static final int TYPEOF_EXPRESSION=294;
	public static final int TYPEOF_TYPE=295;
	public static final int TYPE_NAME=296;
	public static final int TYPE_QUALIFIER_LIST=297;

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

	// delegators

	protected static class Symbols_scope {
		Set<String> types;
		Set<String> enumerationConstants;
		boolean isFunctionDefinition;
	}
	protected Stack<Symbols_scope> Symbols_stack = new Stack<Symbols_scope>();

	protected static class DeclarationScope_scope {
		boolean isTypedef;
		boolean typedefNameUsed;
	}
	protected Stack<DeclarationScope_scope> DeclarationScope_stack = new Stack<DeclarationScope_scope>();


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

	protected TreeAdaptor adaptor = new CommonTreeAdaptor();

	public void setTreeAdaptor(TreeAdaptor adaptor) {
		this.adaptor = adaptor;
	}
	public TreeAdaptor getTreeAdaptor() {
		return adaptor;
	}
	@Override public String[] getTokenNames() { return CivlCParser.tokenNames; }
	@Override public String getGrammarFileName() { return "CivlCParser.g"; }


		public void setSymbols_stack(Stack<ScopeSymbols> symbols){
			this.Symbols_stack = new Stack();
			while(!symbols.isEmpty()){
				ScopeSymbols current = symbols.pop();
				Symbols_scope mySymbols = new Symbols_scope();

				mySymbols.types = current.types;
				mySymbols.enumerationConstants = current.enumerationConstants;
				Symbols_stack.add(mySymbols);
			}
		}

		@Override
		public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
			String hdr = getErrorHeader(e);
			String msg = getErrorMessage(e, tokenNames);

			throw new RuntimeParseException(hdr+" "+msg, e.token);
		}

		@Override
		public void emitErrorMessage(String msg) { // don't try to recover!
		    throw new RuntimeParseException(msg);
		}

	    // Is name the name of a type defined by an earlier typedef?
	    // Look through the symbol stack to find out.
		boolean isTypeName(String name) {
			for (Object scope : Symbols_stack)
				if (((Symbols_scope)scope).types.contains(name)) return true;
			return false;
		}

	    // Looks in the symbol stack to determine whether name is the name
	    // of an enumeration constant.
		boolean isEnumerationConstant(String name) {
			boolean answer = false;

			for (Object scope : Symbols_stack) {
				if (((Symbols_scope)scope).enumerationConstants.contains(name)) {
					answer=true;
					break;
				}
			}
			return answer;
		}


	public static class quantifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "quantifier"
	// CivlCParser.g:198:1: quantifier : ( FORALL | EXISTS | UNIFORM );
	public final CivlCParser.quantifier_return quantifier() throws RecognitionException {
		CivlCParser.quantifier_return retval = new CivlCParser.quantifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set1=null;

		Object set1_tree=null;

		try {
			// CivlCParser.g:199:2: ( FORALL | EXISTS | UNIFORM )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set1=input.LT(1);
			if ( input.LA(1)==EXISTS||input.LA(1)==FORALL||input.LA(1)==UNIFORM ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set1));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "quantifier"


	public static class quantifiedExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "quantifiedExpression"
	// CivlCParser.g:209:1: quantifiedExpression : quantifier intervalSeq LPAREN boundVariableDeclarationList ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq ) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq ) ) ;
	public final CivlCParser.quantifiedExpression_return quantifiedExpression() throws RecognitionException {
		CivlCParser.quantifiedExpression_return retval = new CivlCParser.quantifiedExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LPAREN4=null;
		Token BITOR6=null;
		Token RPAREN7=null;
		Token RPAREN8=null;
		ParserRuleReturnScope restrict =null;
		ParserRuleReturnScope body1 =null;
		ParserRuleReturnScope body2 =null;
		ParserRuleReturnScope quantifier2 =null;
		ParserRuleReturnScope intervalSeq3 =null;
		ParserRuleReturnScope boundVariableDeclarationList5 =null;

		Object LPAREN4_tree=null;
		Object BITOR6_tree=null;
		Object RPAREN7_tree=null;
		Object RPAREN8_tree=null;
		RewriteRuleTokenStream stream_BITOR=new RewriteRuleTokenStream(adaptor,"token BITOR");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_boundVariableDeclarationList=new RewriteRuleSubtreeStream(adaptor,"rule boundVariableDeclarationList");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_conditionalExpression=new RewriteRuleSubtreeStream(adaptor,"rule conditionalExpression");
		RewriteRuleSubtreeStream stream_intervalSeq=new RewriteRuleSubtreeStream(adaptor,"rule intervalSeq");
		RewriteRuleSubtreeStream stream_quantifier=new RewriteRuleSubtreeStream(adaptor,"rule quantifier");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:210:2: ( quantifier intervalSeq LPAREN boundVariableDeclarationList ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq ) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq ) ) )
			// CivlCParser.g:210:4: quantifier intervalSeq LPAREN boundVariableDeclarationList ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq ) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq ) )
			{
			pushFollow(FOLLOW_quantifier_in_quantifiedExpression1140);
			quantifier2=quantifier();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_quantifier.add(quantifier2.getTree());
			pushFollow(FOLLOW_intervalSeq_in_quantifiedExpression1142);
			intervalSeq3=intervalSeq();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_intervalSeq.add(intervalSeq3.getTree());
			LPAREN4=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_quantifiedExpression1144); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN4);

			pushFollow(FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1146);
			boundVariableDeclarationList5=boundVariableDeclarationList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList5.getTree());
			// CivlCParser.g:211:9: ( BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq ) | RPAREN body2= expression -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq ) )
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==BITOR) ) {
				alt2=1;
			}
			else if ( (LA2_0==RPAREN) ) {
				alt2=2;
			}

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

			switch (alt2) {
				case 1 :
					// CivlCParser.g:211:11: BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN body1= expression
					{
					BITOR6=(Token)match(input,BITOR,FOLLOW_BITOR_in_quantifiedExpression1158); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR6);

					// CivlCParser.g:212:13: (restrict= conditionalExpression |restrict= quantifiedExpression )
					int alt1=2;
					int LA1_0 = input.LA(1);
					if ( (LA1_0==AMPERSAND||LA1_0==CHARACTER_CONSTANT||LA1_0==ELLIPSIS||LA1_0==FLOATING_CONSTANT||LA1_0==IDENTIFIER||LA1_0==INTEGER_CONSTANT||LA1_0==LPAREN||LA1_0==MINUSMINUS||LA1_0==NOT||LA1_0==PLUS||LA1_0==PLUSPLUS||LA1_0==STAR||(LA1_0 >= STRING_LITERAL && LA1_0 <= SUB)||LA1_0==TILDE||LA1_0==ALIGNOF||LA1_0==BIG_O||LA1_0==CALLS||LA1_0==DERIV||LA1_0==GENERIC||LA1_0==HERE||LA1_0==PROCNULL||LA1_0==RESULT||(LA1_0 >= SCOPEOF && LA1_0 <= SELF)||(LA1_0 >= SIZEOF && LA1_0 <= SPAWN)||LA1_0==STATE_NULL||LA1_0==VALUE_AT) ) {
						alt1=1;
					}
					else if ( (LA1_0==EXISTS||LA1_0==FORALL||LA1_0==UNIFORM) ) {
						alt1=2;
					}

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

					switch (alt1) {
						case 1 :
							// CivlCParser.g:212:14: restrict= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_quantifiedExpression1175);
							restrict=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(restrict.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:212:47: restrict= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_quantifiedExpression1181);
							restrict=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(restrict.getTree());
							}
							break;

					}

					RPAREN7=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedExpression1196); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN7);

					pushFollow(FOLLOW_expression_in_quantifiedExpression1212);
					body1=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body1.getTree());
					// AST REWRITE
					// elements: boundVariableDeclarationList, quantifier, body1, intervalSeq, restrict
					// token labels: 
					// rule labels: body1, restrict, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_body1=new RewriteRuleSubtreeStream(adaptor,"rule body1",body1!=null?body1.getTree():null);
					RewriteRuleSubtreeStream stream_restrict=new RewriteRuleSubtreeStream(adaptor,"rule restrict",restrict!=null?restrict.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 215:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq )
					{
						// CivlCParser.g:215:16: ^( QUANTIFIED quantifier boundVariableDeclarationList $body1 $restrict intervalSeq )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(QUANTIFIED, "QUANTIFIED"), root_1);
						adaptor.addChild(root_1, stream_quantifier.nextTree());
						adaptor.addChild(root_1, stream_boundVariableDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_body1.nextTree());
						adaptor.addChild(root_1, stream_restrict.nextTree());
						adaptor.addChild(root_1, stream_intervalSeq.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:217:11: RPAREN body2= expression
					{
					RPAREN8=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedExpression1270); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN8);

					pushFollow(FOLLOW_expression_in_quantifiedExpression1286);
					body2=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(body2.getTree());
					// AST REWRITE
					// elements: body2, intervalSeq, boundVariableDeclarationList, quantifier
					// token labels: 
					// rule labels: body2, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_body2=new RewriteRuleSubtreeStream(adaptor,"rule body2",body2!=null?body2.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 219:13: -> ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq )
					{
						// CivlCParser.g:219:16: ^( QUANTIFIED quantifier boundVariableDeclarationList $body2 ABSENT intervalSeq )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(QUANTIFIED, "QUANTIFIED"), root_1);
						adaptor.addChild(root_1, stream_quantifier.nextTree());
						adaptor.addChild(root_1, stream_boundVariableDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_body2.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_intervalSeq.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "quantifiedExpression"


	public static class constant_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "constant"
	// CivlCParser.g:229:1: constant : ( enumerationConstant | INTEGER_CONSTANT | FLOATING_CONSTANT | CHARACTER_CONSTANT | SELF | PROCNULL | STATE_NULL | RESULT | HERE | ELLIPSIS );
	public final CivlCParser.constant_return constant() throws RecognitionException {
		CivlCParser.constant_return retval = new CivlCParser.constant_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token INTEGER_CONSTANT10=null;
		Token FLOATING_CONSTANT11=null;
		Token CHARACTER_CONSTANT12=null;
		Token SELF13=null;
		Token PROCNULL14=null;
		Token STATE_NULL15=null;
		Token RESULT16=null;
		Token HERE17=null;
		Token ELLIPSIS18=null;
		ParserRuleReturnScope enumerationConstant9 =null;

		Object INTEGER_CONSTANT10_tree=null;
		Object FLOATING_CONSTANT11_tree=null;
		Object CHARACTER_CONSTANT12_tree=null;
		Object SELF13_tree=null;
		Object PROCNULL14_tree=null;
		Object STATE_NULL15_tree=null;
		Object RESULT16_tree=null;
		Object HERE17_tree=null;
		Object ELLIPSIS18_tree=null;

		try {
			// CivlCParser.g:230:2: ( enumerationConstant | INTEGER_CONSTANT | FLOATING_CONSTANT | CHARACTER_CONSTANT | SELF | PROCNULL | STATE_NULL | RESULT | HERE | ELLIPSIS )
			int alt3=10;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				alt3=1;
				}
				break;
			case INTEGER_CONSTANT:
				{
				alt3=2;
				}
				break;
			case FLOATING_CONSTANT:
				{
				alt3=3;
				}
				break;
			case CHARACTER_CONSTANT:
				{
				alt3=4;
				}
				break;
			case SELF:
				{
				alt3=5;
				}
				break;
			case PROCNULL:
				{
				alt3=6;
				}
				break;
			case STATE_NULL:
				{
				alt3=7;
				}
				break;
			case RESULT:
				{
				alt3=8;
				}
				break;
			case HERE:
				{
				alt3=9;
				}
				break;
			case ELLIPSIS:
				{
				alt3=10;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 3, 0, input);
				throw nvae;
			}
			switch (alt3) {
				case 1 :
					// CivlCParser.g:230:4: enumerationConstant
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_enumerationConstant_in_constant1354);
					enumerationConstant9=enumerationConstant();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, enumerationConstant9.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:231:4: INTEGER_CONSTANT
					{
					root_0 = (Object)adaptor.nil();


					INTEGER_CONSTANT10=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_constant1359); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					INTEGER_CONSTANT10_tree = (Object)adaptor.create(INTEGER_CONSTANT10);
					adaptor.addChild(root_0, INTEGER_CONSTANT10_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:232:4: FLOATING_CONSTANT
					{
					root_0 = (Object)adaptor.nil();


					FLOATING_CONSTANT11=(Token)match(input,FLOATING_CONSTANT,FOLLOW_FLOATING_CONSTANT_in_constant1364); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					FLOATING_CONSTANT11_tree = (Object)adaptor.create(FLOATING_CONSTANT11);
					adaptor.addChild(root_0, FLOATING_CONSTANT11_tree);
					}

					}
					break;
				case 4 :
					// CivlCParser.g:233:4: CHARACTER_CONSTANT
					{
					root_0 = (Object)adaptor.nil();


					CHARACTER_CONSTANT12=(Token)match(input,CHARACTER_CONSTANT,FOLLOW_CHARACTER_CONSTANT_in_constant1369); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					CHARACTER_CONSTANT12_tree = (Object)adaptor.create(CHARACTER_CONSTANT12);
					adaptor.addChild(root_0, CHARACTER_CONSTANT12_tree);
					}

					}
					break;
				case 5 :
					// CivlCParser.g:234:4: SELF
					{
					root_0 = (Object)adaptor.nil();


					SELF13=(Token)match(input,SELF,FOLLOW_SELF_in_constant1374); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					SELF13_tree = (Object)adaptor.create(SELF13);
					adaptor.addChild(root_0, SELF13_tree);
					}

					}
					break;
				case 6 :
					// CivlCParser.g:235:7: PROCNULL
					{
					root_0 = (Object)adaptor.nil();


					PROCNULL14=(Token)match(input,PROCNULL,FOLLOW_PROCNULL_in_constant1382); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					PROCNULL14_tree = (Object)adaptor.create(PROCNULL14);
					adaptor.addChild(root_0, PROCNULL14_tree);
					}

					}
					break;
				case 7 :
					// CivlCParser.g:236:7: STATE_NULL
					{
					root_0 = (Object)adaptor.nil();


					STATE_NULL15=(Token)match(input,STATE_NULL,FOLLOW_STATE_NULL_in_constant1390); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					STATE_NULL15_tree = (Object)adaptor.create(STATE_NULL15);
					adaptor.addChild(root_0, STATE_NULL15_tree);
					}

					}
					break;
				case 8 :
					// CivlCParser.g:237:4: RESULT
					{
					root_0 = (Object)adaptor.nil();


					RESULT16=(Token)match(input,RESULT,FOLLOW_RESULT_in_constant1395); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RESULT16_tree = (Object)adaptor.create(RESULT16);
					adaptor.addChild(root_0, RESULT16_tree);
					}

					}
					break;
				case 9 :
					// CivlCParser.g:238:4: HERE
					{
					root_0 = (Object)adaptor.nil();


					HERE17=(Token)match(input,HERE,FOLLOW_HERE_in_constant1400); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					HERE17_tree = (Object)adaptor.create(HERE17);
					adaptor.addChild(root_0, HERE17_tree);
					}

					}
					break;
				case 10 :
					// CivlCParser.g:239:7: ELLIPSIS
					{
					root_0 = (Object)adaptor.nil();


					ELLIPSIS18=(Token)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_constant1408); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					ELLIPSIS18_tree = (Object)adaptor.create(ELLIPSIS18);
					adaptor.addChild(root_0, ELLIPSIS18_tree);
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "constant"


	public static class enumerationConstant_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "enumerationConstant"
	// CivlCParser.g:244:1: enumerationConstant :{...}? IDENTIFIER -> ^( ENUMERATION_CONSTANT IDENTIFIER ) ;
	public final CivlCParser.enumerationConstant_return enumerationConstant() throws RecognitionException {
		CivlCParser.enumerationConstant_return retval = new CivlCParser.enumerationConstant_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER19=null;

		Object IDENTIFIER19_tree=null;
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

		try {
			// CivlCParser.g:245:2: ({...}? IDENTIFIER -> ^( ENUMERATION_CONSTANT IDENTIFIER ) )
			// CivlCParser.g:245:4: {...}? IDENTIFIER
			{
			if ( !((isEnumerationConstant(input.LT(1).getText()))) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "enumerationConstant", "isEnumerationConstant(input.LT(1).getText())");
			}
			IDENTIFIER19=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumerationConstant1423); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER19);

			// AST REWRITE
			// elements: IDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 245:63: -> ^( ENUMERATION_CONSTANT IDENTIFIER )
			{
				// CivlCParser.g:246:4: ^( ENUMERATION_CONSTANT IDENTIFIER )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUMERATION_CONSTANT, "ENUMERATION_CONSTANT"), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "enumerationConstant"


	public static class primaryExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "primaryExpression"
	// CivlCParser.g:250:1: primaryExpression : ( constant | IDENTIFIER | STRING_LITERAL | LPAREN compoundStatement RPAREN -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN ) | LPAREN expression RPAREN -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN ) | genericSelection | derivativeExpression );
	public final CivlCParser.primaryExpression_return primaryExpression() throws RecognitionException {
		CivlCParser.primaryExpression_return retval = new CivlCParser.primaryExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER21=null;
		Token STRING_LITERAL22=null;
		Token LPAREN23=null;
		Token RPAREN25=null;
		Token LPAREN26=null;
		Token RPAREN28=null;
		ParserRuleReturnScope constant20 =null;
		ParserRuleReturnScope compoundStatement24 =null;
		ParserRuleReturnScope expression27 =null;
		ParserRuleReturnScope genericSelection29 =null;
		ParserRuleReturnScope derivativeExpression30 =null;

		Object IDENTIFIER21_tree=null;
		Object STRING_LITERAL22_tree=null;
		Object LPAREN23_tree=null;
		Object RPAREN25_tree=null;
		Object LPAREN26_tree=null;
		Object RPAREN28_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_compoundStatement=new RewriteRuleSubtreeStream(adaptor,"rule compoundStatement");

		try {
			// CivlCParser.g:251:2: ( constant | IDENTIFIER | STRING_LITERAL | LPAREN compoundStatement RPAREN -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN ) | LPAREN expression RPAREN -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN ) | genericSelection | derivativeExpression )
			int alt4=7;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA4_1 = input.LA(2);
				if ( ((isEnumerationConstant(input.LT(1).getText()))) ) {
					alt4=1;
				}
				else if ( (true) ) {
					alt4=2;
				}

				}
				break;
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case INTEGER_CONSTANT:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SELF:
			case STATE_NULL:
				{
				alt4=1;
				}
				break;
			case STRING_LITERAL:
				{
				alt4=3;
				}
				break;
			case LPAREN:
				{
				int LA4_4 = input.LA(2);
				if ( (LA4_4==LCURLY) ) {
					alt4=4;
				}
				else if ( (LA4_4==AMPERSAND||LA4_4==CHARACTER_CONSTANT||LA4_4==ELLIPSIS||LA4_4==FLOATING_CONSTANT||LA4_4==IDENTIFIER||LA4_4==INTEGER_CONSTANT||LA4_4==LPAREN||LA4_4==MINUSMINUS||LA4_4==NOT||LA4_4==PLUS||LA4_4==PLUSPLUS||LA4_4==STAR||(LA4_4 >= STRING_LITERAL && LA4_4 <= SUB)||LA4_4==TILDE||LA4_4==ALIGNOF||LA4_4==BIG_O||LA4_4==CALLS||LA4_4==DERIV||LA4_4==EXISTS||(LA4_4 >= FORALL && LA4_4 <= GENERIC)||LA4_4==HERE||LA4_4==PROCNULL||LA4_4==RESULT||(LA4_4 >= SCOPEOF && LA4_4 <= SELF)||(LA4_4 >= SIZEOF && LA4_4 <= SPAWN)||LA4_4==STATE_NULL||LA4_4==UNIFORM||LA4_4==VALUE_AT) ) {
					alt4=5;
				}

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

				}
				break;
			case GENERIC:
				{
				alt4=6;
				}
				break;
			case DERIV:
				{
				alt4=7;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 4, 0, input);
				throw nvae;
			}
			switch (alt4) {
				case 1 :
					// CivlCParser.g:251:4: constant
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_constant_in_primaryExpression1447);
					constant20=constant();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, constant20.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:252:4: IDENTIFIER
					{
					root_0 = (Object)adaptor.nil();


					IDENTIFIER21=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primaryExpression1452); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					IDENTIFIER21_tree = (Object)adaptor.create(IDENTIFIER21);
					adaptor.addChild(root_0, IDENTIFIER21_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:253:4: STRING_LITERAL
					{
					root_0 = (Object)adaptor.nil();


					STRING_LITERAL22=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_primaryExpression1457); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					STRING_LITERAL22_tree = (Object)adaptor.create(STRING_LITERAL22);
					adaptor.addChild(root_0, STRING_LITERAL22_tree);
					}

					}
					break;
				case 4 :
					// CivlCParser.g:254:7: LPAREN compoundStatement RPAREN
					{
					LPAREN23=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_primaryExpression1465); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN23);

					pushFollow(FOLLOW_compoundStatement_in_primaryExpression1467);
					compoundStatement24=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement24.getTree());
					RPAREN25=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_primaryExpression1469); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN25);

					// AST REWRITE
					// elements: RPAREN, compoundStatement, LPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 255:9: -> ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN )
					{
						// CivlCParser.g:255:12: ^( STATEMENT_EXPRESSION LPAREN compoundStatement RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT_EXPRESSION, "STATEMENT_EXPRESSION"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_compoundStatement.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// CivlCParser.g:256:4: LPAREN expression RPAREN
					{
					LPAREN26=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_primaryExpression1494); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN26);

					pushFollow(FOLLOW_expression_in_primaryExpression1496);
					expression27=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression27.getTree());
					RPAREN28=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_primaryExpression1498); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN28);

					// AST REWRITE
					// elements: expression, LPAREN, RPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 257:9: -> ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN )
					{
						// CivlCParser.g:257:12: ^( PARENTHESIZED_EXPRESSION LPAREN expression RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARENTHESIZED_EXPRESSION, "PARENTHESIZED_EXPRESSION"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// CivlCParser.g:258:4: genericSelection
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_genericSelection_in_primaryExpression1523);
					genericSelection29=genericSelection();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, genericSelection29.getTree());

					}
					break;
				case 7 :
					// CivlCParser.g:259:4: derivativeExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_derivativeExpression_in_primaryExpression1528);
					derivativeExpression30=derivativeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, derivativeExpression30.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "primaryExpression"


	public static class genericSelection_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "genericSelection"
	// CivlCParser.g:263:1: genericSelection : GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN -> ^( GENERIC assignmentExpression genericAssocList ) ;
	public final CivlCParser.genericSelection_return genericSelection() throws RecognitionException {
		CivlCParser.genericSelection_return retval = new CivlCParser.genericSelection_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token GENERIC31=null;
		Token LPAREN32=null;
		Token COMMA34=null;
		Token RPAREN36=null;
		ParserRuleReturnScope assignmentExpression33 =null;
		ParserRuleReturnScope genericAssocList35 =null;

		Object GENERIC31_tree=null;
		Object LPAREN32_tree=null;
		Object COMMA34_tree=null;
		Object RPAREN36_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_GENERIC=new RewriteRuleTokenStream(adaptor,"token GENERIC");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_genericAssocList=new RewriteRuleSubtreeStream(adaptor,"rule genericAssocList");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");

		try {
			// CivlCParser.g:264:2: ( GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN -> ^( GENERIC assignmentExpression genericAssocList ) )
			// CivlCParser.g:264:4: GENERIC LPAREN assignmentExpression COMMA genericAssocList RPAREN
			{
			GENERIC31=(Token)match(input,GENERIC,FOLLOW_GENERIC_in_genericSelection1541); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_GENERIC.add(GENERIC31);

			LPAREN32=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_genericSelection1543); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN32);

			pushFollow(FOLLOW_assignmentExpression_in_genericSelection1545);
			assignmentExpression33=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression33.getTree());
			COMMA34=(Token)match(input,COMMA,FOLLOW_COMMA_in_genericSelection1547); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA34);

			pushFollow(FOLLOW_genericAssocList_in_genericSelection1549);
			genericAssocList35=genericAssocList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_genericAssocList.add(genericAssocList35.getTree());
			RPAREN36=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_genericSelection1551); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN36);

			// AST REWRITE
			// elements: GENERIC, genericAssocList, assignmentExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 265:9: -> ^( GENERIC assignmentExpression genericAssocList )
			{
				// CivlCParser.g:265:12: ^( GENERIC assignmentExpression genericAssocList )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_GENERIC.nextNode(), root_1);
				adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
				adaptor.addChild(root_1, stream_genericAssocList.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "genericSelection"


	public static class derivativeExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "derivativeExpression"
	// CivlCParser.g:271:1: derivativeExpression : DERIV LSQUARE IDENTIFIER COMMA partialList RSQUARE LPAREN argumentExpressionList RPAREN -> ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN ) ;
	public final CivlCParser.derivativeExpression_return derivativeExpression() throws RecognitionException {
		CivlCParser.derivativeExpression_return retval = new CivlCParser.derivativeExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DERIV37=null;
		Token LSQUARE38=null;
		Token IDENTIFIER39=null;
		Token COMMA40=null;
		Token RSQUARE42=null;
		Token LPAREN43=null;
		Token RPAREN45=null;
		ParserRuleReturnScope partialList41 =null;
		ParserRuleReturnScope argumentExpressionList44 =null;

		Object DERIV37_tree=null;
		Object LSQUARE38_tree=null;
		Object IDENTIFIER39_tree=null;
		Object COMMA40_tree=null;
		Object RSQUARE42_tree=null;
		Object LPAREN43_tree=null;
		Object RPAREN45_tree=null;
		RewriteRuleTokenStream stream_DERIV=new RewriteRuleTokenStream(adaptor,"token DERIV");
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_partialList=new RewriteRuleSubtreeStream(adaptor,"rule partialList");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");

		try {
			// CivlCParser.g:272:2: ( DERIV LSQUARE IDENTIFIER COMMA partialList RSQUARE LPAREN argumentExpressionList RPAREN -> ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN ) )
			// CivlCParser.g:272:4: DERIV LSQUARE IDENTIFIER COMMA partialList RSQUARE LPAREN argumentExpressionList RPAREN
			{
			DERIV37=(Token)match(input,DERIV,FOLLOW_DERIV_in_derivativeExpression1582); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DERIV.add(DERIV37);

			LSQUARE38=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_derivativeExpression1584); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE38);

			IDENTIFIER39=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_derivativeExpression1586); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER39);

			COMMA40=(Token)match(input,COMMA,FOLLOW_COMMA_in_derivativeExpression1588); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA40);

			pushFollow(FOLLOW_partialList_in_derivativeExpression1590);
			partialList41=partialList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_partialList.add(partialList41.getTree());
			RSQUARE42=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_derivativeExpression1592); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE42);

			LPAREN43=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_derivativeExpression1602); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN43);

			pushFollow(FOLLOW_argumentExpressionList_in_derivativeExpression1604);
			argumentExpressionList44=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList44.getTree());
			RPAREN45=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_derivativeExpression1606); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN45);

			// AST REWRITE
			// elements: IDENTIFIER, argumentExpressionList, RPAREN, partialList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 274:9: -> ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN )
			{
				// CivlCParser.g:274:12: ^( DERIVATIVE_EXPRESSION IDENTIFIER partialList argumentExpressionList RPAREN )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DERIVATIVE_EXPRESSION, "DERIVATIVE_EXPRESSION"), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_1, stream_partialList.nextTree());
				adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
				adaptor.addChild(root_1, stream_RPAREN.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "derivativeExpression"


	public static class partialList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "partialList"
	// CivlCParser.g:280:1: partialList : partial ( COMMA partial )* -> ^( PARTIAL_LIST ( partial )+ ) ;
	public final CivlCParser.partialList_return partialList() throws RecognitionException {
		CivlCParser.partialList_return retval = new CivlCParser.partialList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA47=null;
		ParserRuleReturnScope partial46 =null;
		ParserRuleReturnScope partial48 =null;

		Object COMMA47_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_partial=new RewriteRuleSubtreeStream(adaptor,"rule partial");

		try {
			// CivlCParser.g:281:2: ( partial ( COMMA partial )* -> ^( PARTIAL_LIST ( partial )+ ) )
			// CivlCParser.g:281:4: partial ( COMMA partial )*
			{
			pushFollow(FOLLOW_partial_in_partialList1653);
			partial46=partial();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_partial.add(partial46.getTree());
			// CivlCParser.g:281:12: ( COMMA partial )*
			loop5:
			while (true) {
				int alt5=2;
				int LA5_0 = input.LA(1);
				if ( (LA5_0==COMMA) ) {
					alt5=1;
				}

				switch (alt5) {
				case 1 :
					// CivlCParser.g:281:13: COMMA partial
					{
					COMMA47=(Token)match(input,COMMA,FOLLOW_COMMA_in_partialList1656); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA47);

					pushFollow(FOLLOW_partial_in_partialList1658);
					partial48=partial();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_partial.add(partial48.getTree());
					}
					break;

				default :
					break loop5;
				}
			}

			// AST REWRITE
			// elements: partial
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 281:29: -> ^( PARTIAL_LIST ( partial )+ )
			{
				// CivlCParser.g:281:32: ^( PARTIAL_LIST ( partial )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARTIAL_LIST, "PARTIAL_LIST"), root_1);
				if ( !(stream_partial.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_partial.hasNext() ) {
					adaptor.addChild(root_1, stream_partial.nextTree());
				}
				stream_partial.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "partialList"


	public static class partial_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "partial"
	// CivlCParser.g:285:1: partial : LCURLY IDENTIFIER COMMA INTEGER_CONSTANT RCURLY -> ^( PARTIAL IDENTIFIER INTEGER_CONSTANT ) ;
	public final CivlCParser.partial_return partial() throws RecognitionException {
		CivlCParser.partial_return retval = new CivlCParser.partial_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LCURLY49=null;
		Token IDENTIFIER50=null;
		Token COMMA51=null;
		Token INTEGER_CONSTANT52=null;
		Token RCURLY53=null;

		Object LCURLY49_tree=null;
		Object IDENTIFIER50_tree=null;
		Object COMMA51_tree=null;
		Object INTEGER_CONSTANT52_tree=null;
		Object RCURLY53_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_INTEGER_CONSTANT=new RewriteRuleTokenStream(adaptor,"token INTEGER_CONSTANT");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");

		try {
			// CivlCParser.g:286:2: ( LCURLY IDENTIFIER COMMA INTEGER_CONSTANT RCURLY -> ^( PARTIAL IDENTIFIER INTEGER_CONSTANT ) )
			// CivlCParser.g:286:4: LCURLY IDENTIFIER COMMA INTEGER_CONSTANT RCURLY
			{
			LCURLY49=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_partial1682); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY49);

			IDENTIFIER50=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_partial1684); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER50);

			COMMA51=(Token)match(input,COMMA,FOLLOW_COMMA_in_partial1686); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA51);

			INTEGER_CONSTANT52=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_partial1688); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_INTEGER_CONSTANT.add(INTEGER_CONSTANT52);

			RCURLY53=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_partial1690); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY53);

			// AST REWRITE
			// elements: IDENTIFIER, INTEGER_CONSTANT
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 287:9: -> ^( PARTIAL IDENTIFIER INTEGER_CONSTANT )
			{
				// CivlCParser.g:287:12: ^( PARTIAL IDENTIFIER INTEGER_CONSTANT )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARTIAL, "PARTIAL"), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_1, stream_INTEGER_CONSTANT.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "partial"


	public static class genericAssocList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "genericAssocList"
	// CivlCParser.g:291:1: genericAssocList : genericAssociation ( COMMA genericAssociation )* -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ ) ;
	public final CivlCParser.genericAssocList_return genericAssocList() throws RecognitionException {
		CivlCParser.genericAssocList_return retval = new CivlCParser.genericAssocList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA55=null;
		ParserRuleReturnScope genericAssociation54 =null;
		ParserRuleReturnScope genericAssociation56 =null;

		Object COMMA55_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_genericAssociation=new RewriteRuleSubtreeStream(adaptor,"rule genericAssociation");

		try {
			// CivlCParser.g:292:2: ( genericAssociation ( COMMA genericAssociation )* -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ ) )
			// CivlCParser.g:292:4: genericAssociation ( COMMA genericAssociation )*
			{
			pushFollow(FOLLOW_genericAssociation_in_genericAssocList1721);
			genericAssociation54=genericAssociation();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_genericAssociation.add(genericAssociation54.getTree());
			// CivlCParser.g:292:23: ( COMMA genericAssociation )*
			loop6:
			while (true) {
				int alt6=2;
				int LA6_0 = input.LA(1);
				if ( (LA6_0==COMMA) ) {
					alt6=1;
				}

				switch (alt6) {
				case 1 :
					// CivlCParser.g:292:24: COMMA genericAssociation
					{
					COMMA55=(Token)match(input,COMMA,FOLLOW_COMMA_in_genericAssocList1724); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA55);

					pushFollow(FOLLOW_genericAssociation_in_genericAssocList1726);
					genericAssociation56=genericAssociation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_genericAssociation.add(genericAssociation56.getTree());
					}
					break;

				default :
					break loop6;
				}
			}

			// AST REWRITE
			// elements: genericAssociation
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 293:9: -> ^( GENERIC_ASSOC_LIST ( genericAssociation )+ )
			{
				// CivlCParser.g:293:12: ^( GENERIC_ASSOC_LIST ( genericAssociation )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(GENERIC_ASSOC_LIST, "GENERIC_ASSOC_LIST"), root_1);
				if ( !(stream_genericAssociation.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_genericAssociation.hasNext() ) {
					adaptor.addChild(root_1, stream_genericAssociation.nextTree());
				}
				stream_genericAssociation.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "genericAssocList"


	public static class genericAssociation_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "genericAssociation"
	// CivlCParser.g:297:1: genericAssociation : ( typeName COLON assignmentExpression -> ^( GENERIC_ASSOCIATION typeName assignmentExpression ) | DEFAULT COLON assignmentExpression -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression ) );
	public final CivlCParser.genericAssociation_return genericAssociation() throws RecognitionException {
		CivlCParser.genericAssociation_return retval = new CivlCParser.genericAssociation_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COLON58=null;
		Token DEFAULT60=null;
		Token COLON61=null;
		ParserRuleReturnScope typeName57 =null;
		ParserRuleReturnScope assignmentExpression59 =null;
		ParserRuleReturnScope assignmentExpression62 =null;

		Object COLON58_tree=null;
		Object DEFAULT60_tree=null;
		Object COLON61_tree=null;
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_DEFAULT=new RewriteRuleTokenStream(adaptor,"token DEFAULT");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");

		try {
			// CivlCParser.g:298:2: ( typeName COLON assignmentExpression -> ^( GENERIC_ASSOCIATION typeName assignmentExpression ) | DEFAULT COLON assignmentExpression -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression ) )
			int alt7=2;
			int LA7_0 = input.LA(1);
			if ( (LA7_0==IDENTIFIER||LA7_0==ATOMIC||LA7_0==BOOL||LA7_0==CHAR||(LA7_0 >= COMPLEX && LA7_0 <= CONST)||(LA7_0 >= DOMAIN && LA7_0 <= DOUBLE)||LA7_0==ENUM||LA7_0==FLOAT||(LA7_0 >= INPUT && LA7_0 <= INT)||(LA7_0 >= LONG && LA7_0 <= MEM_TYPE)||LA7_0==OUTPUT||LA7_0==RANGE||LA7_0==REAL||LA7_0==RESTRICT||(LA7_0 >= SHORT && LA7_0 <= SIGNED)||LA7_0==STRUCT||LA7_0==TYPEOF||(LA7_0 >= UNION && LA7_0 <= UNSIGNED)||(LA7_0 >= VOID && LA7_0 <= VOLATILE)) ) {
				alt7=1;
			}
			else if ( (LA7_0==DEFAULT) ) {
				alt7=2;
			}

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

			switch (alt7) {
				case 1 :
					// CivlCParser.g:298:4: typeName COLON assignmentExpression
					{
					pushFollow(FOLLOW_typeName_in_genericAssociation1758);
					typeName57=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName57.getTree());
					COLON58=(Token)match(input,COLON,FOLLOW_COLON_in_genericAssociation1760); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON58);

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1762);
					assignmentExpression59=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression59.getTree());
					// AST REWRITE
					// elements: assignmentExpression, typeName
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 299:9: -> ^( GENERIC_ASSOCIATION typeName assignmentExpression )
					{
						// CivlCParser.g:299:12: ^( GENERIC_ASSOCIATION typeName assignmentExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(GENERIC_ASSOCIATION, "GENERIC_ASSOCIATION"), root_1);
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:300:4: DEFAULT COLON assignmentExpression
					{
					DEFAULT60=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_genericAssociation1785); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT60);

					COLON61=(Token)match(input,COLON,FOLLOW_COLON_in_genericAssociation1787); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON61);

					pushFollow(FOLLOW_assignmentExpression_in_genericAssociation1789);
					assignmentExpression62=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression62.getTree());
					// AST REWRITE
					// elements: DEFAULT, assignmentExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 301:9: -> ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression )
					{
						// CivlCParser.g:301:12: ^( GENERIC_ASSOCIATION DEFAULT assignmentExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(GENERIC_ASSOCIATION, "GENERIC_ASSOCIATION"), root_1);
						adaptor.addChild(root_1, stream_DEFAULT.nextNode());
						adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "genericAssociation"


	public static class postfixExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "postfixExpression"
	// CivlCParser.g:305:1: postfixExpression : ( postfixExpressionRoot -> postfixExpressionRoot ) (l= LSQUARE expression RSQUARE -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE ) | LPAREN argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT ) | LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT ) | DOT IDENTIFIER -> ^( DOT $postfixExpression IDENTIFIER ) | ARROW IDENTIFIER -> ^( ARROW $postfixExpression IDENTIFIER ) |p= PLUSPLUS -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) ) |m= MINUSMINUS -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) ) )* ;
	public final CivlCParser.postfixExpression_return postfixExpression() throws RecognitionException {
		CivlCParser.postfixExpression_return retval = new CivlCParser.postfixExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token l=null;
		Token p=null;
		Token m=null;
		Token RSQUARE65=null;
		Token LPAREN66=null;
		Token RPAREN68=null;
		Token LEXCON69=null;
		Token REXCON70=null;
		Token LPAREN71=null;
		Token RPAREN72=null;
		Token DOT73=null;
		Token IDENTIFIER74=null;
		Token ARROW75=null;
		Token IDENTIFIER76=null;
		ParserRuleReturnScope args1 =null;
		ParserRuleReturnScope args2 =null;
		ParserRuleReturnScope postfixExpressionRoot63 =null;
		ParserRuleReturnScope expression64 =null;
		ParserRuleReturnScope argumentExpressionList67 =null;

		Object l_tree=null;
		Object p_tree=null;
		Object m_tree=null;
		Object RSQUARE65_tree=null;
		Object LPAREN66_tree=null;
		Object RPAREN68_tree=null;
		Object LEXCON69_tree=null;
		Object REXCON70_tree=null;
		Object LPAREN71_tree=null;
		Object RPAREN72_tree=null;
		Object DOT73_tree=null;
		Object IDENTIFIER74_tree=null;
		Object ARROW75_tree=null;
		Object IDENTIFIER76_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_ARROW=new RewriteRuleTokenStream(adaptor,"token ARROW");
		RewriteRuleTokenStream stream_LEXCON=new RewriteRuleTokenStream(adaptor,"token LEXCON");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
		RewriteRuleTokenStream stream_MINUSMINUS=new RewriteRuleTokenStream(adaptor,"token MINUSMINUS");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_PLUSPLUS=new RewriteRuleTokenStream(adaptor,"token PLUSPLUS");
		RewriteRuleTokenStream stream_REXCON=new RewriteRuleTokenStream(adaptor,"token REXCON");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");
		RewriteRuleSubtreeStream stream_postfixExpressionRoot=new RewriteRuleSubtreeStream(adaptor,"rule postfixExpressionRoot");

		try {
			// CivlCParser.g:306:2: ( ( postfixExpressionRoot -> postfixExpressionRoot ) (l= LSQUARE expression RSQUARE -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE ) | LPAREN argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT ) | LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT ) | DOT IDENTIFIER -> ^( DOT $postfixExpression IDENTIFIER ) | ARROW IDENTIFIER -> ^( ARROW $postfixExpression IDENTIFIER ) |p= PLUSPLUS -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) ) |m= MINUSMINUS -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) ) )* )
			// CivlCParser.g:306:4: ( postfixExpressionRoot -> postfixExpressionRoot ) (l= LSQUARE expression RSQUARE -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE ) | LPAREN argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT ) | LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT ) | DOT IDENTIFIER -> ^( DOT $postfixExpression IDENTIFIER ) | ARROW IDENTIFIER -> ^( ARROW $postfixExpression IDENTIFIER ) |p= PLUSPLUS -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) ) |m= MINUSMINUS -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) ) )*
			{
			// CivlCParser.g:306:4: ( postfixExpressionRoot -> postfixExpressionRoot )
			// CivlCParser.g:306:5: postfixExpressionRoot
			{
			pushFollow(FOLLOW_postfixExpressionRoot_in_postfixExpression1821);
			postfixExpressionRoot63=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot63.getTree());
			// AST REWRITE
			// elements: postfixExpressionRoot
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 306:27: -> postfixExpressionRoot
			{
				adaptor.addChild(root_0, stream_postfixExpressionRoot.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:307:9: (l= LSQUARE expression RSQUARE -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE ) | LPAREN argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT ) | LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT ) | DOT IDENTIFIER -> ^( DOT $postfixExpression IDENTIFIER ) | ARROW IDENTIFIER -> ^( ARROW $postfixExpression IDENTIFIER ) |p= PLUSPLUS -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) ) |m= MINUSMINUS -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) ) )*
			loop8:
			while (true) {
				int alt8=8;
				switch ( input.LA(1) ) {
				case LSQUARE:
					{
					alt8=1;
					}
					break;
				case LPAREN:
					{
					alt8=2;
					}
					break;
				case LEXCON:
					{
					alt8=3;
					}
					break;
				case DOT:
					{
					alt8=4;
					}
					break;
				case ARROW:
					{
					alt8=5;
					}
					break;
				case PLUSPLUS:
					{
					alt8=6;
					}
					break;
				case MINUSMINUS:
					{
					alt8=7;
					}
					break;
				}
				switch (alt8) {
				case 1 :
					// CivlCParser.g:308:13: l= LSQUARE expression RSQUARE
					{
					l=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_postfixExpression1853); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(l);

					pushFollow(FOLLOW_expression_in_postfixExpression1855);
					expression64=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression64.getTree());
					RSQUARE65=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_postfixExpression1857); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE65);

					// AST REWRITE
					// elements: RSQUARE, expression, postfixExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 309:13: -> ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE )
					{
						// CivlCParser.g:309:16: ^( OPERATOR INDEX[$l] ^( ARGUMENT_LIST $postfixExpression expression ) RSQUARE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(INDEX, l));
						// CivlCParser.g:311:17: ^( ARGUMENT_LIST $postfixExpression expression )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_expression.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_RSQUARE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:314:13: LPAREN argumentExpressionList RPAREN
					{
					LPAREN66=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpression1962); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN66);

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression1964);
					argumentExpressionList67=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList67.getTree());
					RPAREN68=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_postfixExpression1966); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN68);

					// AST REWRITE
					// elements: argumentExpressionList, LPAREN, RPAREN, postfixExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 315:13: -> ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT )
					{
						// CivlCParser.g:315:16: ^( CALL LPAREN $postfixExpression ABSENT argumentExpressionList RPAREN ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CALL, "CALL"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_retval.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:318:13: LEXCON args1= argumentExpressionList REXCON LPAREN args2= argumentExpressionList RPAREN
					{
					LEXCON69=(Token)match(input,LEXCON,FOLLOW_LEXCON_in_postfixExpression2038); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LEXCON.add(LEXCON69);

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression2042);
					args1=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(args1.getTree());
					REXCON70=(Token)match(input,REXCON,FOLLOW_REXCON_in_postfixExpression2044); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_REXCON.add(REXCON70);

					LPAREN71=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpression2058); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN71);

					pushFollow(FOLLOW_argumentExpressionList_in_postfixExpression2062);
					args2=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(args2.getTree());
					RPAREN72=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_postfixExpression2064); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN72);

					// AST REWRITE
					// elements: postfixExpression, args2, RPAREN, args1, LPAREN
					// token labels: 
					// rule labels: args1, args2, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_args1=new RewriteRuleSubtreeStream(adaptor,"rule args1",args1!=null?args1.getTree():null);
					RewriteRuleSubtreeStream stream_args2=new RewriteRuleSubtreeStream(adaptor,"rule args2",args2!=null?args2.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 320:13: -> ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT )
					{
						// CivlCParser.g:320:16: ^( CALL LPAREN $postfixExpression $args1 $args2 RPAREN ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CALL, "CALL"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_retval.nextTree());
						adaptor.addChild(root_1, stream_args1.nextTree());
						adaptor.addChild(root_1, stream_args2.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:321:11: DOT IDENTIFIER
					{
					DOT73=(Token)match(input,DOT,FOLLOW_DOT_in_postfixExpression2109); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOT.add(DOT73);

					IDENTIFIER74=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_postfixExpression2111); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER74);

					// AST REWRITE
					// elements: IDENTIFIER, DOT, postfixExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 322:13: -> ^( DOT $postfixExpression IDENTIFIER )
					{
						// CivlCParser.g:322:16: ^( DOT $postfixExpression IDENTIFIER )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DOT.nextNode(), root_1);
						adaptor.addChild(root_1, stream_retval.nextTree());
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// CivlCParser.g:323:11: ARROW IDENTIFIER
					{
					ARROW75=(Token)match(input,ARROW,FOLLOW_ARROW_in_postfixExpression2146); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ARROW.add(ARROW75);

					IDENTIFIER76=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_postfixExpression2148); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER76);

					// AST REWRITE
					// elements: ARROW, postfixExpression, IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 324:13: -> ^( ARROW $postfixExpression IDENTIFIER )
					{
						// CivlCParser.g:324:16: ^( ARROW $postfixExpression IDENTIFIER )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ARROW.nextNode(), root_1);
						adaptor.addChild(root_1, stream_retval.nextTree());
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// CivlCParser.g:325:11: p= PLUSPLUS
					{
					p=(Token)match(input,PLUSPLUS,FOLLOW_PLUSPLUS_in_postfixExpression2185); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PLUSPLUS.add(p);

					// AST REWRITE
					// elements: postfixExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 326:13: -> ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:326:16: ^( OPERATOR POST_INCREMENT[$p] ^( ARGUMENT_LIST $postfixExpression) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(POST_INCREMENT, p));
						// CivlCParser.g:327:17: ^( ARGUMENT_LIST $postfixExpression)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 7 :
					// CivlCParser.g:328:11: m= MINUSMINUS
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_postfixExpression2243); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MINUSMINUS.add(m);

					// AST REWRITE
					// elements: postfixExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 329:13: -> ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) )
					{
						// CivlCParser.g:329:16: ^( OPERATOR POST_DECREMENT[$m] ^( ARGUMENT_LIST $postfixExpression) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(POST_DECREMENT, m));
						// CivlCParser.g:330:17: ^( ARGUMENT_LIST $postfixExpression)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop8;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "postfixExpression"


	public static class postfixExpressionRoot_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "postfixExpressionRoot"
	// CivlCParser.g:347:1: postfixExpressionRoot : ( ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY ) | primaryExpression );
	public final CivlCParser.postfixExpressionRoot_return postfixExpressionRoot() throws RecognitionException {
		CivlCParser.postfixExpressionRoot_return retval = new CivlCParser.postfixExpressionRoot_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LPAREN77=null;
		Token RPAREN79=null;
		Token LCURLY80=null;
		Token RCURLY82=null;
		Token COMMA83=null;
		Token RCURLY84=null;
		ParserRuleReturnScope typeName78 =null;
		ParserRuleReturnScope initializerList81 =null;
		ParserRuleReturnScope primaryExpression85 =null;

		Object LPAREN77_tree=null;
		Object RPAREN79_tree=null;
		Object LCURLY80_tree=null;
		Object RCURLY82_tree=null;
		Object COMMA83_tree=null;
		Object RCURLY84_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_initializerList=new RewriteRuleSubtreeStream(adaptor,"rule initializerList");

		try {
			// CivlCParser.g:348:2: ( ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY ) | primaryExpression )
			int alt10=2;
			int LA10_0 = input.LA(1);
			if ( (LA10_0==LPAREN) ) {
				int LA10_1 = input.LA(2);
				if ( (synpred1_CivlCParser()) ) {
					alt10=1;
				}
				else if ( (true) ) {
					alt10=2;
				}

			}
			else if ( (LA10_0==CHARACTER_CONSTANT||LA10_0==ELLIPSIS||LA10_0==FLOATING_CONSTANT||LA10_0==IDENTIFIER||LA10_0==INTEGER_CONSTANT||LA10_0==STRING_LITERAL||LA10_0==DERIV||LA10_0==GENERIC||LA10_0==HERE||LA10_0==PROCNULL||LA10_0==RESULT||LA10_0==SELF||LA10_0==STATE_NULL) ) {
				alt10=2;
			}

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

			switch (alt10) {
				case 1 :
					// CivlCParser.g:348:4: ( LPAREN typeName RPAREN LCURLY )=> LPAREN typeName RPAREN LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LPAREN77=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_postfixExpressionRoot2330); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN77);

					pushFollow(FOLLOW_typeName_in_postfixExpressionRoot2332);
					typeName78=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName78.getTree());
					RPAREN79=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_postfixExpressionRoot2334); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN79);

					LCURLY80=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_postfixExpressionRoot2336); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY80);

					pushFollow(FOLLOW_initializerList_in_postfixExpressionRoot2338);
					initializerList81=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList81.getTree());
					// CivlCParser.g:350:3: ( RCURLY | COMMA RCURLY )
					int alt9=2;
					int LA9_0 = input.LA(1);
					if ( (LA9_0==RCURLY) ) {
						alt9=1;
					}
					else if ( (LA9_0==COMMA) ) {
						alt9=2;
					}

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

					switch (alt9) {
						case 1 :
							// CivlCParser.g:350:5: RCURLY
							{
							RCURLY82=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_postfixExpressionRoot2344); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY82);

							}
							break;
						case 2 :
							// CivlCParser.g:351:5: COMMA RCURLY
							{
							COMMA83=(Token)match(input,COMMA,FOLLOW_COMMA_in_postfixExpressionRoot2350); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA83);

							RCURLY84=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_postfixExpressionRoot2352); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY84);

							}
							break;

					}

					// AST REWRITE
					// elements: RCURLY, LPAREN, typeName, initializerList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 353:9: -> ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY )
					{
						// CivlCParser.g:353:12: ^( COMPOUND_LITERAL LPAREN typeName initializerList RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COMPOUND_LITERAL, "COMPOUND_LITERAL"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_initializerList.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:354:4: primaryExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_primaryExpression_in_postfixExpressionRoot2383);
					primaryExpression85=primaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, primaryExpression85.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "postfixExpressionRoot"


	public static class argumentExpressionList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "argumentExpressionList"
	// CivlCParser.g:358:1: argumentExpressionList : ( (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )* -> ^( ARGUMENT_LIST ( $a)+ ) | -> ^( ARGUMENT_LIST ) );
	public final CivlCParser.argumentExpressionList_return argumentExpressionList() throws RecognitionException {
		CivlCParser.argumentExpressionList_return retval = new CivlCParser.argumentExpressionList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA86=null;
		List<Object> list_a=null;
		RuleReturnScope a = null;
		Object COMMA86_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:359:2: ( (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )* -> ^( ARGUMENT_LIST ( $a)+ ) | -> ^( ARGUMENT_LIST ) )
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==AMPERSAND||LA14_0==CHARACTER_CONSTANT||LA14_0==ELLIPSIS||LA14_0==FLOATING_CONSTANT||LA14_0==IDENTIFIER||LA14_0==INTEGER_CONSTANT||LA14_0==LPAREN||LA14_0==MINUSMINUS||LA14_0==NOT||LA14_0==PLUS||LA14_0==PLUSPLUS||LA14_0==STAR||(LA14_0 >= STRING_LITERAL && LA14_0 <= SUB)||LA14_0==TILDE||LA14_0==ALIGNOF||LA14_0==BIG_O||LA14_0==CALLS||LA14_0==DERIV||LA14_0==EXISTS||(LA14_0 >= FORALL && LA14_0 <= GENERIC)||LA14_0==HERE||LA14_0==PROCNULL||LA14_0==RESULT||(LA14_0 >= SCOPEOF && LA14_0 <= SELF)||(LA14_0 >= SIZEOF && LA14_0 <= SPAWN)||LA14_0==STATE_NULL||LA14_0==UNIFORM||LA14_0==VALUE_AT) ) {
				alt14=1;
			}
			else if ( ((LA14_0 >= RCURLY && LA14_0 <= RPAREN)) ) {
				alt14=2;
			}

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

			switch (alt14) {
				case 1 :
					// CivlCParser.g:359:4: (a+= assignmentExpression |a+= quantifiedExpression ) ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )*
					{
					// CivlCParser.g:359:4: (a+= assignmentExpression |a+= quantifiedExpression )
					int alt11=2;
					int LA11_0 = input.LA(1);
					if ( (LA11_0==AMPERSAND||LA11_0==CHARACTER_CONSTANT||LA11_0==ELLIPSIS||LA11_0==FLOATING_CONSTANT||LA11_0==IDENTIFIER||LA11_0==INTEGER_CONSTANT||LA11_0==LPAREN||LA11_0==MINUSMINUS||LA11_0==NOT||LA11_0==PLUS||LA11_0==PLUSPLUS||LA11_0==STAR||(LA11_0 >= STRING_LITERAL && LA11_0 <= SUB)||LA11_0==TILDE||LA11_0==ALIGNOF||LA11_0==BIG_O||LA11_0==CALLS||LA11_0==DERIV||LA11_0==GENERIC||LA11_0==HERE||LA11_0==PROCNULL||LA11_0==RESULT||(LA11_0 >= SCOPEOF && LA11_0 <= SELF)||(LA11_0 >= SIZEOF && LA11_0 <= SPAWN)||LA11_0==STATE_NULL||LA11_0==VALUE_AT) ) {
						alt11=1;
					}
					else if ( (LA11_0==EXISTS||LA11_0==FORALL||LA11_0==UNIFORM) ) {
						alt11=2;
					}

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

					switch (alt11) {
						case 1 :
							// CivlCParser.g:359:5: a+= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2399);
							a=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(a.getTree());
							if (list_a==null) list_a=new ArrayList<Object>();
							list_a.add(a.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:359:31: a+= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2405);
							a=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(a.getTree());
							if (list_a==null) list_a=new ArrayList<Object>();
							list_a.add(a.getTree());
							}
							break;

					}

					// CivlCParser.g:360:9: ( COMMA (a+= assignmentExpression |a+= quantifiedExpression ) )*
					loop13:
					while (true) {
						int alt13=2;
						int LA13_0 = input.LA(1);
						if ( (LA13_0==COMMA) ) {
							alt13=1;
						}

						switch (alt13) {
						case 1 :
							// CivlCParser.g:360:10: COMMA (a+= assignmentExpression |a+= quantifiedExpression )
							{
							COMMA86=(Token)match(input,COMMA,FOLLOW_COMMA_in_argumentExpressionList2417); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA86);

							// CivlCParser.g:360:16: (a+= assignmentExpression |a+= quantifiedExpression )
							int alt12=2;
							int LA12_0 = input.LA(1);
							if ( (LA12_0==AMPERSAND||LA12_0==CHARACTER_CONSTANT||LA12_0==ELLIPSIS||LA12_0==FLOATING_CONSTANT||LA12_0==IDENTIFIER||LA12_0==INTEGER_CONSTANT||LA12_0==LPAREN||LA12_0==MINUSMINUS||LA12_0==NOT||LA12_0==PLUS||LA12_0==PLUSPLUS||LA12_0==STAR||(LA12_0 >= STRING_LITERAL && LA12_0 <= SUB)||LA12_0==TILDE||LA12_0==ALIGNOF||LA12_0==BIG_O||LA12_0==CALLS||LA12_0==DERIV||LA12_0==GENERIC||LA12_0==HERE||LA12_0==PROCNULL||LA12_0==RESULT||(LA12_0 >= SCOPEOF && LA12_0 <= SELF)||(LA12_0 >= SIZEOF && LA12_0 <= SPAWN)||LA12_0==STATE_NULL||LA12_0==VALUE_AT) ) {
								alt12=1;
							}
							else if ( (LA12_0==EXISTS||LA12_0==FORALL||LA12_0==UNIFORM) ) {
								alt12=2;
							}

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

							switch (alt12) {
								case 1 :
									// CivlCParser.g:360:17: a+= assignmentExpression
									{
									pushFollow(FOLLOW_assignmentExpression_in_argumentExpressionList2422);
									a=assignmentExpression();
									state._fsp--;
									if (state.failed) return retval;
									if ( state.backtracking==0 ) stream_assignmentExpression.add(a.getTree());
									if (list_a==null) list_a=new ArrayList<Object>();
									list_a.add(a.getTree());
									}
									break;
								case 2 :
									// CivlCParser.g:360:43: a+= quantifiedExpression
									{
									pushFollow(FOLLOW_quantifiedExpression_in_argumentExpressionList2428);
									a=quantifiedExpression();
									state._fsp--;
									if (state.failed) return retval;
									if ( state.backtracking==0 ) stream_quantifiedExpression.add(a.getTree());
									if (list_a==null) list_a=new ArrayList<Object>();
									list_a.add(a.getTree());
									}
									break;

							}

							}
							break;

						default :
							break loop13;
						}
					}

					// AST REWRITE
					// elements: a
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: a
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_a=new RewriteRuleSubtreeStream(adaptor,"token a",list_a);
					root_0 = (Object)adaptor.nil();
					// 361:9: -> ^( ARGUMENT_LIST ( $a)+ )
					{
						// CivlCParser.g:361:12: ^( ARGUMENT_LIST ( $a)+ )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_1);
						if ( !(stream_a.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_a.hasNext() ) {
							adaptor.addChild(root_1, stream_a.nextTree());
						}
						stream_a.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:362:7: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 362:7: -> ^( ARGUMENT_LIST )
					{
						// CivlCParser.g:362:10: ^( ARGUMENT_LIST )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "argumentExpressionList"


	public static class unaryExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "unaryExpression"
	// CivlCParser.g:366:1: unaryExpression : ( postfixExpression |p= PLUSPLUS unaryExpression -> ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) ) |m= MINUSMINUS unaryExpression -> ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) ) | unaryOperator (a= castExpression |a= quantifiedExpression ) -> ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) ) | ( SIZEOF LPAREN typeName )=> SIZEOF LPAREN typeName RPAREN -> ^( SIZEOF TYPE typeName ) | SIZEOF unaryExpression -> ^( SIZEOF EXPR unaryExpression ) | SCOPEOF unaryExpression -> ^( SCOPEOF unaryExpression ) | ALIGNOF LPAREN typeName RPAREN -> ^( ALIGNOF typeName ) | VALUE_AT LPAREN b+= assignmentExpression COMMA b+= assignmentExpression COMMA (b+= assignmentExpression |b+= quantifiedExpression ) RPAREN -> ^( VALUE_AT ( $b)+ RPAREN ) | spawnExpression | callsExpression );
	public final CivlCParser.unaryExpression_return unaryExpression() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.unaryExpression_return retval = new CivlCParser.unaryExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token p=null;
		Token m=null;
		Token SIZEOF91=null;
		Token LPAREN92=null;
		Token RPAREN94=null;
		Token SIZEOF95=null;
		Token SCOPEOF97=null;
		Token ALIGNOF99=null;
		Token LPAREN100=null;
		Token RPAREN102=null;
		Token VALUE_AT103=null;
		Token LPAREN104=null;
		Token COMMA105=null;
		Token COMMA106=null;
		Token RPAREN107=null;
		List<Object> list_b=null;
		ParserRuleReturnScope a =null;
		ParserRuleReturnScope postfixExpression87 =null;
		ParserRuleReturnScope unaryExpression88 =null;
		ParserRuleReturnScope unaryExpression89 =null;
		ParserRuleReturnScope unaryOperator90 =null;
		ParserRuleReturnScope typeName93 =null;
		ParserRuleReturnScope unaryExpression96 =null;
		ParserRuleReturnScope unaryExpression98 =null;
		ParserRuleReturnScope typeName101 =null;
		ParserRuleReturnScope spawnExpression108 =null;
		ParserRuleReturnScope callsExpression109 =null;
		RuleReturnScope b = null;
		Object p_tree=null;
		Object m_tree=null;
		Object SIZEOF91_tree=null;
		Object LPAREN92_tree=null;
		Object RPAREN94_tree=null;
		Object SIZEOF95_tree=null;
		Object SCOPEOF97_tree=null;
		Object ALIGNOF99_tree=null;
		Object LPAREN100_tree=null;
		Object RPAREN102_tree=null;
		Object VALUE_AT103_tree=null;
		Object LPAREN104_tree=null;
		Object COMMA105_tree=null;
		Object COMMA106_tree=null;
		Object RPAREN107_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_SCOPEOF=new RewriteRuleTokenStream(adaptor,"token SCOPEOF");
		RewriteRuleTokenStream stream_ALIGNOF=new RewriteRuleTokenStream(adaptor,"token ALIGNOF");
		RewriteRuleTokenStream stream_SIZEOF=new RewriteRuleTokenStream(adaptor,"token SIZEOF");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_VALUE_AT=new RewriteRuleTokenStream(adaptor,"token VALUE_AT");
		RewriteRuleTokenStream stream_MINUSMINUS=new RewriteRuleTokenStream(adaptor,"token MINUSMINUS");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_PLUSPLUS=new RewriteRuleTokenStream(adaptor,"token PLUSPLUS");
		RewriteRuleSubtreeStream stream_castExpression=new RewriteRuleSubtreeStream(adaptor,"rule castExpression");
		RewriteRuleSubtreeStream stream_unaryOperator=new RewriteRuleSubtreeStream(adaptor,"rule unaryOperator");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_unaryExpression=new RewriteRuleSubtreeStream(adaptor,"rule unaryExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");


		  DeclarationScope_stack.peek().isTypedef = false;
		  DeclarationScope_stack.peek().typedefNameUsed =false;

		try {
			// CivlCParser.g:372:2: ( postfixExpression |p= PLUSPLUS unaryExpression -> ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) ) |m= MINUSMINUS unaryExpression -> ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) ) | unaryOperator (a= castExpression |a= quantifiedExpression ) -> ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) ) | ( SIZEOF LPAREN typeName )=> SIZEOF LPAREN typeName RPAREN -> ^( SIZEOF TYPE typeName ) | SIZEOF unaryExpression -> ^( SIZEOF EXPR unaryExpression ) | SCOPEOF unaryExpression -> ^( SCOPEOF unaryExpression ) | ALIGNOF LPAREN typeName RPAREN -> ^( ALIGNOF typeName ) | VALUE_AT LPAREN b+= assignmentExpression COMMA b+= assignmentExpression COMMA (b+= assignmentExpression |b+= quantifiedExpression ) RPAREN -> ^( VALUE_AT ( $b)+ RPAREN ) | spawnExpression | callsExpression )
			int alt17=11;
			switch ( input.LA(1) ) {
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case IDENTIFIER:
			case INTEGER_CONSTANT:
			case LPAREN:
			case STRING_LITERAL:
			case DERIV:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SELF:
			case STATE_NULL:
				{
				alt17=1;
				}
				break;
			case PLUSPLUS:
				{
				alt17=2;
				}
				break;
			case MINUSMINUS:
				{
				alt17=3;
				}
				break;
			case AMPERSAND:
			case NOT:
			case PLUS:
			case STAR:
			case SUB:
			case TILDE:
			case BIG_O:
				{
				alt17=4;
				}
				break;
			case SIZEOF:
				{
				int LA17_18 = input.LA(2);
				if ( (synpred2_CivlCParser()) ) {
					alt17=5;
				}
				else if ( (true) ) {
					alt17=6;
				}

				}
				break;
			case SCOPEOF:
				{
				alt17=7;
				}
				break;
			case ALIGNOF:
				{
				alt17=8;
				}
				break;
			case VALUE_AT:
				{
				alt17=9;
				}
				break;
			case SPAWN:
				{
				alt17=10;
				}
				break;
			case CALLS:
				{
				alt17=11;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 17, 0, input);
				throw nvae;
			}
			switch (alt17) {
				case 1 :
					// CivlCParser.g:372:4: postfixExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_postfixExpression_in_unaryExpression2487);
					postfixExpression87=postfixExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, postfixExpression87.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:373:4: p= PLUSPLUS unaryExpression
					{
					p=(Token)match(input,PLUSPLUS,FOLLOW_PLUSPLUS_in_unaryExpression2494); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PLUSPLUS.add(p);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2496);
					unaryExpression88=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression88.getTree());
					// AST REWRITE
					// elements: unaryExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 374:9: -> ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:374:12: ^( OPERATOR PRE_INCREMENT[$p] ^( ARGUMENT_LIST unaryExpression ) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(PRE_INCREMENT, p));
						// CivlCParser.g:375:13: ^( ARGUMENT_LIST unaryExpression )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_unaryExpression.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:376:4: m= MINUSMINUS unaryExpression
					{
					m=(Token)match(input,MINUSMINUS,FOLLOW_MINUSMINUS_in_unaryExpression2538); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MINUSMINUS.add(m);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2540);
					unaryExpression89=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression89.getTree());
					// AST REWRITE
					// elements: unaryExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 377:9: -> ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) )
					{
						// CivlCParser.g:377:12: ^( OPERATOR PRE_DECREMENT[$m] ^( ARGUMENT_LIST unaryExpression ) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(PRE_DECREMENT, m));
						// CivlCParser.g:378:13: ^( ARGUMENT_LIST unaryExpression )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_unaryExpression.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:379:4: unaryOperator (a= castExpression |a= quantifiedExpression )
					{
					pushFollow(FOLLOW_unaryOperator_in_unaryExpression2580);
					unaryOperator90=unaryOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryOperator.add(unaryOperator90.getTree());
					// CivlCParser.g:379:18: (a= castExpression |a= quantifiedExpression )
					int alt15=2;
					int LA15_0 = input.LA(1);
					if ( (LA15_0==AMPERSAND||LA15_0==CHARACTER_CONSTANT||LA15_0==ELLIPSIS||LA15_0==FLOATING_CONSTANT||LA15_0==IDENTIFIER||LA15_0==INTEGER_CONSTANT||LA15_0==LPAREN||LA15_0==MINUSMINUS||LA15_0==NOT||LA15_0==PLUS||LA15_0==PLUSPLUS||LA15_0==STAR||(LA15_0 >= STRING_LITERAL && LA15_0 <= SUB)||LA15_0==TILDE||LA15_0==ALIGNOF||LA15_0==BIG_O||LA15_0==CALLS||LA15_0==DERIV||LA15_0==GENERIC||LA15_0==HERE||LA15_0==PROCNULL||LA15_0==RESULT||(LA15_0 >= SCOPEOF && LA15_0 <= SELF)||(LA15_0 >= SIZEOF && LA15_0 <= SPAWN)||LA15_0==STATE_NULL||LA15_0==VALUE_AT) ) {
						alt15=1;
					}
					else if ( (LA15_0==EXISTS||LA15_0==FORALL||LA15_0==UNIFORM) ) {
						alt15=2;
					}

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

					switch (alt15) {
						case 1 :
							// CivlCParser.g:379:19: a= castExpression
							{
							pushFollow(FOLLOW_castExpression_in_unaryExpression2585);
							a=castExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_castExpression.add(a.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:379:38: a= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_unaryExpression2591);
							a=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(a.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: a, unaryOperator
					// token labels: 
					// rule labels: a, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_a=new RewriteRuleSubtreeStream(adaptor,"rule a",a!=null?a.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 380:9: -> ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) )
					{
						// CivlCParser.g:380:12: ^( OPERATOR unaryOperator ^( ARGUMENT_LIST $a) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_unaryOperator.nextTree());
						// CivlCParser.g:380:37: ^( ARGUMENT_LIST $a)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_a.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// CivlCParser.g:381:4: ( SIZEOF LPAREN typeName )=> SIZEOF LPAREN typeName RPAREN
					{
					SIZEOF91=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2629); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF91);

					LPAREN92=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_unaryExpression2631); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN92);

					pushFollow(FOLLOW_typeName_in_unaryExpression2633);
					typeName93=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName93.getTree());
					RPAREN94=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_unaryExpression2635); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN94);

					// AST REWRITE
					// elements: SIZEOF, typeName
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 382:9: -> ^( SIZEOF TYPE typeName )
					{
						// CivlCParser.g:382:12: ^( SIZEOF TYPE typeName )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SIZEOF.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(TYPE, "TYPE"));
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// CivlCParser.g:383:4: SIZEOF unaryExpression
					{
					SIZEOF95=(Token)match(input,SIZEOF,FOLLOW_SIZEOF_in_unaryExpression2658); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SIZEOF.add(SIZEOF95);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2660);
					unaryExpression96=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression96.getTree());
					// AST REWRITE
					// elements: unaryExpression, SIZEOF
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 384:9: -> ^( SIZEOF EXPR unaryExpression )
					{
						// CivlCParser.g:384:12: ^( SIZEOF EXPR unaryExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SIZEOF.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(EXPR, "EXPR"));
						adaptor.addChild(root_1, stream_unaryExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 7 :
					// CivlCParser.g:385:4: SCOPEOF unaryExpression
					{
					SCOPEOF97=(Token)match(input,SCOPEOF,FOLLOW_SCOPEOF_in_unaryExpression2683); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SCOPEOF.add(SCOPEOF97);

					pushFollow(FOLLOW_unaryExpression_in_unaryExpression2685);
					unaryExpression98=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(unaryExpression98.getTree());
					// AST REWRITE
					// elements: unaryExpression, SCOPEOF
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 386:9: -> ^( SCOPEOF unaryExpression )
					{
						// CivlCParser.g:386:12: ^( SCOPEOF unaryExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SCOPEOF.nextNode(), root_1);
						adaptor.addChild(root_1, stream_unaryExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 8 :
					// CivlCParser.g:387:4: ALIGNOF LPAREN typeName RPAREN
					{
					ALIGNOF99=(Token)match(input,ALIGNOF,FOLLOW_ALIGNOF_in_unaryExpression2706); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ALIGNOF.add(ALIGNOF99);

					LPAREN100=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_unaryExpression2708); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN100);

					pushFollow(FOLLOW_typeName_in_unaryExpression2710);
					typeName101=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName101.getTree());
					RPAREN102=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_unaryExpression2712); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN102);

					// AST REWRITE
					// elements: ALIGNOF, typeName
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 388:9: -> ^( ALIGNOF typeName )
					{
						// CivlCParser.g:388:12: ^( ALIGNOF typeName )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ALIGNOF.nextNode(), root_1);
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 9 :
					// CivlCParser.g:389:4: VALUE_AT LPAREN b+= assignmentExpression COMMA b+= assignmentExpression COMMA (b+= assignmentExpression |b+= quantifiedExpression ) RPAREN
					{
					VALUE_AT103=(Token)match(input,VALUE_AT,FOLLOW_VALUE_AT_in_unaryExpression2733); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VALUE_AT.add(VALUE_AT103);

					LPAREN104=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_unaryExpression2735); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN104);

					pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2747);
					b=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(b.getTree());
					if (list_b==null) list_b=new ArrayList<Object>();
					list_b.add(b.getTree());
					COMMA105=(Token)match(input,COMMA,FOLLOW_COMMA_in_unaryExpression2749); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA105);

					pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2761);
					b=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(b.getTree());
					if (list_b==null) list_b=new ArrayList<Object>();
					list_b.add(b.getTree());
					COMMA106=(Token)match(input,COMMA,FOLLOW_COMMA_in_unaryExpression2763); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA106);

					// CivlCParser.g:392:9: (b+= assignmentExpression |b+= quantifiedExpression )
					int alt16=2;
					int LA16_0 = input.LA(1);
					if ( (LA16_0==AMPERSAND||LA16_0==CHARACTER_CONSTANT||LA16_0==ELLIPSIS||LA16_0==FLOATING_CONSTANT||LA16_0==IDENTIFIER||LA16_0==INTEGER_CONSTANT||LA16_0==LPAREN||LA16_0==MINUSMINUS||LA16_0==NOT||LA16_0==PLUS||LA16_0==PLUSPLUS||LA16_0==STAR||(LA16_0 >= STRING_LITERAL && LA16_0 <= SUB)||LA16_0==TILDE||LA16_0==ALIGNOF||LA16_0==BIG_O||LA16_0==CALLS||LA16_0==DERIV||LA16_0==GENERIC||LA16_0==HERE||LA16_0==PROCNULL||LA16_0==RESULT||(LA16_0 >= SCOPEOF && LA16_0 <= SELF)||(LA16_0 >= SIZEOF && LA16_0 <= SPAWN)||LA16_0==STATE_NULL||LA16_0==VALUE_AT) ) {
						alt16=1;
					}
					else if ( (LA16_0==EXISTS||LA16_0==FORALL||LA16_0==UNIFORM) ) {
						alt16=2;
					}

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

					switch (alt16) {
						case 1 :
							// CivlCParser.g:392:10: b+= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_unaryExpression2776);
							b=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(b.getTree());
							if (list_b==null) list_b=new ArrayList<Object>();
							list_b.add(b.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:392:36: b+= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_unaryExpression2782);
							b=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(b.getTree());
							if (list_b==null) list_b=new ArrayList<Object>();
							list_b.add(b.getTree());
							}
							break;

					}

					RPAREN107=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_unaryExpression2785); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN107);

					// AST REWRITE
					// elements: RPAREN, VALUE_AT, b
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: b
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_b=new RewriteRuleSubtreeStream(adaptor,"token b",list_b);
					root_0 = (Object)adaptor.nil();
					// 393:9: -> ^( VALUE_AT ( $b)+ RPAREN )
					{
						// CivlCParser.g:393:12: ^( VALUE_AT ( $b)+ RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_VALUE_AT.nextNode(), root_1);
						if ( !(stream_b.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_b.hasNext() ) {
							adaptor.addChild(root_1, stream_b.nextTree());
						}
						stream_b.reset();

						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 10 :
					// CivlCParser.g:394:4: spawnExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_spawnExpression_in_unaryExpression2810);
					spawnExpression108=spawnExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, spawnExpression108.getTree());

					}
					break;
				case 11 :
					// CivlCParser.g:395:7: callsExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_callsExpression_in_unaryExpression2818);
					callsExpression109=callsExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, callsExpression109.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "unaryExpression"


	public static class spawnExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "spawnExpression"
	// CivlCParser.g:399:1: spawnExpression : SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) ;
	public final CivlCParser.spawnExpression_return spawnExpression() throws RecognitionException {
		CivlCParser.spawnExpression_return retval = new CivlCParser.spawnExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SPAWN110=null;
		Token LPAREN112=null;
		Token RPAREN114=null;
		ParserRuleReturnScope postfixExpressionRoot111 =null;
		ParserRuleReturnScope argumentExpressionList113 =null;

		Object SPAWN110_tree=null;
		Object LPAREN112_tree=null;
		Object RPAREN114_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_SPAWN=new RewriteRuleTokenStream(adaptor,"token SPAWN");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");
		RewriteRuleSubtreeStream stream_postfixExpressionRoot=new RewriteRuleSubtreeStream(adaptor,"rule postfixExpressionRoot");

		try {
			// CivlCParser.g:400:2: ( SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:400:4: SPAWN postfixExpressionRoot LPAREN argumentExpressionList RPAREN
			{
			SPAWN110=(Token)match(input,SPAWN,FOLLOW_SPAWN_in_spawnExpression2831); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SPAWN.add(SPAWN110);

			pushFollow(FOLLOW_postfixExpressionRoot_in_spawnExpression2833);
			postfixExpressionRoot111=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot111.getTree());
			LPAREN112=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_spawnExpression2835); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN112);

			pushFollow(FOLLOW_argumentExpressionList_in_spawnExpression2837);
			argumentExpressionList113=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList113.getTree());
			RPAREN114=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_spawnExpression2839); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN114);

			// AST REWRITE
			// elements: argumentExpressionList, SPAWN, postfixExpressionRoot, LPAREN, RPAREN
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 401:9: -> ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:401:12: ^( SPAWN LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_SPAWN.nextNode(), root_1);
				adaptor.addChild(root_1, stream_LPAREN.nextNode());
				adaptor.addChild(root_1, stream_postfixExpressionRoot.nextTree());
				adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
				adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
				adaptor.addChild(root_1, stream_RPAREN.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "spawnExpression"


	public static class callsExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "callsExpression"
	// CivlCParser.g:406:1: callsExpression : CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) ;
	public final CivlCParser.callsExpression_return callsExpression() throws RecognitionException {
		CivlCParser.callsExpression_return retval = new CivlCParser.callsExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token CALLS115=null;
		Token LPAREN116=null;
		Token LPAREN118=null;
		Token RPAREN120=null;
		Token RPAREN121=null;
		ParserRuleReturnScope postfixExpressionRoot117 =null;
		ParserRuleReturnScope argumentExpressionList119 =null;

		Object CALLS115_tree=null;
		Object LPAREN116_tree=null;
		Object LPAREN118_tree=null;
		Object RPAREN120_tree=null;
		Object RPAREN121_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_CALLS=new RewriteRuleTokenStream(adaptor,"token CALLS");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");
		RewriteRuleSubtreeStream stream_postfixExpressionRoot=new RewriteRuleSubtreeStream(adaptor,"rule postfixExpressionRoot");

		try {
			// CivlCParser.g:407:2: ( CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			// CivlCParser.g:407:4: CALLS LPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN RPAREN
			{
			CALLS115=(Token)match(input,CALLS,FOLLOW_CALLS_in_callsExpression2888); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CALLS.add(CALLS115);

			LPAREN116=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_callsExpression2890); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN116);

			pushFollow(FOLLOW_postfixExpressionRoot_in_callsExpression2892);
			postfixExpressionRoot117=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot117.getTree());
			LPAREN118=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_callsExpression2894); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN118);

			pushFollow(FOLLOW_argumentExpressionList_in_callsExpression2904);
			argumentExpressionList119=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList119.getTree());
			RPAREN120=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_callsExpression2906); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN120);

			RPAREN121=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_callsExpression2908); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN121);

			// AST REWRITE
			// elements: RPAREN, argumentExpressionList, LPAREN, postfixExpressionRoot, CALLS
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 409:9: -> ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
			{
				// CivlCParser.g:409:12: ^( CALLS LPAREN postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_CALLS.nextNode(), root_1);
				adaptor.addChild(root_1, stream_LPAREN.nextNode());
				adaptor.addChild(root_1, stream_postfixExpressionRoot.nextTree());
				adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
				adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
				adaptor.addChild(root_1, stream_RPAREN.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "callsExpression"


	public static class unaryOperator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "unaryOperator"
	// CivlCParser.g:415:1: unaryOperator : ( AMPERSAND | STAR | PLUS | SUB | TILDE | NOT | BIG_O );
	public final CivlCParser.unaryOperator_return unaryOperator() throws RecognitionException {
		CivlCParser.unaryOperator_return retval = new CivlCParser.unaryOperator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set122=null;

		Object set122_tree=null;

		try {
			// CivlCParser.g:416:2: ( AMPERSAND | STAR | PLUS | SUB | TILDE | NOT | BIG_O )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set122=input.LT(1);
			if ( input.LA(1)==AMPERSAND||input.LA(1)==NOT||input.LA(1)==PLUS||input.LA(1)==STAR||input.LA(1)==SUB||input.LA(1)==TILDE||input.LA(1)==BIG_O ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set122));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "unaryOperator"


	public static class castExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "castExpression"
	// CivlCParser.g:425:1: castExpression : ( ( LPAREN typeName RPAREN ~ LCURLY )=>l= LPAREN typeName RPAREN castExpression -> ^( CAST typeName castExpression $l) | unaryExpression );
	public final CivlCParser.castExpression_return castExpression() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.castExpression_return retval = new CivlCParser.castExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token l=null;
		Token RPAREN124=null;
		ParserRuleReturnScope typeName123 =null;
		ParserRuleReturnScope castExpression125 =null;
		ParserRuleReturnScope unaryExpression126 =null;

		Object l_tree=null;
		Object RPAREN124_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_castExpression=new RewriteRuleSubtreeStream(adaptor,"rule castExpression");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");


			DeclarationScope_stack.peek().isTypedef = false;
			DeclarationScope_stack.peek().typedefNameUsed =false;

		try {
			// CivlCParser.g:431:2: ( ( LPAREN typeName RPAREN ~ LCURLY )=>l= LPAREN typeName RPAREN castExpression -> ^( CAST typeName castExpression $l) | unaryExpression )
			int alt18=2;
			int LA18_0 = input.LA(1);
			if ( (LA18_0==LPAREN) ) {
				int LA18_1 = input.LA(2);
				if ( (synpred3_CivlCParser()) ) {
					alt18=1;
				}
				else if ( (true) ) {
					alt18=2;
				}

			}
			else if ( (LA18_0==AMPERSAND||LA18_0==CHARACTER_CONSTANT||LA18_0==ELLIPSIS||LA18_0==FLOATING_CONSTANT||LA18_0==IDENTIFIER||LA18_0==INTEGER_CONSTANT||LA18_0==MINUSMINUS||LA18_0==NOT||LA18_0==PLUS||LA18_0==PLUSPLUS||LA18_0==STAR||(LA18_0 >= STRING_LITERAL && LA18_0 <= SUB)||LA18_0==TILDE||LA18_0==ALIGNOF||LA18_0==BIG_O||LA18_0==CALLS||LA18_0==DERIV||LA18_0==GENERIC||LA18_0==HERE||LA18_0==PROCNULL||LA18_0==RESULT||(LA18_0 >= SCOPEOF && LA18_0 <= SELF)||(LA18_0 >= SIZEOF && LA18_0 <= SPAWN)||LA18_0==STATE_NULL||LA18_0==VALUE_AT) ) {
				alt18=2;
			}

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

			switch (alt18) {
				case 1 :
					// CivlCParser.g:431:4: ( LPAREN typeName RPAREN ~ LCURLY )=>l= LPAREN typeName RPAREN castExpression
					{
					l=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_castExpression3025); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(l);

					pushFollow(FOLLOW_typeName_in_castExpression3027);
					typeName123=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName123.getTree());
					RPAREN124=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_castExpression3029); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN124);

					pushFollow(FOLLOW_castExpression_in_castExpression3031);
					castExpression125=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(castExpression125.getTree());
					// AST REWRITE
					// elements: castExpression, l, typeName
					// token labels: l
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleTokenStream stream_l=new RewriteRuleTokenStream(adaptor,"token l",l);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 433:9: -> ^( CAST typeName castExpression $l)
					{
						// CivlCParser.g:433:12: ^( CAST typeName castExpression $l)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CAST, "CAST"), root_1);
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_castExpression.nextTree());
						adaptor.addChild(root_1, stream_l.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:434:4: unaryExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_unaryExpression_in_castExpression3057);
					unaryExpression126=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, unaryExpression126.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "castExpression"


	public static class remoteExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "remoteExpression"
	// CivlCParser.g:439:1: remoteExpression : ( castExpression -> castExpression ) ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )* ;
	public final CivlCParser.remoteExpression_return remoteExpression() throws RecognitionException {
		CivlCParser.remoteExpression_return retval = new CivlCParser.remoteExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AT128=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope castExpression127 =null;

		Object AT128_tree=null;
		RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT");
		RewriteRuleSubtreeStream stream_castExpression=new RewriteRuleSubtreeStream(adaptor,"rule castExpression");

		try {
			// CivlCParser.g:440:2: ( ( castExpression -> castExpression ) ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )* )
			// CivlCParser.g:440:4: ( castExpression -> castExpression ) ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )*
			{
			// CivlCParser.g:440:4: ( castExpression -> castExpression )
			// CivlCParser.g:440:5: castExpression
			{
			pushFollow(FOLLOW_castExpression_in_remoteExpression3071);
			castExpression127=castExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_castExpression.add(castExpression127.getTree());
			// AST REWRITE
			// elements: castExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 440:20: -> castExpression
			{
				adaptor.addChild(root_0, stream_castExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:441:9: ( ( AT )=> AT y= castExpression -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) ) )*
			loop19:
			while (true) {
				int alt19=2;
				int LA19_0 = input.LA(1);
				if ( (LA19_0==AT) ) {
					int LA19_2 = input.LA(2);
					if ( (synpred4_CivlCParser()) ) {
						alt19=1;
					}

				}

				switch (alt19) {
				case 1 :
					// CivlCParser.g:441:11: ( AT )=> AT y= castExpression
					{
					AT128=(Token)match(input,AT,FOLLOW_AT_in_remoteExpression3093); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AT.add(AT128);

					pushFollow(FOLLOW_castExpression_in_remoteExpression3097);
					y=castExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_castExpression.add(y.getTree());
					// AST REWRITE
					// elements: AT, remoteExpression, y
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 442:13: -> ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) )
					{
						// CivlCParser.g:442:16: ^( OPERATOR AT ^( ARGUMENT_LIST $remoteExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_AT.nextNode());
						// CivlCParser.g:442:30: ^( ARGUMENT_LIST $remoteExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop19;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "remoteExpression"


	public static class multiplicativeExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "multiplicativeExpression"
	// CivlCParser.g:447:1: multiplicativeExpression : ( remoteExpression -> remoteExpression ) ( ( STAR )=> STAR y= remoteExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= remoteExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= remoteExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )* ;
	public final CivlCParser.multiplicativeExpression_return multiplicativeExpression() throws RecognitionException {
		CivlCParser.multiplicativeExpression_return retval = new CivlCParser.multiplicativeExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STAR130=null;
		Token DIV131=null;
		Token MOD132=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope remoteExpression129 =null;

		Object STAR130_tree=null;
		Object DIV131_tree=null;
		Object MOD132_tree=null;
		RewriteRuleTokenStream stream_DIV=new RewriteRuleTokenStream(adaptor,"token DIV");
		RewriteRuleTokenStream stream_MOD=new RewriteRuleTokenStream(adaptor,"token MOD");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleSubtreeStream stream_remoteExpression=new RewriteRuleSubtreeStream(adaptor,"rule remoteExpression");

		try {
			// CivlCParser.g:448:2: ( ( remoteExpression -> remoteExpression ) ( ( STAR )=> STAR y= remoteExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= remoteExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= remoteExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )* )
			// CivlCParser.g:448:4: ( remoteExpression -> remoteExpression ) ( ( STAR )=> STAR y= remoteExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= remoteExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= remoteExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )*
			{
			// CivlCParser.g:448:4: ( remoteExpression -> remoteExpression )
			// CivlCParser.g:448:5: remoteExpression
			{
			pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3152);
			remoteExpression129=remoteExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_remoteExpression.add(remoteExpression129.getTree());
			// AST REWRITE
			// elements: remoteExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 448:22: -> remoteExpression
			{
				adaptor.addChild(root_0, stream_remoteExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:449:9: ( ( STAR )=> STAR y= remoteExpression -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( DIV )=> DIV y= remoteExpression -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) ) | ( MOD )=> MOD y= remoteExpression -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) ) )*
			loop20:
			while (true) {
				int alt20=4;
				switch ( input.LA(1) ) {
				case STAR:
					{
					int LA20_2 = input.LA(2);
					if ( (synpred5_CivlCParser()) ) {
						alt20=1;
					}

					}
					break;
				case DIV:
					{
					int LA20_3 = input.LA(2);
					if ( (synpred6_CivlCParser()) ) {
						alt20=2;
					}

					}
					break;
				case MOD:
					{
					int LA20_4 = input.LA(2);
					if ( (synpred7_CivlCParser()) ) {
						alt20=3;
					}

					}
					break;
				}
				switch (alt20) {
				case 1 :
					// CivlCParser.g:449:11: ( STAR )=> STAR y= remoteExpression
					{
					STAR130=(Token)match(input,STAR,FOLLOW_STAR_in_multiplicativeExpression3174); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STAR.add(STAR130);

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3178);
					y=remoteExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_remoteExpression.add(y.getTree());
					// AST REWRITE
					// elements: STAR, y, multiplicativeExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 450:13: -> ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:450:16: ^( OPERATOR STAR ^( ARGUMENT_LIST $multiplicativeExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_STAR.nextNode());
						// CivlCParser.g:450:32: ^( ARGUMENT_LIST $multiplicativeExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:451:11: ( DIV )=> DIV y= remoteExpression
					{
					DIV131=(Token)match(input,DIV,FOLLOW_DIV_in_multiplicativeExpression3225); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DIV.add(DIV131);

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3229);
					y=remoteExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_remoteExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, DIV, multiplicativeExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 452:13: -> ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:452:16: ^( OPERATOR DIV ^( ARGUMENT_LIST $multiplicativeExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_DIV.nextNode());
						// CivlCParser.g:452:31: ^( ARGUMENT_LIST $multiplicativeExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:453:11: ( MOD )=> MOD y= remoteExpression
					{
					MOD132=(Token)match(input,MOD,FOLLOW_MOD_in_multiplicativeExpression3276); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_MOD.add(MOD132);

					pushFollow(FOLLOW_remoteExpression_in_multiplicativeExpression3280);
					y=remoteExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_remoteExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, MOD, multiplicativeExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 454:13: -> ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) )
					{
						// CivlCParser.g:454:16: ^( OPERATOR MOD ^( ARGUMENT_LIST $multiplicativeExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_MOD.nextNode());
						// CivlCParser.g:454:31: ^( ARGUMENT_LIST $multiplicativeExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop20;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "multiplicativeExpression"


	public static class additiveExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "additiveExpression"
	// CivlCParser.g:459:1: additiveExpression : ( multiplicativeExpression -> multiplicativeExpression ) ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )* ;
	public final CivlCParser.additiveExpression_return additiveExpression() throws RecognitionException {
		CivlCParser.additiveExpression_return retval = new CivlCParser.additiveExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token PLUS134=null;
		Token SUB135=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope multiplicativeExpression133 =null;

		Object PLUS134_tree=null;
		Object SUB135_tree=null;
		RewriteRuleTokenStream stream_SUB=new RewriteRuleTokenStream(adaptor,"token SUB");
		RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS");
		RewriteRuleSubtreeStream stream_multiplicativeExpression=new RewriteRuleSubtreeStream(adaptor,"rule multiplicativeExpression");

		try {
			// CivlCParser.g:460:2: ( ( multiplicativeExpression -> multiplicativeExpression ) ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )* )
			// CivlCParser.g:460:4: ( multiplicativeExpression -> multiplicativeExpression ) ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )*
			{
			// CivlCParser.g:460:4: ( multiplicativeExpression -> multiplicativeExpression )
			// CivlCParser.g:460:5: multiplicativeExpression
			{
			pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3335);
			multiplicativeExpression133=multiplicativeExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_multiplicativeExpression.add(multiplicativeExpression133.getTree());
			// AST REWRITE
			// elements: multiplicativeExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 460:30: -> multiplicativeExpression
			{
				adaptor.addChild(root_0, stream_multiplicativeExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:461:9: ( ( PLUS )=> PLUS y= multiplicativeExpression -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) ) | ( SUB )=> SUB y= multiplicativeExpression -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) ) )*
			loop21:
			while (true) {
				int alt21=3;
				int LA21_0 = input.LA(1);
				if ( (LA21_0==PLUS) ) {
					int LA21_2 = input.LA(2);
					if ( (synpred8_CivlCParser()) ) {
						alt21=1;
					}

				}
				else if ( (LA21_0==SUB) ) {
					int LA21_3 = input.LA(2);
					if ( (synpred9_CivlCParser()) ) {
						alt21=2;
					}

				}

				switch (alt21) {
				case 1 :
					// CivlCParser.g:461:11: ( PLUS )=> PLUS y= multiplicativeExpression
					{
					PLUS134=(Token)match(input,PLUS,FOLLOW_PLUS_in_additiveExpression3357); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PLUS.add(PLUS134);

					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3361);
					y=multiplicativeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_multiplicativeExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, PLUS, additiveExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 462:11: -> ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) )
					{
						// CivlCParser.g:462:14: ^( OPERATOR PLUS ^( ARGUMENT_LIST $additiveExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_PLUS.nextNode());
						// CivlCParser.g:462:30: ^( ARGUMENT_LIST $additiveExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:463:11: ( SUB )=> SUB y= multiplicativeExpression
					{
					SUB135=(Token)match(input,SUB,FOLLOW_SUB_in_additiveExpression3406); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SUB.add(SUB135);

					pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression3410);
					y=multiplicativeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_multiplicativeExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, SUB, additiveExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 464:11: -> ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) )
					{
						// CivlCParser.g:464:14: ^( OPERATOR SUB ^( ARGUMENT_LIST $additiveExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_SUB.nextNode());
						// CivlCParser.g:464:29: ^( ARGUMENT_LIST $additiveExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop21;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "additiveExpression"


	public static class rangeExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "rangeExpression"
	// CivlCParser.g:470:1: rangeExpression : x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x) ;
	public final CivlCParser.rangeExpression_return rangeExpression() throws RecognitionException {
		CivlCParser.rangeExpression_return retval = new CivlCParser.rangeExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DOTDOT136=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope s =null;

		Object DOTDOT136_tree=null;
		RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT");
		RewriteRuleSubtreeStream stream_additiveExpression=new RewriteRuleSubtreeStream(adaptor,"rule additiveExpression");
		RewriteRuleSubtreeStream stream_rangeSuffix=new RewriteRuleSubtreeStream(adaptor,"rule rangeSuffix");

		try {
			// CivlCParser.g:471:2: (x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x) )
			// CivlCParser.g:471:4: x= additiveExpression ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeExpression3464);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:472:9: ( ( DOTDOT )=> DOTDOT s= rangeSuffix -> ^( DOTDOT $x $s) | -> $x)
			int alt22=2;
			int LA22_0 = input.LA(1);
			if ( (LA22_0==DOTDOT) ) {
				int LA22_1 = input.LA(2);
				if ( (synpred10_CivlCParser()) ) {
					alt22=1;
				}
				else if ( (true) ) {
					alt22=2;
				}

			}
			else if ( (LA22_0==EOF||(LA22_0 >= AMPERSAND && LA22_0 <= AND)||(LA22_0 >= ASSIGN && LA22_0 <= BITXOREQ)||(LA22_0 >= COLON && LA22_0 <= COMMA)||(LA22_0 >= DIV && LA22_0 <= DIVEQ)||LA22_0==EQUALS||(LA22_0 >= GT && LA22_0 <= HASH)||LA22_0==IMPLIES||(LA22_0 >= LT && LA22_0 <= LTE)||(LA22_0 >= MOD && LA22_0 <= NEQ)||LA22_0==OR||(LA22_0 >= PLUS && LA22_0 <= PLUSEQ)||(LA22_0 >= QMARK && LA22_0 <= RPAREN)||LA22_0==RSQUARE||(LA22_0 >= SEMI && LA22_0 <= STAREQ)||(LA22_0 >= SUB && LA22_0 <= SUBEQ)||LA22_0==ASSIGNS||LA22_0==DEPENDS||LA22_0==ENSURES||LA22_0==GUARD||LA22_0==READS||LA22_0==REQUIRES) ) {
				alt22=2;
			}

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

			switch (alt22) {
				case 1 :
					// CivlCParser.g:472:11: ( DOTDOT )=> DOTDOT s= rangeSuffix
					{
					DOTDOT136=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_rangeExpression3481); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOTDOT.add(DOTDOT136);

					pushFollow(FOLLOW_rangeSuffix_in_rangeExpression3485);
					s=rangeSuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeSuffix.add(s.getTree());
					// AST REWRITE
					// elements: s, DOTDOT, x
					// token labels: 
					// rule labels: s, x, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 472:43: -> ^( DOTDOT $x $s)
					{
						// CivlCParser.g:472:46: ^( DOTDOT $x $s)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DOTDOT.nextNode(), root_1);
						adaptor.addChild(root_1, stream_x.nextTree());
						adaptor.addChild(root_1, stream_s.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:473:11: 
					{
					// AST REWRITE
					// elements: x
					// token labels: 
					// rule labels: x, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 473:11: -> $x
					{
						adaptor.addChild(root_0, stream_x.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "rangeExpression"


	public static class rangeSuffix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "rangeSuffix"
	// CivlCParser.g:477:1: rangeSuffix : x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x) ;
	public final CivlCParser.rangeSuffix_return rangeSuffix() throws RecognitionException {
		CivlCParser.rangeSuffix_return retval = new CivlCParser.rangeSuffix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token HASH137=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

		Object HASH137_tree=null;
		RewriteRuleTokenStream stream_HASH=new RewriteRuleTokenStream(adaptor,"token HASH");
		RewriteRuleSubtreeStream stream_additiveExpression=new RewriteRuleSubtreeStream(adaptor,"rule additiveExpression");

		try {
			// CivlCParser.g:478:5: (x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x) )
			// CivlCParser.g:478:7: x= additiveExpression ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			{
			pushFollow(FOLLOW_additiveExpression_in_rangeSuffix3541);
			x=additiveExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_additiveExpression.add(x.getTree());
			// CivlCParser.g:479:9: ( ( HASH )=> HASH y= additiveExpression -> $x $y| -> $x)
			int alt23=2;
			int LA23_0 = input.LA(1);
			if ( (LA23_0==HASH) ) {
				int LA23_1 = input.LA(2);
				if ( (synpred11_CivlCParser()) ) {
					alt23=1;
				}
				else if ( (true) ) {
					alt23=2;
				}

			}
			else if ( (LA23_0==EOF||(LA23_0 >= AMPERSAND && LA23_0 <= AND)||(LA23_0 >= ASSIGN && LA23_0 <= BITXOREQ)||(LA23_0 >= COLON && LA23_0 <= COMMA)||(LA23_0 >= DIV && LA23_0 <= DIVEQ)||LA23_0==DOTDOT||LA23_0==EQUALS||(LA23_0 >= GT && LA23_0 <= GTE)||LA23_0==IMPLIES||(LA23_0 >= LT && LA23_0 <= LTE)||(LA23_0 >= MOD && LA23_0 <= NEQ)||LA23_0==OR||(LA23_0 >= PLUS && LA23_0 <= PLUSEQ)||(LA23_0 >= QMARK && LA23_0 <= RPAREN)||LA23_0==RSQUARE||(LA23_0 >= SEMI && LA23_0 <= STAREQ)||(LA23_0 >= SUB && LA23_0 <= SUBEQ)||LA23_0==ASSIGNS||LA23_0==DEPENDS||LA23_0==ENSURES||LA23_0==GUARD||LA23_0==READS||LA23_0==REQUIRES) ) {
				alt23=2;
			}

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

			switch (alt23) {
				case 1 :
					// CivlCParser.g:479:11: ( HASH )=> HASH y= additiveExpression
					{
					HASH137=(Token)match(input,HASH,FOLLOW_HASH_in_rangeSuffix3558); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_HASH.add(HASH137);

					pushFollow(FOLLOW_additiveExpression_in_rangeSuffix3562);
					y=additiveExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_additiveExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, x
					// token labels: 
					// rule labels: x, y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 479:46: -> $x $y
					{
						adaptor.addChild(root_0, stream_x.nextTree());
						adaptor.addChild(root_0, stream_y.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:480:11: 
					{
					// AST REWRITE
					// elements: x
					// token labels: 
					// rule labels: x, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 480:11: -> $x
					{
						adaptor.addChild(root_0, stream_x.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "rangeSuffix"


	public static class shiftExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "shiftExpression"
	// CivlCParser.g:485:1: shiftExpression : ( rangeExpression -> rangeExpression ) ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )* ;
	public final CivlCParser.shiftExpression_return shiftExpression() throws RecognitionException {
		CivlCParser.shiftExpression_return retval = new CivlCParser.shiftExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SHIFTLEFT139=null;
		Token SHIFTRIGHT140=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope rangeExpression138 =null;

		Object SHIFTLEFT139_tree=null;
		Object SHIFTRIGHT140_tree=null;
		RewriteRuleTokenStream stream_SHIFTLEFT=new RewriteRuleTokenStream(adaptor,"token SHIFTLEFT");
		RewriteRuleTokenStream stream_SHIFTRIGHT=new RewriteRuleTokenStream(adaptor,"token SHIFTRIGHT");
		RewriteRuleSubtreeStream stream_rangeExpression=new RewriteRuleSubtreeStream(adaptor,"rule rangeExpression");

		try {
			// CivlCParser.g:486:2: ( ( rangeExpression -> rangeExpression ) ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )* )
			// CivlCParser.g:486:4: ( rangeExpression -> rangeExpression ) ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )*
			{
			// CivlCParser.g:486:4: ( rangeExpression -> rangeExpression )
			// CivlCParser.g:486:5: rangeExpression
			{
			pushFollow(FOLLOW_rangeExpression_in_shiftExpression3612);
			rangeExpression138=rangeExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_rangeExpression.add(rangeExpression138.getTree());
			// AST REWRITE
			// elements: rangeExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 486:21: -> rangeExpression
			{
				adaptor.addChild(root_0, stream_rangeExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:487:9: ( ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) ) | ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) ) )*
			loop24:
			while (true) {
				int alt24=3;
				int LA24_0 = input.LA(1);
				if ( (LA24_0==SHIFTLEFT) ) {
					int LA24_2 = input.LA(2);
					if ( (synpred12_CivlCParser()) ) {
						alt24=1;
					}

				}
				else if ( (LA24_0==SHIFTRIGHT) ) {
					int LA24_3 = input.LA(2);
					if ( (synpred13_CivlCParser()) ) {
						alt24=2;
					}

				}

				switch (alt24) {
				case 1 :
					// CivlCParser.g:487:11: ( SHIFTLEFT )=> SHIFTLEFT y= rangeExpression
					{
					SHIFTLEFT139=(Token)match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_shiftExpression3634); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTLEFT.add(SHIFTLEFT139);

					pushFollow(FOLLOW_rangeExpression_in_shiftExpression3638);
					y=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, SHIFTLEFT, shiftExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 488:11: -> ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:488:14: ^( OPERATOR SHIFTLEFT ^( ARGUMENT_LIST $shiftExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_SHIFTLEFT.nextNode());
						// CivlCParser.g:488:35: ^( ARGUMENT_LIST $shiftExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:489:11: ( SHIFTRIGHT )=> SHIFTRIGHT y= rangeExpression
					{
					SHIFTRIGHT140=(Token)match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_shiftExpression3683); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SHIFTRIGHT.add(SHIFTRIGHT140);

					pushFollow(FOLLOW_rangeExpression_in_shiftExpression3687);
					y=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, shiftExpression, SHIFTRIGHT
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 490:11: -> ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) )
					{
						// CivlCParser.g:490:14: ^( OPERATOR SHIFTRIGHT ^( ARGUMENT_LIST $shiftExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_SHIFTRIGHT.nextNode());
						// CivlCParser.g:490:36: ^( ARGUMENT_LIST $shiftExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop24;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "shiftExpression"


	public static class relationalExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "relationalExpression"
	// CivlCParser.g:495:1: relationalExpression : ( shiftExpression -> shiftExpression ) ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )* ;
	public final CivlCParser.relationalExpression_return relationalExpression() throws RecognitionException {
		CivlCParser.relationalExpression_return retval = new CivlCParser.relationalExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope y =null;
		ParserRuleReturnScope shiftExpression141 =null;
		ParserRuleReturnScope relationalOperator142 =null;

		RewriteRuleSubtreeStream stream_shiftExpression=new RewriteRuleSubtreeStream(adaptor,"rule shiftExpression");
		RewriteRuleSubtreeStream stream_relationalOperator=new RewriteRuleSubtreeStream(adaptor,"rule relationalOperator");

		try {
			// CivlCParser.g:496:2: ( ( shiftExpression -> shiftExpression ) ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )* )
			// CivlCParser.g:496:4: ( shiftExpression -> shiftExpression ) ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )*
			{
			// CivlCParser.g:496:4: ( shiftExpression -> shiftExpression )
			// CivlCParser.g:496:6: shiftExpression
			{
			pushFollow(FOLLOW_shiftExpression_in_relationalExpression3741);
			shiftExpression141=shiftExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_shiftExpression.add(shiftExpression141.getTree());
			// AST REWRITE
			// elements: shiftExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 496:22: -> shiftExpression
			{
				adaptor.addChild(root_0, stream_shiftExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:497:9: ( ( relationalOperator )=> relationalOperator (y= shiftExpression ) -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) ) )*
			loop25:
			while (true) {
				int alt25=2;
				int LA25_0 = input.LA(1);
				if ( ((LA25_0 >= GT && LA25_0 <= GTE)||(LA25_0 >= LT && LA25_0 <= LTE)) ) {
					int LA25_2 = input.LA(2);
					if ( (synpred14_CivlCParser()) ) {
						alt25=1;
					}

				}

				switch (alt25) {
				case 1 :
					// CivlCParser.g:497:11: ( relationalOperator )=> relationalOperator (y= shiftExpression )
					{
					pushFollow(FOLLOW_relationalOperator_in_relationalExpression3764);
					relationalOperator142=relationalOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_relationalOperator.add(relationalOperator142.getTree());
					// CivlCParser.g:498:13: (y= shiftExpression )
					// CivlCParser.g:498:14: y= shiftExpression
					{
					pushFollow(FOLLOW_shiftExpression_in_relationalExpression3781);
					y=shiftExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_shiftExpression.add(y.getTree());
					}

					// AST REWRITE
					// elements: relationalExpression, relationalOperator, y
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 499:13: -> ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) )
					{
						// CivlCParser.g:499:16: ^( OPERATOR relationalOperator ^( ARGUMENT_LIST $relationalExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_relationalOperator.nextTree());
						// CivlCParser.g:500:17: ^( ARGUMENT_LIST $relationalExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop25;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "relationalExpression"


	public static class relationalOperator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "relationalOperator"
	// CivlCParser.g:505:1: relationalOperator : ( LT | GT | LTE | GTE );
	public final CivlCParser.relationalOperator_return relationalOperator() throws RecognitionException {
		CivlCParser.relationalOperator_return retval = new CivlCParser.relationalOperator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set143=null;

		Object set143_tree=null;

		try {
			// CivlCParser.g:506:2: ( LT | GT | LTE | GTE )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set143=input.LT(1);
			if ( (input.LA(1) >= GT && input.LA(1) <= GTE)||(input.LA(1) >= LT && input.LA(1) <= LTE) ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set143));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "relationalOperator"


	public static class equalityExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "equalityExpression"
	// CivlCParser.g:510:1: equalityExpression : ( relationalExpression -> relationalExpression ) ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )* ;
	public final CivlCParser.equalityExpression_return equalityExpression() throws RecognitionException {
		CivlCParser.equalityExpression_return retval = new CivlCParser.equalityExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope y =null;
		ParserRuleReturnScope relationalExpression144 =null;
		ParserRuleReturnScope equalityOperator145 =null;

		RewriteRuleSubtreeStream stream_equalityOperator=new RewriteRuleSubtreeStream(adaptor,"rule equalityOperator");
		RewriteRuleSubtreeStream stream_relationalExpression=new RewriteRuleSubtreeStream(adaptor,"rule relationalExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:511:2: ( ( relationalExpression -> relationalExpression ) ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )* )
			// CivlCParser.g:511:4: ( relationalExpression -> relationalExpression ) ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )*
			{
			// CivlCParser.g:511:4: ( relationalExpression -> relationalExpression )
			// CivlCParser.g:511:6: relationalExpression
			{
			pushFollow(FOLLOW_relationalExpression_in_equalityExpression3879);
			relationalExpression144=relationalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_relationalExpression.add(relationalExpression144.getTree());
			// AST REWRITE
			// elements: relationalExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 511:27: -> relationalExpression
			{
				adaptor.addChild(root_0, stream_relationalExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:512:9: ( ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression ) -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) ) )*
			loop27:
			while (true) {
				int alt27=2;
				int LA27_0 = input.LA(1);
				if ( (LA27_0==EQUALS||LA27_0==NEQ) ) {
					int LA27_2 = input.LA(2);
					if ( (synpred15_CivlCParser()) ) {
						alt27=1;
					}

				}

				switch (alt27) {
				case 1 :
					// CivlCParser.g:512:11: ( equalityOperator )=> equalityOperator (y= relationalExpression |y= quantifiedExpression )
					{
					pushFollow(FOLLOW_equalityOperator_in_equalityExpression3901);
					equalityOperator145=equalityOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_equalityOperator.add(equalityOperator145.getTree());
					// CivlCParser.g:513:13: (y= relationalExpression |y= quantifiedExpression )
					int alt26=2;
					int LA26_0 = input.LA(1);
					if ( (LA26_0==AMPERSAND||LA26_0==CHARACTER_CONSTANT||LA26_0==ELLIPSIS||LA26_0==FLOATING_CONSTANT||LA26_0==IDENTIFIER||LA26_0==INTEGER_CONSTANT||LA26_0==LPAREN||LA26_0==MINUSMINUS||LA26_0==NOT||LA26_0==PLUS||LA26_0==PLUSPLUS||LA26_0==STAR||(LA26_0 >= STRING_LITERAL && LA26_0 <= SUB)||LA26_0==TILDE||LA26_0==ALIGNOF||LA26_0==BIG_O||LA26_0==CALLS||LA26_0==DERIV||LA26_0==GENERIC||LA26_0==HERE||LA26_0==PROCNULL||LA26_0==RESULT||(LA26_0 >= SCOPEOF && LA26_0 <= SELF)||(LA26_0 >= SIZEOF && LA26_0 <= SPAWN)||LA26_0==STATE_NULL||LA26_0==VALUE_AT) ) {
						alt26=1;
					}
					else if ( (LA26_0==EXISTS||LA26_0==FORALL||LA26_0==UNIFORM) ) {
						alt26=2;
					}

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

					switch (alt26) {
						case 1 :
							// CivlCParser.g:513:14: y= relationalExpression
							{
							pushFollow(FOLLOW_relationalExpression_in_equalityExpression3918);
							y=relationalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_relationalExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:513:39: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_equalityExpression3924);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: y, equalityOperator, equalityExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 514:13: -> ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) )
					{
						// CivlCParser.g:514:16: ^( OPERATOR equalityOperator ^( ARGUMENT_LIST $equalityExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_equalityOperator.nextTree());
						// CivlCParser.g:515:17: ^( ARGUMENT_LIST $equalityExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop27;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "equalityExpression"


	public static class equalityOperator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "equalityOperator"
	// CivlCParser.g:520:1: equalityOperator : ( EQUALS | NEQ );
	public final CivlCParser.equalityOperator_return equalityOperator() throws RecognitionException {
		CivlCParser.equalityOperator_return retval = new CivlCParser.equalityOperator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set146=null;

		Object set146_tree=null;

		try {
			// CivlCParser.g:521:2: ( EQUALS | NEQ )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set146=input.LT(1);
			if ( input.LA(1)==EQUALS||input.LA(1)==NEQ ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set146));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "equalityOperator"


	public static class andExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "andExpression"
	// CivlCParser.g:525:1: andExpression : ( equalityExpression -> equalityExpression ) ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )* ;
	public final CivlCParser.andExpression_return andExpression() throws RecognitionException {
		CivlCParser.andExpression_return retval = new CivlCParser.andExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AMPERSAND148=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope equalityExpression147 =null;

		Object AMPERSAND148_tree=null;
		RewriteRuleTokenStream stream_AMPERSAND=new RewriteRuleTokenStream(adaptor,"token AMPERSAND");
		RewriteRuleSubtreeStream stream_equalityExpression=new RewriteRuleSubtreeStream(adaptor,"rule equalityExpression");

		try {
			// CivlCParser.g:526:2: ( ( equalityExpression -> equalityExpression ) ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )* )
			// CivlCParser.g:526:4: ( equalityExpression -> equalityExpression ) ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )*
			{
			// CivlCParser.g:526:4: ( equalityExpression -> equalityExpression )
			// CivlCParser.g:526:6: equalityExpression
			{
			pushFollow(FOLLOW_equalityExpression_in_andExpression4014);
			equalityExpression147=equalityExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_equalityExpression.add(equalityExpression147.getTree());
			// AST REWRITE
			// elements: equalityExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 526:25: -> equalityExpression
			{
				adaptor.addChild(root_0, stream_equalityExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:527:9: ( ( AMPERSAND )=> AMPERSAND y= equalityExpression -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) ) )*
			loop28:
			while (true) {
				int alt28=2;
				int LA28_0 = input.LA(1);
				if ( (LA28_0==AMPERSAND) ) {
					int LA28_2 = input.LA(2);
					if ( (synpred16_CivlCParser()) ) {
						alt28=1;
					}

				}

				switch (alt28) {
				case 1 :
					// CivlCParser.g:527:11: ( AMPERSAND )=> AMPERSAND y= equalityExpression
					{
					AMPERSAND148=(Token)match(input,AMPERSAND,FOLLOW_AMPERSAND_in_andExpression4037); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AMPERSAND.add(AMPERSAND148);

					pushFollow(FOLLOW_equalityExpression_in_andExpression4041);
					y=equalityExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_equalityExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, AMPERSAND, andExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 528:13: -> ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) )
					{
						// CivlCParser.g:528:16: ^( OPERATOR AMPERSAND ^( ARGUMENT_LIST $andExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_AMPERSAND.nextNode());
						// CivlCParser.g:528:37: ^( ARGUMENT_LIST $andExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop28;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "andExpression"


	public static class exclusiveOrExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "exclusiveOrExpression"
	// CivlCParser.g:533:1: exclusiveOrExpression : ( andExpression -> andExpression ) ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )* ;
	public final CivlCParser.exclusiveOrExpression_return exclusiveOrExpression() throws RecognitionException {
		CivlCParser.exclusiveOrExpression_return retval = new CivlCParser.exclusiveOrExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token BITXOR150=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope andExpression149 =null;

		Object BITXOR150_tree=null;
		RewriteRuleTokenStream stream_BITXOR=new RewriteRuleTokenStream(adaptor,"token BITXOR");
		RewriteRuleSubtreeStream stream_andExpression=new RewriteRuleSubtreeStream(adaptor,"rule andExpression");

		try {
			// CivlCParser.g:534:2: ( ( andExpression -> andExpression ) ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )* )
			// CivlCParser.g:534:4: ( andExpression -> andExpression ) ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )*
			{
			// CivlCParser.g:534:4: ( andExpression -> andExpression )
			// CivlCParser.g:534:6: andExpression
			{
			pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression4097);
			andExpression149=andExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_andExpression.add(andExpression149.getTree());
			// AST REWRITE
			// elements: andExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 534:20: -> andExpression
			{
				adaptor.addChild(root_0, stream_andExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:535:9: ( ( BITXOR )=> BITXOR y= andExpression -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) ) )*
			loop29:
			while (true) {
				int alt29=2;
				int LA29_0 = input.LA(1);
				if ( (LA29_0==BITXOR) ) {
					int LA29_2 = input.LA(2);
					if ( (synpred17_CivlCParser()) ) {
						alt29=1;
					}

				}

				switch (alt29) {
				case 1 :
					// CivlCParser.g:535:11: ( BITXOR )=> BITXOR y= andExpression
					{
					BITXOR150=(Token)match(input,BITXOR,FOLLOW_BITXOR_in_exclusiveOrExpression4120); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITXOR.add(BITXOR150);

					pushFollow(FOLLOW_andExpression_in_exclusiveOrExpression4124);
					y=andExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_andExpression.add(y.getTree());
					// AST REWRITE
					// elements: y, BITXOR, exclusiveOrExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 536:13: -> ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) )
					{
						// CivlCParser.g:536:16: ^( OPERATOR BITXOR ^( ARGUMENT_LIST $exclusiveOrExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_BITXOR.nextNode());
						// CivlCParser.g:536:34: ^( ARGUMENT_LIST $exclusiveOrExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop29;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "exclusiveOrExpression"


	public static class inclusiveOrExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "inclusiveOrExpression"
	// CivlCParser.g:541:1: inclusiveOrExpression : ( exclusiveOrExpression -> exclusiveOrExpression ) ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )* ;
	public final CivlCParser.inclusiveOrExpression_return inclusiveOrExpression() throws RecognitionException {
		CivlCParser.inclusiveOrExpression_return retval = new CivlCParser.inclusiveOrExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token BITOR152=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope exclusiveOrExpression151 =null;

		Object BITOR152_tree=null;
		RewriteRuleTokenStream stream_BITOR=new RewriteRuleTokenStream(adaptor,"token BITOR");
		RewriteRuleSubtreeStream stream_exclusiveOrExpression=new RewriteRuleSubtreeStream(adaptor,"rule exclusiveOrExpression");

		try {
			// CivlCParser.g:542:2: ( ( exclusiveOrExpression -> exclusiveOrExpression ) ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )* )
			// CivlCParser.g:542:4: ( exclusiveOrExpression -> exclusiveOrExpression ) ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )*
			{
			// CivlCParser.g:542:4: ( exclusiveOrExpression -> exclusiveOrExpression )
			// CivlCParser.g:542:6: exclusiveOrExpression
			{
			pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4180);
			exclusiveOrExpression151=exclusiveOrExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_exclusiveOrExpression.add(exclusiveOrExpression151.getTree());
			// AST REWRITE
			// elements: exclusiveOrExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 542:28: -> exclusiveOrExpression
			{
				adaptor.addChild(root_0, stream_exclusiveOrExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:543:9: ( ( BITOR )=> BITOR y= exclusiveOrExpression -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) ) )*
			loop30:
			while (true) {
				int alt30=2;
				int LA30_0 = input.LA(1);
				if ( (LA30_0==BITOR) ) {
					int LA30_2 = input.LA(2);
					if ( (synpred18_CivlCParser()) ) {
						alt30=1;
					}

				}

				switch (alt30) {
				case 1 :
					// CivlCParser.g:543:11: ( BITOR )=> BITOR y= exclusiveOrExpression
					{
					BITOR152=(Token)match(input,BITOR,FOLLOW_BITOR_in_inclusiveOrExpression4203); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR152);

					pushFollow(FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4207);
					y=exclusiveOrExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_exclusiveOrExpression.add(y.getTree());
					// AST REWRITE
					// elements: inclusiveOrExpression, BITOR, y
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 544:13: -> ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) )
					{
						// CivlCParser.g:544:16: ^( OPERATOR BITOR ^( ARGUMENT_LIST $inclusiveOrExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_BITOR.nextNode());
						// CivlCParser.g:544:33: ^( ARGUMENT_LIST $inclusiveOrExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop30;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "inclusiveOrExpression"


	public static class logicalAndExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "logicalAndExpression"
	// CivlCParser.g:549:1: logicalAndExpression : ( inclusiveOrExpression -> inclusiveOrExpression ) ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )* ;
	public final CivlCParser.logicalAndExpression_return logicalAndExpression() throws RecognitionException {
		CivlCParser.logicalAndExpression_return retval = new CivlCParser.logicalAndExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token AND154=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope inclusiveOrExpression153 =null;

		Object AND154_tree=null;
		RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND");
		RewriteRuleSubtreeStream stream_inclusiveOrExpression=new RewriteRuleSubtreeStream(adaptor,"rule inclusiveOrExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:550:2: ( ( inclusiveOrExpression -> inclusiveOrExpression ) ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )* )
			// CivlCParser.g:550:4: ( inclusiveOrExpression -> inclusiveOrExpression ) ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )*
			{
			// CivlCParser.g:550:4: ( inclusiveOrExpression -> inclusiveOrExpression )
			// CivlCParser.g:550:6: inclusiveOrExpression
			{
			pushFollow(FOLLOW_inclusiveOrExpression_in_logicalAndExpression4263);
			inclusiveOrExpression153=inclusiveOrExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_inclusiveOrExpression.add(inclusiveOrExpression153.getTree());
			// AST REWRITE
			// elements: inclusiveOrExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 550:28: -> inclusiveOrExpression
			{
				adaptor.addChild(root_0, stream_inclusiveOrExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:551:9: ( ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression ) -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) ) )*
			loop32:
			while (true) {
				int alt32=2;
				int LA32_0 = input.LA(1);
				if ( (LA32_0==AND) ) {
					int LA32_2 = input.LA(2);
					if ( (synpred19_CivlCParser()) ) {
						alt32=1;
					}

				}

				switch (alt32) {
				case 1 :
					// CivlCParser.g:551:11: ( AND )=> AND (y= inclusiveOrExpression |y= quantifiedExpression )
					{
					AND154=(Token)match(input,AND,FOLLOW_AND_in_logicalAndExpression4286); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_AND.add(AND154);

					// CivlCParser.g:551:23: (y= inclusiveOrExpression |y= quantifiedExpression )
					int alt31=2;
					int LA31_0 = input.LA(1);
					if ( (LA31_0==AMPERSAND||LA31_0==CHARACTER_CONSTANT||LA31_0==ELLIPSIS||LA31_0==FLOATING_CONSTANT||LA31_0==IDENTIFIER||LA31_0==INTEGER_CONSTANT||LA31_0==LPAREN||LA31_0==MINUSMINUS||LA31_0==NOT||LA31_0==PLUS||LA31_0==PLUSPLUS||LA31_0==STAR||(LA31_0 >= STRING_LITERAL && LA31_0 <= SUB)||LA31_0==TILDE||LA31_0==ALIGNOF||LA31_0==BIG_O||LA31_0==CALLS||LA31_0==DERIV||LA31_0==GENERIC||LA31_0==HERE||LA31_0==PROCNULL||LA31_0==RESULT||(LA31_0 >= SCOPEOF && LA31_0 <= SELF)||(LA31_0 >= SIZEOF && LA31_0 <= SPAWN)||LA31_0==STATE_NULL||LA31_0==VALUE_AT) ) {
						alt31=1;
					}
					else if ( (LA31_0==EXISTS||LA31_0==FORALL||LA31_0==UNIFORM) ) {
						alt31=2;
					}

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

					switch (alt31) {
						case 1 :
							// CivlCParser.g:551:24: y= inclusiveOrExpression
							{
							pushFollow(FOLLOW_inclusiveOrExpression_in_logicalAndExpression4291);
							y=inclusiveOrExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_inclusiveOrExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:551:50: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_logicalAndExpression4297);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: y, AND, logicalAndExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 552:13: -> ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) )
					{
						// CivlCParser.g:552:16: ^( OPERATOR AND ^( ARGUMENT_LIST $logicalAndExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_AND.nextNode());
						// CivlCParser.g:552:31: ^( ARGUMENT_LIST $logicalAndExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop32;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "logicalAndExpression"


	public static class logicalOrExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "logicalOrExpression"
	// CivlCParser.g:557:1: logicalOrExpression : ( logicalAndExpression -> logicalAndExpression ) ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )* ;
	public final CivlCParser.logicalOrExpression_return logicalOrExpression() throws RecognitionException {
		CivlCParser.logicalOrExpression_return retval = new CivlCParser.logicalOrExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token OR156=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalAndExpression155 =null;

		Object OR156_tree=null;
		RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR");
		RewriteRuleSubtreeStream stream_logicalAndExpression=new RewriteRuleSubtreeStream(adaptor,"rule logicalAndExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:558:2: ( ( logicalAndExpression -> logicalAndExpression ) ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )* )
			// CivlCParser.g:558:4: ( logicalAndExpression -> logicalAndExpression ) ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )*
			{
			// CivlCParser.g:558:4: ( logicalAndExpression -> logicalAndExpression )
			// CivlCParser.g:558:6: logicalAndExpression
			{
			pushFollow(FOLLOW_logicalAndExpression_in_logicalOrExpression4354);
			logicalAndExpression155=logicalAndExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalAndExpression.add(logicalAndExpression155.getTree());
			// AST REWRITE
			// elements: logicalAndExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 558:27: -> logicalAndExpression
			{
				adaptor.addChild(root_0, stream_logicalAndExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:559:9: ( ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression ) -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) ) )*
			loop34:
			while (true) {
				int alt34=2;
				int LA34_0 = input.LA(1);
				if ( (LA34_0==OR) ) {
					int LA34_2 = input.LA(2);
					if ( (synpred20_CivlCParser()) ) {
						alt34=1;
					}

				}

				switch (alt34) {
				case 1 :
					// CivlCParser.g:559:11: ( OR )=> OR (y= logicalAndExpression |y= quantifiedExpression )
					{
					OR156=(Token)match(input,OR,FOLLOW_OR_in_logicalOrExpression4377); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_OR.add(OR156);

					// CivlCParser.g:559:21: (y= logicalAndExpression |y= quantifiedExpression )
					int alt33=2;
					int LA33_0 = input.LA(1);
					if ( (LA33_0==AMPERSAND||LA33_0==CHARACTER_CONSTANT||LA33_0==ELLIPSIS||LA33_0==FLOATING_CONSTANT||LA33_0==IDENTIFIER||LA33_0==INTEGER_CONSTANT||LA33_0==LPAREN||LA33_0==MINUSMINUS||LA33_0==NOT||LA33_0==PLUS||LA33_0==PLUSPLUS||LA33_0==STAR||(LA33_0 >= STRING_LITERAL && LA33_0 <= SUB)||LA33_0==TILDE||LA33_0==ALIGNOF||LA33_0==BIG_O||LA33_0==CALLS||LA33_0==DERIV||LA33_0==GENERIC||LA33_0==HERE||LA33_0==PROCNULL||LA33_0==RESULT||(LA33_0 >= SCOPEOF && LA33_0 <= SELF)||(LA33_0 >= SIZEOF && LA33_0 <= SPAWN)||LA33_0==STATE_NULL||LA33_0==VALUE_AT) ) {
						alt33=1;
					}
					else if ( (LA33_0==EXISTS||LA33_0==FORALL||LA33_0==UNIFORM) ) {
						alt33=2;
					}

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

					switch (alt33) {
						case 1 :
							// CivlCParser.g:559:22: y= logicalAndExpression
							{
							pushFollow(FOLLOW_logicalAndExpression_in_logicalOrExpression4382);
							y=logicalAndExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_logicalAndExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:559:47: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_logicalOrExpression4388);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: y, OR, logicalOrExpression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 560:13: -> ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) )
					{
						// CivlCParser.g:560:16: ^( OPERATOR OR ^( ARGUMENT_LIST $logicalOrExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_OR.nextNode());
						// CivlCParser.g:560:30: ^( ARGUMENT_LIST $logicalOrExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop34;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "logicalOrExpression"


	public static class logicalImpliesExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "logicalImpliesExpression"
	// CivlCParser.g:566:1: logicalImpliesExpression : (x= logicalOrExpression -> $x) ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )? ;
	public final CivlCParser.logicalImpliesExpression_return logicalImpliesExpression() throws RecognitionException {
		CivlCParser.logicalImpliesExpression_return retval = new CivlCParser.logicalImpliesExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IMPLIES157=null;
		ParserRuleReturnScope x =null;
		ParserRuleReturnScope y =null;

		Object IMPLIES157_tree=null;
		RewriteRuleTokenStream stream_IMPLIES=new RewriteRuleTokenStream(adaptor,"token IMPLIES");
		RewriteRuleSubtreeStream stream_logicalOrExpression=new RewriteRuleSubtreeStream(adaptor,"rule logicalOrExpression");
		RewriteRuleSubtreeStream stream_logicalImpliesExpression=new RewriteRuleSubtreeStream(adaptor,"rule logicalImpliesExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:567:2: ( (x= logicalOrExpression -> $x) ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )? )
			// CivlCParser.g:567:4: (x= logicalOrExpression -> $x) ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )?
			{
			// CivlCParser.g:567:4: (x= logicalOrExpression -> $x)
			// CivlCParser.g:567:6: x= logicalOrExpression
			{
			pushFollow(FOLLOW_logicalOrExpression_in_logicalImpliesExpression4447);
			x=logicalOrExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalOrExpression.add(x.getTree());
			// AST REWRITE
			// elements: x
			// token labels: 
			// rule labels: x, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 567:28: -> $x
			{
				adaptor.addChild(root_0, stream_x.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:568:9: ( ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression ) -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) ) )?
			int alt36=2;
			int LA36_0 = input.LA(1);
			if ( (LA36_0==IMPLIES) ) {
				int LA36_1 = input.LA(2);
				if ( (synpred21_CivlCParser()) ) {
					alt36=1;
				}
			}
			switch (alt36) {
				case 1 :
					// CivlCParser.g:568:11: ( IMPLIES )=> IMPLIES (y= logicalImpliesExpression |y= quantifiedExpression )
					{
					IMPLIES157=(Token)match(input,IMPLIES,FOLLOW_IMPLIES_in_logicalImpliesExpression4471); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IMPLIES.add(IMPLIES157);

					// CivlCParser.g:568:31: (y= logicalImpliesExpression |y= quantifiedExpression )
					int alt35=2;
					int LA35_0 = input.LA(1);
					if ( (LA35_0==AMPERSAND||LA35_0==CHARACTER_CONSTANT||LA35_0==ELLIPSIS||LA35_0==FLOATING_CONSTANT||LA35_0==IDENTIFIER||LA35_0==INTEGER_CONSTANT||LA35_0==LPAREN||LA35_0==MINUSMINUS||LA35_0==NOT||LA35_0==PLUS||LA35_0==PLUSPLUS||LA35_0==STAR||(LA35_0 >= STRING_LITERAL && LA35_0 <= SUB)||LA35_0==TILDE||LA35_0==ALIGNOF||LA35_0==BIG_O||LA35_0==CALLS||LA35_0==DERIV||LA35_0==GENERIC||LA35_0==HERE||LA35_0==PROCNULL||LA35_0==RESULT||(LA35_0 >= SCOPEOF && LA35_0 <= SELF)||(LA35_0 >= SIZEOF && LA35_0 <= SPAWN)||LA35_0==STATE_NULL||LA35_0==VALUE_AT) ) {
						alt35=1;
					}
					else if ( (LA35_0==EXISTS||LA35_0==FORALL||LA35_0==UNIFORM) ) {
						alt35=2;
					}

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

					switch (alt35) {
						case 1 :
							// CivlCParser.g:568:32: y= logicalImpliesExpression
							{
							pushFollow(FOLLOW_logicalImpliesExpression_in_logicalImpliesExpression4476);
							y=logicalImpliesExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_logicalImpliesExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:568:61: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_logicalImpliesExpression4482);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: y, IMPLIES, x
					// token labels: 
					// rule labels: x, y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_x=new RewriteRuleSubtreeStream(adaptor,"rule x",x!=null?x.getTree():null);
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 569:13: -> ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) )
					{
						// CivlCParser.g:569:16: ^( OPERATOR IMPLIES ^( ARGUMENT_LIST $x $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_IMPLIES.nextNode());
						// CivlCParser.g:569:35: ^( ARGUMENT_LIST $x $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_x.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "logicalImpliesExpression"


	public static class conditionalExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "conditionalExpression"
	// CivlCParser.g:575:1: conditionalExpression : logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression ) ;
	public final CivlCParser.conditionalExpression_return conditionalExpression() throws RecognitionException {
		CivlCParser.conditionalExpression_return retval = new CivlCParser.conditionalExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token QMARK159=null;
		Token COLON161=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope logicalImpliesExpression158 =null;
		ParserRuleReturnScope expression160 =null;

		Object QMARK159_tree=null;
		Object COLON161_tree=null;
		RewriteRuleTokenStream stream_QMARK=new RewriteRuleTokenStream(adaptor,"token QMARK");
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_conditionalExpression=new RewriteRuleSubtreeStream(adaptor,"rule conditionalExpression");
		RewriteRuleSubtreeStream stream_logicalImpliesExpression=new RewriteRuleSubtreeStream(adaptor,"rule logicalImpliesExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:576:2: ( logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression ) )
			// CivlCParser.g:576:4: logicalImpliesExpression ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			{
			pushFollow(FOLLOW_logicalImpliesExpression_in_conditionalExpression4540);
			logicalImpliesExpression158=logicalImpliesExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_logicalImpliesExpression.add(logicalImpliesExpression158.getTree());
			// CivlCParser.g:577:9: ( ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression ) -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) ) | -> logicalImpliesExpression )
			int alt38=2;
			int LA38_0 = input.LA(1);
			if ( (LA38_0==QMARK) ) {
				int LA38_1 = input.LA(2);
				if ( (synpred22_CivlCParser()) ) {
					alt38=1;
				}
				else if ( (true) ) {
					alt38=2;
				}

			}
			else if ( (LA38_0==EOF||(LA38_0 >= AMPERSAND && LA38_0 <= AND)||(LA38_0 >= ASSIGN && LA38_0 <= BITXOREQ)||(LA38_0 >= COLON && LA38_0 <= COMMA)||(LA38_0 >= DIV && LA38_0 <= DIVEQ)||LA38_0==DOTDOT||LA38_0==EQUALS||(LA38_0 >= GT && LA38_0 <= HASH)||LA38_0==IMPLIES||(LA38_0 >= LT && LA38_0 <= LTE)||(LA38_0 >= MOD && LA38_0 <= NEQ)||LA38_0==OR||(LA38_0 >= PLUS && LA38_0 <= PLUSEQ)||(LA38_0 >= RCURLY && LA38_0 <= RPAREN)||LA38_0==RSQUARE||(LA38_0 >= SEMI && LA38_0 <= STAREQ)||(LA38_0 >= SUB && LA38_0 <= SUBEQ)||LA38_0==ASSIGNS||LA38_0==DEPENDS||LA38_0==ENSURES||LA38_0==GUARD||LA38_0==READS||LA38_0==REQUIRES) ) {
				alt38=2;
			}

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

			switch (alt38) {
				case 1 :
					// CivlCParser.g:577:11: ( QMARK )=> QMARK expression COLON (y= conditionalExpression |y= quantifiedExpression )
					{
					QMARK159=(Token)match(input,QMARK,FOLLOW_QMARK_in_conditionalExpression4557); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_QMARK.add(QMARK159);

					pushFollow(FOLLOW_expression_in_conditionalExpression4559);
					expression160=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression160.getTree());
					COLON161=(Token)match(input,COLON,FOLLOW_COLON_in_conditionalExpression4561); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON161);

					// CivlCParser.g:578:13: (y= conditionalExpression |y= quantifiedExpression )
					int alt37=2;
					int LA37_0 = input.LA(1);
					if ( (LA37_0==AMPERSAND||LA37_0==CHARACTER_CONSTANT||LA37_0==ELLIPSIS||LA37_0==FLOATING_CONSTANT||LA37_0==IDENTIFIER||LA37_0==INTEGER_CONSTANT||LA37_0==LPAREN||LA37_0==MINUSMINUS||LA37_0==NOT||LA37_0==PLUS||LA37_0==PLUSPLUS||LA37_0==STAR||(LA37_0 >= STRING_LITERAL && LA37_0 <= SUB)||LA37_0==TILDE||LA37_0==ALIGNOF||LA37_0==BIG_O||LA37_0==CALLS||LA37_0==DERIV||LA37_0==GENERIC||LA37_0==HERE||LA37_0==PROCNULL||LA37_0==RESULT||(LA37_0 >= SCOPEOF && LA37_0 <= SELF)||(LA37_0 >= SIZEOF && LA37_0 <= SPAWN)||LA37_0==STATE_NULL||LA37_0==VALUE_AT) ) {
						alt37=1;
					}
					else if ( (LA37_0==EXISTS||LA37_0==FORALL||LA37_0==UNIFORM) ) {
						alt37=2;
					}

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

					switch (alt37) {
						case 1 :
							// CivlCParser.g:578:14: y= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_conditionalExpression4578);
							y=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(y.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:578:40: y= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_conditionalExpression4584);
							y=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(y.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: QMARK, y, logicalImpliesExpression, expression
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 579:13: -> ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) )
					{
						// CivlCParser.g:579:16: ^( OPERATOR QMARK ^( ARGUMENT_LIST logicalImpliesExpression expression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_QMARK.nextNode());
						// CivlCParser.g:580:17: ^( ARGUMENT_LIST logicalImpliesExpression expression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_logicalImpliesExpression.nextTree());
						adaptor.addChild(root_2, stream_expression.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:584:11: 
					{
					// AST REWRITE
					// elements: logicalImpliesExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 584:11: -> logicalImpliesExpression
					{
						adaptor.addChild(root_0, stream_logicalImpliesExpression.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "conditionalExpression"


	public static class interval_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "interval"
	// CivlCParser.g:589:1: interval : LSQUARE conditionalExpression COMMA conditionalExpression RSQUARE -> ^( INTERVAL conditionalExpression conditionalExpression ) ;
	public final CivlCParser.interval_return interval() throws RecognitionException {
		CivlCParser.interval_return retval = new CivlCParser.interval_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LSQUARE162=null;
		Token COMMA164=null;
		Token RSQUARE166=null;
		ParserRuleReturnScope conditionalExpression163 =null;
		ParserRuleReturnScope conditionalExpression165 =null;

		Object LSQUARE162_tree=null;
		Object COMMA164_tree=null;
		Object RSQUARE166_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleSubtreeStream stream_conditionalExpression=new RewriteRuleSubtreeStream(adaptor,"rule conditionalExpression");

		try {
			// CivlCParser.g:590:5: ( LSQUARE conditionalExpression COMMA conditionalExpression RSQUARE -> ^( INTERVAL conditionalExpression conditionalExpression ) )
			// CivlCParser.g:590:7: LSQUARE conditionalExpression COMMA conditionalExpression RSQUARE
			{
			LSQUARE162=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_interval4729); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE162);

			pushFollow(FOLLOW_conditionalExpression_in_interval4731);
			conditionalExpression163=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_conditionalExpression.add(conditionalExpression163.getTree());
			COMMA164=(Token)match(input,COMMA,FOLLOW_COMMA_in_interval4733); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA164);

			pushFollow(FOLLOW_conditionalExpression_in_interval4735);
			conditionalExpression165=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_conditionalExpression.add(conditionalExpression165.getTree());
			RSQUARE166=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_interval4737); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE166);

			// AST REWRITE
			// elements: conditionalExpression, conditionalExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 591:9: -> ^( INTERVAL conditionalExpression conditionalExpression )
			{
				// CivlCParser.g:591:12: ^( INTERVAL conditionalExpression conditionalExpression )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INTERVAL, "INTERVAL"), root_1);
				adaptor.addChild(root_1, stream_conditionalExpression.nextTree());
				adaptor.addChild(root_1, stream_conditionalExpression.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "interval"


	public static class intervalSeq_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "intervalSeq"
	// CivlCParser.g:595:1: intervalSeq : (i+= interval (i+= interval )* -> ^( INTERVAL_SEQ ( $i)+ ) | -> ABSENT );
	public final CivlCParser.intervalSeq_return intervalSeq() throws RecognitionException {
		CivlCParser.intervalSeq_return retval = new CivlCParser.intervalSeq_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		List<Object> list_i=null;
		RuleReturnScope i = null;
		RewriteRuleSubtreeStream stream_interval=new RewriteRuleSubtreeStream(adaptor,"rule interval");

		try {
			// CivlCParser.g:596:5: (i+= interval (i+= interval )* -> ^( INTERVAL_SEQ ( $i)+ ) | -> ABSENT )
			int alt40=2;
			int LA40_0 = input.LA(1);
			if ( (LA40_0==LSQUARE) ) {
				alt40=1;
			}
			else if ( (LA40_0==LPAREN||LA40_0==RPAREN) ) {
				alt40=2;
			}

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

			switch (alt40) {
				case 1 :
					// CivlCParser.g:596:7: i+= interval (i+= interval )*
					{
					pushFollow(FOLLOW_interval_in_intervalSeq4777);
					i=interval();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_interval.add(i.getTree());
					if (list_i==null) list_i=new ArrayList<Object>();
					list_i.add(i.getTree());
					// CivlCParser.g:596:21: (i+= interval )*
					loop39:
					while (true) {
						int alt39=2;
						int LA39_0 = input.LA(1);
						if ( (LA39_0==LSQUARE) ) {
							alt39=1;
						}

						switch (alt39) {
						case 1 :
							// CivlCParser.g:596:21: i+= interval
							{
							pushFollow(FOLLOW_interval_in_intervalSeq4782);
							i=interval();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_interval.add(i.getTree());
							if (list_i==null) list_i=new ArrayList<Object>();
							list_i.add(i.getTree());
							}
							break;

						default :
							break loop39;
						}
					}

					// AST REWRITE
					// elements: i
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: i
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"token i",list_i);
					root_0 = (Object)adaptor.nil();
					// 596:34: -> ^( INTERVAL_SEQ ( $i)+ )
					{
						// CivlCParser.g:596:37: ^( INTERVAL_SEQ ( $i)+ )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INTERVAL_SEQ, "INTERVAL_SEQ"), root_1);
						if ( !(stream_i.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_i.hasNext() ) {
							adaptor.addChild(root_1, stream_i.nextTree());
						}
						stream_i.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:597:7: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 597:7: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "intervalSeq"


	public static class arrayLambdaExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arrayLambdaExpression"
	// CivlCParser.g:604:1: arrayLambdaExpression : ( ( ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression ) ) -> ^( LAMBDA typeName boundVariableDeclarationList $cond1 $restrict) | LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList RPAREN (cond2= assignmentExpression |cond2= quantifiedExpression ) -> ^( LAMBDA typeName boundVariableDeclarationList $cond2) );
	public final CivlCParser.arrayLambdaExpression_return arrayLambdaExpression() throws RecognitionException {
		CivlCParser.arrayLambdaExpression_return retval = new CivlCParser.arrayLambdaExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LPAREN167=null;
		Token RPAREN169=null;
		Token LAMBDA170=null;
		Token LPAREN171=null;
		Token BITOR173=null;
		Token RPAREN174=null;
		Token LPAREN175=null;
		Token RPAREN177=null;
		Token LAMBDA178=null;
		Token LPAREN179=null;
		Token RPAREN181=null;
		ParserRuleReturnScope restrict =null;
		ParserRuleReturnScope cond1 =null;
		ParserRuleReturnScope cond2 =null;
		ParserRuleReturnScope typeName168 =null;
		ParserRuleReturnScope boundVariableDeclarationList172 =null;
		ParserRuleReturnScope typeName176 =null;
		ParserRuleReturnScope boundVariableDeclarationList180 =null;

		Object LPAREN167_tree=null;
		Object RPAREN169_tree=null;
		Object LAMBDA170_tree=null;
		Object LPAREN171_tree=null;
		Object BITOR173_tree=null;
		Object RPAREN174_tree=null;
		Object LPAREN175_tree=null;
		Object RPAREN177_tree=null;
		Object LAMBDA178_tree=null;
		Object LPAREN179_tree=null;
		Object RPAREN181_tree=null;
		RewriteRuleTokenStream stream_BITOR=new RewriteRuleTokenStream(adaptor,"token BITOR");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_LAMBDA=new RewriteRuleTokenStream(adaptor,"token LAMBDA");
		RewriteRuleSubtreeStream stream_boundVariableDeclarationList=new RewriteRuleSubtreeStream(adaptor,"rule boundVariableDeclarationList");
		RewriteRuleSubtreeStream stream_conditionalExpression=new RewriteRuleSubtreeStream(adaptor,"rule conditionalExpression");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:605:2: ( ( ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression ) ) -> ^( LAMBDA typeName boundVariableDeclarationList $cond1 $restrict) | LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList RPAREN (cond2= assignmentExpression |cond2= quantifiedExpression ) -> ^( LAMBDA typeName boundVariableDeclarationList $cond2) )
			int alt44=2;
			int LA44_0 = input.LA(1);
			if ( (LA44_0==LPAREN) ) {
				int LA44_1 = input.LA(2);
				if ( (synpred23_CivlCParser()) ) {
					alt44=1;
				}
				else if ( (true) ) {
					alt44=2;
				}

			}

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

			switch (alt44) {
				case 1 :
					// CivlCParser.g:605:4: ( ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression ) )
					{
					// CivlCParser.g:605:4: ( ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression ) )
					// CivlCParser.g:605:5: ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )=> LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR (restrict= conditionalExpression |restrict= quantifiedExpression ) RPAREN (cond1= assignmentExpression |cond1= quantifiedExpression )
					{
					LPAREN167=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression4866); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN167);

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression4868);
					typeName168=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName168.getTree());
					RPAREN169=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4870); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN169);

					LAMBDA170=(Token)match(input,LAMBDA,FOLLOW_LAMBDA_in_arrayLambdaExpression4872); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LAMBDA.add(LAMBDA170);

					LPAREN171=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression4874); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN171);

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4888);
					boundVariableDeclarationList172=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList172.getTree());
					BITOR173=(Token)match(input,BITOR,FOLLOW_BITOR_in_arrayLambdaExpression4890); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BITOR.add(BITOR173);

					// CivlCParser.g:609:13: (restrict= conditionalExpression |restrict= quantifiedExpression )
					int alt41=2;
					int LA41_0 = input.LA(1);
					if ( (LA41_0==AMPERSAND||LA41_0==CHARACTER_CONSTANT||LA41_0==ELLIPSIS||LA41_0==FLOATING_CONSTANT||LA41_0==IDENTIFIER||LA41_0==INTEGER_CONSTANT||LA41_0==LPAREN||LA41_0==MINUSMINUS||LA41_0==NOT||LA41_0==PLUS||LA41_0==PLUSPLUS||LA41_0==STAR||(LA41_0 >= STRING_LITERAL && LA41_0 <= SUB)||LA41_0==TILDE||LA41_0==ALIGNOF||LA41_0==BIG_O||LA41_0==CALLS||LA41_0==DERIV||LA41_0==GENERIC||LA41_0==HERE||LA41_0==PROCNULL||LA41_0==RESULT||(LA41_0 >= SCOPEOF && LA41_0 <= SELF)||(LA41_0 >= SIZEOF && LA41_0 <= SPAWN)||LA41_0==STATE_NULL||LA41_0==VALUE_AT) ) {
						alt41=1;
					}
					else if ( (LA41_0==EXISTS||LA41_0==FORALL||LA41_0==UNIFORM) ) {
						alt41=2;
					}

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

					switch (alt41) {
						case 1 :
							// CivlCParser.g:609:14: restrict= conditionalExpression
							{
							pushFollow(FOLLOW_conditionalExpression_in_arrayLambdaExpression4907);
							restrict=conditionalExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_conditionalExpression.add(restrict.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:609:47: restrict= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression4913);
							restrict=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(restrict.getTree());
							}
							break;

					}

					RPAREN174=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4928); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN174);

					// CivlCParser.g:611:13: (cond1= assignmentExpression |cond1= quantifiedExpression )
					int alt42=2;
					int LA42_0 = input.LA(1);
					if ( (LA42_0==AMPERSAND||LA42_0==CHARACTER_CONSTANT||LA42_0==ELLIPSIS||LA42_0==FLOATING_CONSTANT||LA42_0==IDENTIFIER||LA42_0==INTEGER_CONSTANT||LA42_0==LPAREN||LA42_0==MINUSMINUS||LA42_0==NOT||LA42_0==PLUS||LA42_0==PLUSPLUS||LA42_0==STAR||(LA42_0 >= STRING_LITERAL && LA42_0 <= SUB)||LA42_0==TILDE||LA42_0==ALIGNOF||LA42_0==BIG_O||LA42_0==CALLS||LA42_0==DERIV||LA42_0==GENERIC||LA42_0==HERE||LA42_0==PROCNULL||LA42_0==RESULT||(LA42_0 >= SCOPEOF && LA42_0 <= SELF)||(LA42_0 >= SIZEOF && LA42_0 <= SPAWN)||LA42_0==STATE_NULL||LA42_0==VALUE_AT) ) {
						alt42=1;
					}
					else if ( (LA42_0==EXISTS||LA42_0==FORALL||LA42_0==UNIFORM) ) {
						alt42=2;
					}

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

					switch (alt42) {
						case 1 :
							// CivlCParser.g:611:14: cond1= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_arrayLambdaExpression4945);
							cond1=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(cond1.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:611:43: cond1= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression4951);
							cond1=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(cond1.getTree());
							}
							break;

					}

					}

					// AST REWRITE
					// elements: cond1, LAMBDA, typeName, boundVariableDeclarationList, restrict
					// token labels: 
					// rule labels: cond1, restrict, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_cond1=new RewriteRuleSubtreeStream(adaptor,"rule cond1",cond1!=null?cond1.getTree():null);
					RewriteRuleSubtreeStream stream_restrict=new RewriteRuleSubtreeStream(adaptor,"rule restrict",restrict!=null?restrict.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 612:9: -> ^( LAMBDA typeName boundVariableDeclarationList $cond1 $restrict)
					{
						// CivlCParser.g:612:12: ^( LAMBDA typeName boundVariableDeclarationList $cond1 $restrict)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_LAMBDA.nextNode(), root_1);
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_boundVariableDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_cond1.nextTree());
						adaptor.addChild(root_1, stream_restrict.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:613:7: LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList RPAREN (cond2= assignmentExpression |cond2= quantifiedExpression )
					{
					LPAREN175=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression4985); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN175);

					pushFollow(FOLLOW_typeName_in_arrayLambdaExpression4987);
					typeName176=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName176.getTree());
					RPAREN177=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression4989); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN177);

					LAMBDA178=(Token)match(input,LAMBDA,FOLLOW_LAMBDA_in_arrayLambdaExpression4991); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LAMBDA.add(LAMBDA178);

					LPAREN179=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_arrayLambdaExpression4993); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN179);

					pushFollow(FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression5003);
					boundVariableDeclarationList180=boundVariableDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationList.add(boundVariableDeclarationList180.getTree());
					RPAREN181=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_arrayLambdaExpression5005); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN181);

					// CivlCParser.g:615:9: (cond2= assignmentExpression |cond2= quantifiedExpression )
					int alt43=2;
					int LA43_0 = input.LA(1);
					if ( (LA43_0==AMPERSAND||LA43_0==CHARACTER_CONSTANT||LA43_0==ELLIPSIS||LA43_0==FLOATING_CONSTANT||LA43_0==IDENTIFIER||LA43_0==INTEGER_CONSTANT||LA43_0==LPAREN||LA43_0==MINUSMINUS||LA43_0==NOT||LA43_0==PLUS||LA43_0==PLUSPLUS||LA43_0==STAR||(LA43_0 >= STRING_LITERAL && LA43_0 <= SUB)||LA43_0==TILDE||LA43_0==ALIGNOF||LA43_0==BIG_O||LA43_0==CALLS||LA43_0==DERIV||LA43_0==GENERIC||LA43_0==HERE||LA43_0==PROCNULL||LA43_0==RESULT||(LA43_0 >= SCOPEOF && LA43_0 <= SELF)||(LA43_0 >= SIZEOF && LA43_0 <= SPAWN)||LA43_0==STATE_NULL||LA43_0==VALUE_AT) ) {
						alt43=1;
					}
					else if ( (LA43_0==EXISTS||LA43_0==FORALL||LA43_0==UNIFORM) ) {
						alt43=2;
					}

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

					switch (alt43) {
						case 1 :
							// CivlCParser.g:615:10: cond2= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_arrayLambdaExpression5018);
							cond2=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(cond2.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:615:39: cond2= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_arrayLambdaExpression5024);
							cond2=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(cond2.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: typeName, boundVariableDeclarationList, LAMBDA, cond2
					// token labels: 
					// rule labels: cond2, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_cond2=new RewriteRuleSubtreeStream(adaptor,"rule cond2",cond2!=null?cond2.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 616:9: -> ^( LAMBDA typeName boundVariableDeclarationList $cond2)
					{
						// CivlCParser.g:616:12: ^( LAMBDA typeName boundVariableDeclarationList $cond2)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_LAMBDA.nextNode(), root_1);
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_boundVariableDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_cond2.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arrayLambdaExpression"


	public static class boundVariableDeclarationSubList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "boundVariableDeclarationSubList"
	// CivlCParser.g:619:1: boundVariableDeclarationSubList : typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )? -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? ) ;
	public final CivlCParser.boundVariableDeclarationSubList_return boundVariableDeclarationSubList() throws RecognitionException {
		CivlCParser.boundVariableDeclarationSubList_return retval = new CivlCParser.boundVariableDeclarationSubList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER183=null;
		Token COMMA184=null;
		Token IDENTIFIER185=null;
		Token COLON186=null;
		ParserRuleReturnScope typeName182 =null;
		ParserRuleReturnScope rangeExpression187 =null;

		Object IDENTIFIER183_tree=null;
		Object COMMA184_tree=null;
		Object IDENTIFIER185_tree=null;
		Object COLON186_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_rangeExpression=new RewriteRuleSubtreeStream(adaptor,"rule rangeExpression");

		try {
			// CivlCParser.g:620:2: ( typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )? -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? ) )
			// CivlCParser.g:620:4: typeName IDENTIFIER ( COMMA IDENTIFIER )* ( COLON rangeExpression )?
			{
			pushFollow(FOLLOW_typeName_in_boundVariableDeclarationSubList5057);
			typeName182=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName182.getTree());
			IDENTIFIER183=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5059); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER183);

			// CivlCParser.g:620:24: ( COMMA IDENTIFIER )*
			loop45:
			while (true) {
				int alt45=2;
				int LA45_0 = input.LA(1);
				if ( (LA45_0==COMMA) ) {
					alt45=1;
				}

				switch (alt45) {
				case 1 :
					// CivlCParser.g:620:25: COMMA IDENTIFIER
					{
					COMMA184=(Token)match(input,COMMA,FOLLOW_COMMA_in_boundVariableDeclarationSubList5062); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA184);

					IDENTIFIER185=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5064); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER185);

					}
					break;

				default :
					break loop45;
				}
			}

			// CivlCParser.g:620:44: ( COLON rangeExpression )?
			int alt46=2;
			int LA46_0 = input.LA(1);
			if ( (LA46_0==COLON) ) {
				alt46=1;
			}
			switch (alt46) {
				case 1 :
					// CivlCParser.g:620:45: COLON rangeExpression
					{
					COLON186=(Token)match(input,COLON,FOLLOW_COLON_in_boundVariableDeclarationSubList5069); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON186);

					pushFollow(FOLLOW_rangeExpression_in_boundVariableDeclarationSubList5071);
					rangeExpression187=rangeExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_rangeExpression.add(rangeExpression187.getTree());
					}
					break;

			}

			// AST REWRITE
			// elements: typeName, rangeExpression, IDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 621:9: -> ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? )
			{
				// CivlCParser.g:621:12: ^( BOUND_VARIABLE_DECLARATION typeName ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ ) ( rangeExpression )? )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOUND_VARIABLE_DECLARATION, "BOUND_VARIABLE_DECLARATION"), root_1);
				adaptor.addChild(root_1, stream_typeName.nextTree());
				// CivlCParser.g:622:13: ^( BOUND_VARIABLE_NAME_LIST ( IDENTIFIER )+ )
				{
				Object root_2 = (Object)adaptor.nil();
				root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOUND_VARIABLE_NAME_LIST, "BOUND_VARIABLE_NAME_LIST"), root_2);
				if ( !(stream_IDENTIFIER.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_IDENTIFIER.hasNext() ) {
					adaptor.addChild(root_2, stream_IDENTIFIER.nextNode());
				}
				stream_IDENTIFIER.reset();

				adaptor.addChild(root_1, root_2);
				}

				// CivlCParser.g:622:53: ( rangeExpression )?
				if ( stream_rangeExpression.hasNext() ) {
					adaptor.addChild(root_1, stream_rangeExpression.nextTree());
				}
				stream_rangeExpression.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "boundVariableDeclarationSubList"


	public static class boundVariableDeclarationList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "boundVariableDeclarationList"
	// CivlCParser.g:625:1: boundVariableDeclarationList : boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )* -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ ) ;
	public final CivlCParser.boundVariableDeclarationList_return boundVariableDeclarationList() throws RecognitionException {
		CivlCParser.boundVariableDeclarationList_return retval = new CivlCParser.boundVariableDeclarationList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEMI189=null;
		ParserRuleReturnScope boundVariableDeclarationSubList188 =null;
		ParserRuleReturnScope boundVariableDeclarationSubList190 =null;

		Object SEMI189_tree=null;
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_boundVariableDeclarationSubList=new RewriteRuleSubtreeStream(adaptor,"rule boundVariableDeclarationSubList");

		try {
			// CivlCParser.g:626:2: ( boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )* -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ ) )
			// CivlCParser.g:626:4: boundVariableDeclarationSubList ( SEMI boundVariableDeclarationSubList )*
			{
			pushFollow(FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5122);
			boundVariableDeclarationSubList188=boundVariableDeclarationSubList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_boundVariableDeclarationSubList.add(boundVariableDeclarationSubList188.getTree());
			// CivlCParser.g:626:36: ( SEMI boundVariableDeclarationSubList )*
			loop47:
			while (true) {
				int alt47=2;
				int LA47_0 = input.LA(1);
				if ( (LA47_0==SEMI) ) {
					alt47=1;
				}

				switch (alt47) {
				case 1 :
					// CivlCParser.g:626:37: SEMI boundVariableDeclarationSubList
					{
					SEMI189=(Token)match(input,SEMI,FOLLOW_SEMI_in_boundVariableDeclarationList5125); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI189);

					pushFollow(FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5127);
					boundVariableDeclarationSubList190=boundVariableDeclarationSubList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_boundVariableDeclarationSubList.add(boundVariableDeclarationSubList190.getTree());
					}
					break;

				default :
					break loop47;
				}
			}

			// AST REWRITE
			// elements: boundVariableDeclarationSubList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 627:9: -> ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ )
			{
				// CivlCParser.g:627:12: ^( BOUND_VARIABLE_DECLARATION_LIST ( boundVariableDeclarationSubList )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOUND_VARIABLE_DECLARATION_LIST, "BOUND_VARIABLE_DECLARATION_LIST"), root_1);
				if ( !(stream_boundVariableDeclarationSubList.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_boundVariableDeclarationSubList.hasNext() ) {
					adaptor.addChild(root_1, stream_boundVariableDeclarationSubList.nextTree());
				}
				stream_boundVariableDeclarationSubList.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "boundVariableDeclarationList"


	public static class assignmentExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "assignmentExpression"
	// CivlCParser.g:640:1: assignmentExpression : ( ( arrayLambdaExpression )=> arrayLambdaExpression | ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression ) -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) ) | conditionalExpression );
	public final CivlCParser.assignmentExpression_return assignmentExpression() throws RecognitionException {
		CivlCParser.assignmentExpression_return retval = new CivlCParser.assignmentExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope lhs =null;
		ParserRuleReturnScope op =null;
		ParserRuleReturnScope rhs =null;
		ParserRuleReturnScope arrayLambdaExpression191 =null;
		ParserRuleReturnScope conditionalExpression192 =null;

		RewriteRuleSubtreeStream stream_assignmentOperator=new RewriteRuleSubtreeStream(adaptor,"rule assignmentOperator");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_unaryExpression=new RewriteRuleSubtreeStream(adaptor,"rule unaryExpression");
		RewriteRuleSubtreeStream stream_quantifiedExpression=new RewriteRuleSubtreeStream(adaptor,"rule quantifiedExpression");

		try {
			// CivlCParser.g:641:2: ( ( arrayLambdaExpression )=> arrayLambdaExpression | ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression ) -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) ) | conditionalExpression )
			int alt49=3;
			switch ( input.LA(1) ) {
			case LPAREN:
				{
				int LA49_1 = input.LA(2);
				if ( (synpred24_CivlCParser()) ) {
					alt49=1;
				}
				else if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case IDENTIFIER:
				{
				int LA49_2 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case INTEGER_CONSTANT:
				{
				int LA49_3 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case FLOATING_CONSTANT:
				{
				int LA49_4 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case CHARACTER_CONSTANT:
				{
				int LA49_5 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case SELF:
				{
				int LA49_6 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case PROCNULL:
				{
				int LA49_7 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case STATE_NULL:
				{
				int LA49_8 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case RESULT:
				{
				int LA49_9 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case HERE:
				{
				int LA49_10 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case ELLIPSIS:
				{
				int LA49_11 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case STRING_LITERAL:
				{
				int LA49_12 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case GENERIC:
				{
				int LA49_13 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case DERIV:
				{
				int LA49_14 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case PLUSPLUS:
				{
				int LA49_15 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case MINUSMINUS:
				{
				int LA49_16 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case AMPERSAND:
			case NOT:
			case PLUS:
			case STAR:
			case SUB:
			case TILDE:
			case BIG_O:
				{
				int LA49_17 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case SIZEOF:
				{
				int LA49_18 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case SCOPEOF:
				{
				int LA49_19 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case ALIGNOF:
				{
				int LA49_20 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case VALUE_AT:
				{
				int LA49_21 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case SPAWN:
				{
				int LA49_22 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			case CALLS:
				{
				int LA49_23 = input.LA(2);
				if ( (synpred25_CivlCParser()) ) {
					alt49=2;
				}
				else if ( (true) ) {
					alt49=3;
				}

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 49, 0, input);
				throw nvae;
			}
			switch (alt49) {
				case 1 :
					// CivlCParser.g:641:4: ( arrayLambdaExpression )=> arrayLambdaExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_arrayLambdaExpression_in_assignmentExpression5166);
					arrayLambdaExpression191=arrayLambdaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, arrayLambdaExpression191.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:642:4: ( unaryExpression assignmentOperator )=>lhs= unaryExpression op= assignmentOperator (rhs= assignmentExpression |rhs= quantifiedExpression )
					{
					pushFollow(FOLLOW_unaryExpression_in_assignmentExpression5188);
					lhs=unaryExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_unaryExpression.add(lhs.getTree());
					pushFollow(FOLLOW_assignmentOperator_in_assignmentExpression5200);
					op=assignmentOperator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentOperator.add(op.getTree());
					// CivlCParser.g:645:9: (rhs= assignmentExpression |rhs= quantifiedExpression )
					int alt48=2;
					int LA48_0 = input.LA(1);
					if ( (LA48_0==AMPERSAND||LA48_0==CHARACTER_CONSTANT||LA48_0==ELLIPSIS||LA48_0==FLOATING_CONSTANT||LA48_0==IDENTIFIER||LA48_0==INTEGER_CONSTANT||LA48_0==LPAREN||LA48_0==MINUSMINUS||LA48_0==NOT||LA48_0==PLUS||LA48_0==PLUSPLUS||LA48_0==STAR||(LA48_0 >= STRING_LITERAL && LA48_0 <= SUB)||LA48_0==TILDE||LA48_0==ALIGNOF||LA48_0==BIG_O||LA48_0==CALLS||LA48_0==DERIV||LA48_0==GENERIC||LA48_0==HERE||LA48_0==PROCNULL||LA48_0==RESULT||(LA48_0 >= SCOPEOF && LA48_0 <= SELF)||(LA48_0 >= SIZEOF && LA48_0 <= SPAWN)||LA48_0==STATE_NULL||LA48_0==VALUE_AT) ) {
						alt48=1;
					}
					else if ( (LA48_0==EXISTS||LA48_0==FORALL||LA48_0==UNIFORM) ) {
						alt48=2;
					}

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

					switch (alt48) {
						case 1 :
							// CivlCParser.g:645:10: rhs= assignmentExpression
							{
							pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression5213);
							rhs=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(rhs.getTree());
							}
							break;
						case 2 :
							// CivlCParser.g:645:37: rhs= quantifiedExpression
							{
							pushFollow(FOLLOW_quantifiedExpression_in_assignmentExpression5219);
							rhs=quantifiedExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_quantifiedExpression.add(rhs.getTree());
							}
							break;

					}

					// AST REWRITE
					// elements: rhs, op, lhs
					// token labels: 
					// rule labels: op, lhs, rhs, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_op=new RewriteRuleSubtreeStream(adaptor,"rule op",op!=null?op.getTree():null);
					RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.getTree():null);
					RewriteRuleSubtreeStream stream_rhs=new RewriteRuleSubtreeStream(adaptor,"rule rhs",rhs!=null?rhs.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 646:9: -> ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) )
					{
						// CivlCParser.g:646:12: ^( OPERATOR $op ^( ARGUMENT_LIST $lhs $rhs) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_op.nextTree());
						// CivlCParser.g:646:27: ^( ARGUMENT_LIST $lhs $rhs)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_lhs.nextTree());
						adaptor.addChild(root_2, stream_rhs.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:647:4: conditionalExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_conditionalExpression_in_assignmentExpression5252);
					conditionalExpression192=conditionalExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression192.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "assignmentExpression"


	public static class assignmentOperator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "assignmentOperator"
	// CivlCParser.g:651:1: assignmentOperator : ( ASSIGN | STAREQ | DIVEQ | MODEQ | PLUSEQ | SUBEQ | SHIFTLEFTEQ | SHIFTRIGHTEQ | BITANDEQ | BITXOREQ | BITOREQ );
	public final CivlCParser.assignmentOperator_return assignmentOperator() throws RecognitionException {
		CivlCParser.assignmentOperator_return retval = new CivlCParser.assignmentOperator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set193=null;

		Object set193_tree=null;

		try {
			// CivlCParser.g:652:2: ( ASSIGN | STAREQ | DIVEQ | MODEQ | PLUSEQ | SUBEQ | SHIFTLEFTEQ | SHIFTRIGHTEQ | BITANDEQ | BITXOREQ | BITOREQ )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set193=input.LT(1);
			if ( input.LA(1)==ASSIGN||input.LA(1)==BITANDEQ||input.LA(1)==BITOREQ||input.LA(1)==BITXOREQ||input.LA(1)==DIVEQ||input.LA(1)==MODEQ||input.LA(1)==PLUSEQ||input.LA(1)==SHIFTLEFTEQ||input.LA(1)==SHIFTRIGHTEQ||input.LA(1)==STAREQ||input.LA(1)==SUBEQ ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set193));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "assignmentOperator"


	public static class commaExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "commaExpression"
	// CivlCParser.g:664:1: commaExpression : ( assignmentExpression -> assignmentExpression ) ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )* ;
	public final CivlCParser.commaExpression_return commaExpression() throws RecognitionException {
		CivlCParser.commaExpression_return retval = new CivlCParser.commaExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA195=null;
		ParserRuleReturnScope y =null;
		ParserRuleReturnScope assignmentExpression194 =null;

		Object COMMA195_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");

		try {
			// CivlCParser.g:665:2: ( ( assignmentExpression -> assignmentExpression ) ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )* )
			// CivlCParser.g:665:4: ( assignmentExpression -> assignmentExpression ) ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )*
			{
			// CivlCParser.g:665:4: ( assignmentExpression -> assignmentExpression )
			// CivlCParser.g:665:6: assignmentExpression
			{
			pushFollow(FOLLOW_assignmentExpression_in_commaExpression5321);
			assignmentExpression194=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression194.getTree());
			// AST REWRITE
			// elements: assignmentExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 665:27: -> assignmentExpression
			{
				adaptor.addChild(root_0, stream_assignmentExpression.nextTree());
			}


			retval.tree = root_0;
			}

			}

			// CivlCParser.g:666:4: ( ( COMMA )=> COMMA y= assignmentExpression -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) ) )*
			loop50:
			while (true) {
				int alt50=2;
				int LA50_0 = input.LA(1);
				if ( (LA50_0==COMMA) ) {
					int LA50_2 = input.LA(2);
					if ( (synpred26_CivlCParser()) ) {
						alt50=1;
					}

				}

				switch (alt50) {
				case 1 :
					// CivlCParser.g:666:6: ( COMMA )=> COMMA y= assignmentExpression
					{
					COMMA195=(Token)match(input,COMMA,FOLLOW_COMMA_in_commaExpression5339); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA195);

					pushFollow(FOLLOW_assignmentExpression_in_commaExpression5343);
					y=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(y.getTree());
					// AST REWRITE
					// elements: commaExpression, COMMA, y
					// token labels: 
					// rule labels: y, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_y=new RewriteRuleSubtreeStream(adaptor,"rule y",y!=null?y.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 667:6: -> ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) )
					{
						// CivlCParser.g:667:9: ^( OPERATOR COMMA ^( ARGUMENT_LIST $commaExpression $y) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPERATOR, "OPERATOR"), root_1);
						adaptor.addChild(root_1, stream_COMMA.nextNode());
						// CivlCParser.g:667:26: ^( ARGUMENT_LIST $commaExpression $y)
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARGUMENT_LIST, "ARGUMENT_LIST"), root_2);
						adaptor.addChild(root_2, stream_retval.nextTree());
						adaptor.addChild(root_2, stream_y.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

				default :
					break loop50;
				}
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "commaExpression"


	public static class expression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "expression"
	// CivlCParser.g:672:1: expression : ( quantifiedExpression | commaExpression );
	public final CivlCParser.expression_return expression() throws RecognitionException {
		CivlCParser.expression_return retval = new CivlCParser.expression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope quantifiedExpression196 =null;
		ParserRuleReturnScope commaExpression197 =null;


		try {
			// CivlCParser.g:673:5: ( quantifiedExpression | commaExpression )
			int alt51=2;
			int LA51_0 = input.LA(1);
			if ( (LA51_0==EXISTS||LA51_0==FORALL||LA51_0==UNIFORM) ) {
				alt51=1;
			}
			else if ( (LA51_0==AMPERSAND||LA51_0==CHARACTER_CONSTANT||LA51_0==ELLIPSIS||LA51_0==FLOATING_CONSTANT||LA51_0==IDENTIFIER||LA51_0==INTEGER_CONSTANT||LA51_0==LPAREN||LA51_0==MINUSMINUS||LA51_0==NOT||LA51_0==PLUS||LA51_0==PLUSPLUS||LA51_0==STAR||(LA51_0 >= STRING_LITERAL && LA51_0 <= SUB)||LA51_0==TILDE||LA51_0==ALIGNOF||LA51_0==BIG_O||LA51_0==CALLS||LA51_0==DERIV||LA51_0==GENERIC||LA51_0==HERE||LA51_0==PROCNULL||LA51_0==RESULT||(LA51_0 >= SCOPEOF && LA51_0 <= SELF)||(LA51_0 >= SIZEOF && LA51_0 <= SPAWN)||LA51_0==STATE_NULL||LA51_0==VALUE_AT) ) {
				alt51=2;
			}

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

			switch (alt51) {
				case 1 :
					// CivlCParser.g:673:7: quantifiedExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_quantifiedExpression_in_expression5388);
					quantifiedExpression196=quantifiedExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, quantifiedExpression196.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:673:30: commaExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_commaExpression_in_expression5392);
					commaExpression197=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, commaExpression197.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "expression"


	public static class constantExpression_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "constantExpression"
	// CivlCParser.g:681:1: constantExpression : conditionalExpression ;
	public final CivlCParser.constantExpression_return constantExpression() throws RecognitionException {
		CivlCParser.constantExpression_return retval = new CivlCParser.constantExpression_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope conditionalExpression198 =null;


		try {
			// CivlCParser.g:682:2: ( conditionalExpression )
			// CivlCParser.g:682:4: conditionalExpression
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_conditionalExpression_in_constantExpression5405);
			conditionalExpression198=conditionalExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, conditionalExpression198.getTree());

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "constantExpression"


	public static class declaration_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declaration"
	// CivlCParser.g:709:1: declaration : (d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) ) | staticAssertDeclaration );
	public final CivlCParser.declaration_return declaration() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.declaration_return retval = new CivlCParser.declaration_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEMI200=null;
		Token SEMI201=null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope i =null;
		ParserRuleReturnScope contract199 =null;
		ParserRuleReturnScope staticAssertDeclaration202 =null;

		Object SEMI200_tree=null;
		Object SEMI201_tree=null;
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_contract=new RewriteRuleSubtreeStream(adaptor,"rule contract");
		RewriteRuleSubtreeStream stream_initDeclaratorList=new RewriteRuleSubtreeStream(adaptor,"rule initDeclaratorList");
		RewriteRuleSubtreeStream stream_declarationSpecifiers=new RewriteRuleSubtreeStream(adaptor,"rule declarationSpecifiers");


		  DeclarationScope_stack.peek().isTypedef = false;
		  DeclarationScope_stack.peek().typedefNameUsed =false;

		try {
			// CivlCParser.g:715:2: (d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) ) | staticAssertDeclaration )
			int alt53=2;
			int LA53_0 = input.LA(1);
			if ( (LA53_0==IDENTIFIER||(LA53_0 >= ABSTRACT && LA53_0 <= ALIGNAS)||(LA53_0 >= ATOMIC && LA53_0 <= AUTO)||LA53_0==BOOL||LA53_0==CHAR||(LA53_0 >= COMPLEX && LA53_0 <= CONST)||(LA53_0 >= DEVICE && LA53_0 <= DIFFERENTIABLE)||(LA53_0 >= DOMAIN && LA53_0 <= DOUBLE)||LA53_0==ENUM||(LA53_0 >= EXTERN && LA53_0 <= FATOMIC)||LA53_0==FLOAT||LA53_0==GLOBAL||(LA53_0 >= INLINE && LA53_0 <= INT)||(LA53_0 >= LONG && LA53_0 <= NORETURN)||LA53_0==OUTPUT||(LA53_0 >= PURE && LA53_0 <= RANGE)||(LA53_0 >= REAL && LA53_0 <= REGISTER)||LA53_0==RESTRICT||(LA53_0 >= SHARED && LA53_0 <= SIGNED)||LA53_0==STATE_F||LA53_0==STATIC||LA53_0==STRUCT||LA53_0==SYSTEM||(LA53_0 >= THREADLOCAL && LA53_0 <= TYPEOF)||(LA53_0 >= UNION && LA53_0 <= UNSIGNED)||(LA53_0 >= VOID && LA53_0 <= VOLATILE)) ) {
				alt53=1;
			}
			else if ( (LA53_0==STATICASSERT) ) {
				alt53=2;
			}

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

			switch (alt53) {
				case 1 :
					// CivlCParser.g:715:4: d= declarationSpecifiers (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_declaration5434);
					d=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(d.getTree());
					// CivlCParser.g:716:4: (i= initDeclaratorList contract SEMI -> ^( DECLARATION $d $i contract ) | SEMI -> ^( DECLARATION $d ABSENT ABSENT ) )
					int alt52=2;
					int LA52_0 = input.LA(1);
					if ( (LA52_0==IDENTIFIER||LA52_0==LPAREN||LA52_0==STAR) ) {
						alt52=1;
					}
					else if ( (LA52_0==SEMI) ) {
						alt52=2;
					}

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

					switch (alt52) {
						case 1 :
							// CivlCParser.g:717:6: i= initDeclaratorList contract SEMI
							{
							pushFollow(FOLLOW_initDeclaratorList_in_declaration5448);
							i=initDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_initDeclaratorList.add(i.getTree());
							pushFollow(FOLLOW_contract_in_declaration5450);
							contract199=contract();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_contract.add(contract199.getTree());
							SEMI200=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5452); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI200);

							// AST REWRITE
							// elements: contract, d, i
							// token labels: 
							// rule labels: d, i, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
							RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"rule i",i!=null?i.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 718:6: -> ^( DECLARATION $d $i contract )
							{
								// CivlCParser.g:718:9: ^( DECLARATION $d $i contract )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATION, "DECLARATION"), root_1);
								adaptor.addChild(root_1, stream_d.nextTree());
								adaptor.addChild(root_1, stream_i.nextTree());
								adaptor.addChild(root_1, stream_contract.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:719:6: SEMI
							{
							SEMI201=(Token)match(input,SEMI,FOLLOW_SEMI_in_declaration5478); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI201);

							// AST REWRITE
							// elements: d
							// token labels: 
							// rule labels: d, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 720:6: -> ^( DECLARATION $d ABSENT ABSENT )
							{
								// CivlCParser.g:720:9: ^( DECLARATION $d ABSENT ABSENT )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATION, "DECLARATION"), root_1);
								adaptor.addChild(root_1, stream_d.nextTree());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// CivlCParser.g:722:4: staticAssertDeclaration
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_staticAssertDeclaration_in_declaration5506);
					staticAssertDeclaration202=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration202.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "declaration"


	public static class declarationSpecifiers_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarationSpecifiers"
	// CivlCParser.g:730:1: declarationSpecifiers : l= declarationSpecifierList -> ^( DECLARATION_SPECIFIERS declarationSpecifierList ) ;
	public final CivlCParser.declarationSpecifiers_return declarationSpecifiers() throws RecognitionException {
		CivlCParser.declarationSpecifiers_return retval = new CivlCParser.declarationSpecifiers_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;

		RewriteRuleSubtreeStream stream_declarationSpecifierList=new RewriteRuleSubtreeStream(adaptor,"rule declarationSpecifierList");

		try {
			// CivlCParser.g:731:2: (l= declarationSpecifierList -> ^( DECLARATION_SPECIFIERS declarationSpecifierList ) )
			// CivlCParser.g:731:4: l= declarationSpecifierList
			{
			pushFollow(FOLLOW_declarationSpecifierList_in_declarationSpecifiers5522);
			l=declarationSpecifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifierList.add(l.getTree());
			// AST REWRITE
			// elements: declarationSpecifierList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 732:4: -> ^( DECLARATION_SPECIFIERS declarationSpecifierList )
			{
				// CivlCParser.g:732:7: ^( DECLARATION_SPECIFIERS declarationSpecifierList )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATION_SPECIFIERS, "DECLARATION_SPECIFIERS"), root_1);
				adaptor.addChild(root_1, stream_declarationSpecifierList.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declarationSpecifiers"


	public static class declarationSpecifierList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarationSpecifierList"
	// CivlCParser.g:737:1: declarationSpecifierList : ({...}?s= declarationSpecifier )+ ;
	public final CivlCParser.declarationSpecifierList_return declarationSpecifierList() throws RecognitionException {
		CivlCParser.declarationSpecifierList_return retval = new CivlCParser.declarationSpecifierList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope s =null;


		try {
			// CivlCParser.g:738:2: ( ({...}?s= declarationSpecifier )+ )
			// CivlCParser.g:738:4: ({...}?s= declarationSpecifier )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:738:4: ({...}?s= declarationSpecifier )+
			int cnt54=0;
			loop54:
			while (true) {
				int alt54=2;
				int LA54_0 = input.LA(1);
				if ( (LA54_0==IDENTIFIER) ) {
					int LA54_1 = input.LA(2);
					if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {
						alt54=1;
					}

				}
				else if ( ((LA54_0 >= ABSTRACT && LA54_0 <= ALIGNAS)||(LA54_0 >= ATOMIC && LA54_0 <= AUTO)||LA54_0==BOOL||LA54_0==CHAR||(LA54_0 >= COMPLEX && LA54_0 <= CONST)||(LA54_0 >= DEVICE && LA54_0 <= DIFFERENTIABLE)||(LA54_0 >= DOMAIN && LA54_0 <= DOUBLE)||LA54_0==ENUM||(LA54_0 >= EXTERN && LA54_0 <= FATOMIC)||LA54_0==FLOAT||LA54_0==GLOBAL||(LA54_0 >= INLINE && LA54_0 <= INT)||(LA54_0 >= LONG && LA54_0 <= NORETURN)||LA54_0==OUTPUT||(LA54_0 >= PURE && LA54_0 <= RANGE)||(LA54_0 >= REAL && LA54_0 <= REGISTER)||LA54_0==RESTRICT||(LA54_0 >= SHARED && LA54_0 <= SIGNED)||LA54_0==STATE_F||LA54_0==STATIC||LA54_0==STRUCT||LA54_0==SYSTEM||(LA54_0 >= THREADLOCAL && LA54_0 <= TYPEOF)||(LA54_0 >= UNION && LA54_0 <= UNSIGNED)||(LA54_0 >= VOID && LA54_0 <= VOLATILE)) ) {
					alt54=1;
				}

				switch (alt54) {
				case 1 :
					// CivlCParser.g:739:6: {...}?s= declarationSpecifier
					{
					if ( !((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "declarationSpecifierList", "!$DeclarationScope::isTypedef || input.LT(2).getType() != SEMI ");
					}
					pushFollow(FOLLOW_declarationSpecifier_in_declarationSpecifierList5562);
					s=declarationSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, s.getTree());

					}
					break;

				default :
					if ( cnt54 >= 1 ) break loop54;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(54, input);
					throw eee;
				}
				cnt54++;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declarationSpecifierList"


	public static class declarationSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarationSpecifier"
	// CivlCParser.g:744:1: declarationSpecifier : (s= storageClassSpecifier | typeSpecifierOrQualifier | functionSpecifier | alignmentSpecifier );
	public final CivlCParser.declarationSpecifier_return declarationSpecifier() throws RecognitionException {
		CivlCParser.declarationSpecifier_return retval = new CivlCParser.declarationSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope s =null;
		ParserRuleReturnScope typeSpecifierOrQualifier203 =null;
		ParserRuleReturnScope functionSpecifier204 =null;
		ParserRuleReturnScope alignmentSpecifier205 =null;


		try {
			// CivlCParser.g:745:2: (s= storageClassSpecifier | typeSpecifierOrQualifier | functionSpecifier | alignmentSpecifier )
			int alt55=4;
			switch ( input.LA(1) ) {
			case AUTO:
			case EXTERN:
			case REGISTER:
			case SHARED:
			case STATIC:
			case THREADLOCAL:
			case TYPEDEF:
				{
				alt55=1;
				}
				break;
			case IDENTIFIER:
			case ATOMIC:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DOMAIN:
			case DOUBLE:
			case ENUM:
			case FLOAT:
			case INPUT:
			case INT:
			case LONG:
			case MEM_TYPE:
			case OUTPUT:
			case RANGE:
			case REAL:
			case RESTRICT:
			case SHORT:
			case SIGNED:
			case STRUCT:
			case TYPEOF:
			case UNION:
			case UNSIGNED:
			case VOID:
			case VOLATILE:
				{
				alt55=2;
				}
				break;
			case ABSTRACT:
			case DEVICE:
			case DIFFERENTIABLE:
			case FATOMIC:
			case GLOBAL:
			case INLINE:
			case NORETURN:
			case PURE:
			case STATE_F:
			case SYSTEM:
				{
				alt55=3;
				}
				break;
			case ALIGNAS:
				{
				alt55=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 55, 0, input);
				throw nvae;
			}
			switch (alt55) {
				case 1 :
					// CivlCParser.g:745:4: s= storageClassSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_storageClassSpecifier_in_declarationSpecifier5581);
					s=storageClassSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, s.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:746:4: typeSpecifierOrQualifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeSpecifierOrQualifier_in_declarationSpecifier5586);
					typeSpecifierOrQualifier203=typeSpecifierOrQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeSpecifierOrQualifier203.getTree());

					}
					break;
				case 3 :
					// CivlCParser.g:747:4: functionSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionSpecifier_in_declarationSpecifier5591);
					functionSpecifier204=functionSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionSpecifier204.getTree());

					}
					break;
				case 4 :
					// CivlCParser.g:748:4: alignmentSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_alignmentSpecifier_in_declarationSpecifier5596);
					alignmentSpecifier205=alignmentSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, alignmentSpecifier205.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declarationSpecifier"


	public static class typeSpecifierOrQualifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeSpecifierOrQualifier"
	// CivlCParser.g:759:1: typeSpecifierOrQualifier : ( ( typeSpecifier )=> typeSpecifier | typeQualifier );
	public final CivlCParser.typeSpecifierOrQualifier_return typeSpecifierOrQualifier() throws RecognitionException {
		CivlCParser.typeSpecifierOrQualifier_return retval = new CivlCParser.typeSpecifierOrQualifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope typeSpecifier206 =null;
		ParserRuleReturnScope typeQualifier207 =null;


		try {
			// CivlCParser.g:760:2: ( ( typeSpecifier )=> typeSpecifier | typeQualifier )
			int alt56=2;
			int LA56_0 = input.LA(1);
			if ( (LA56_0==VOID) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==CHAR) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==SHORT) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==INT) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==LONG) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==FLOAT) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==DOUBLE) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==SIGNED) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==UNSIGNED) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==BOOL) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==COMPLEX) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==REAL) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==RANGE) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==ATOMIC) ) {
				int LA56_14 = input.LA(2);
				if ( (synpred27_CivlCParser()) ) {
					alt56=1;
				}
				else if ( (true) ) {
					alt56=2;
				}

			}
			else if ( (LA56_0==STRUCT||LA56_0==UNION) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==ENUM) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==IDENTIFIER) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==DOMAIN) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==TYPEOF) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==MEM_TYPE) && (synpred27_CivlCParser())) {
				alt56=1;
			}
			else if ( (LA56_0==CONST||LA56_0==INPUT||LA56_0==OUTPUT||LA56_0==RESTRICT||LA56_0==VOLATILE) ) {
				alt56=2;
			}

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

			switch (alt56) {
				case 1 :
					// CivlCParser.g:760:4: ( typeSpecifier )=> typeSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeSpecifier_in_typeSpecifierOrQualifier5614);
					typeSpecifier206=typeSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeSpecifier206.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:761:11: typeQualifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeQualifier_in_typeSpecifierOrQualifier5626);
					typeQualifier207=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeQualifier207.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeSpecifierOrQualifier"


	public static class initDeclaratorList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "initDeclaratorList"
	// CivlCParser.g:768:1: initDeclaratorList :i+= initDeclarator ( COMMA i+= initDeclarator )* -> ^( INIT_DECLARATOR_LIST ( $i)+ ) ;
	public final CivlCParser.initDeclaratorList_return initDeclaratorList() throws RecognitionException {
		CivlCParser.initDeclaratorList_return retval = new CivlCParser.initDeclaratorList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA208=null;
		List<Object> list_i=null;
		RuleReturnScope i = null;
		Object COMMA208_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_initDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule initDeclarator");

		try {
			// CivlCParser.g:769:2: (i+= initDeclarator ( COMMA i+= initDeclarator )* -> ^( INIT_DECLARATOR_LIST ( $i)+ ) )
			// CivlCParser.g:769:4: i+= initDeclarator ( COMMA i+= initDeclarator )*
			{
			pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5641);
			i=initDeclarator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_initDeclarator.add(i.getTree());
			if (list_i==null) list_i=new ArrayList<Object>();
			list_i.add(i.getTree());
			// CivlCParser.g:769:22: ( COMMA i+= initDeclarator )*
			loop57:
			while (true) {
				int alt57=2;
				int LA57_0 = input.LA(1);
				if ( (LA57_0==COMMA) ) {
					alt57=1;
				}

				switch (alt57) {
				case 1 :
					// CivlCParser.g:769:23: COMMA i+= initDeclarator
					{
					COMMA208=(Token)match(input,COMMA,FOLLOW_COMMA_in_initDeclaratorList5644); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA208);

					pushFollow(FOLLOW_initDeclarator_in_initDeclaratorList5648);
					i=initDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initDeclarator.add(i.getTree());
					if (list_i==null) list_i=new ArrayList<Object>();
					list_i.add(i.getTree());
					}
					break;

				default :
					break loop57;
				}
			}

			// AST REWRITE
			// elements: i
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: i
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
			RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"token i",list_i);
			root_0 = (Object)adaptor.nil();
			// 770:4: -> ^( INIT_DECLARATOR_LIST ( $i)+ )
			{
				// CivlCParser.g:770:7: ^( INIT_DECLARATOR_LIST ( $i)+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INIT_DECLARATOR_LIST, "INIT_DECLARATOR_LIST"), root_1);
				if ( !(stream_i.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_i.hasNext() ) {
					adaptor.addChild(root_1, stream_i.nextTree());
				}
				stream_i.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "initDeclaratorList"


	public static class initDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "initDeclarator"
	// CivlCParser.g:778:1: initDeclarator : d= declarator ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) ) ;
	public final CivlCParser.initDeclarator_return initDeclarator() throws RecognitionException {
		CivlCParser.initDeclarator_return retval = new CivlCParser.initDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ASSIGN209=null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope i =null;

		Object ASSIGN209_tree=null;
		RewriteRuleTokenStream stream_ASSIGN=new RewriteRuleTokenStream(adaptor,"token ASSIGN");
		RewriteRuleSubtreeStream stream_declarator=new RewriteRuleSubtreeStream(adaptor,"rule declarator");
		RewriteRuleSubtreeStream stream_initializer=new RewriteRuleSubtreeStream(adaptor,"rule initializer");

		try {
			// CivlCParser.g:779:2: (d= declarator ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) ) )
			// CivlCParser.g:779:4: d= declarator ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) )
			{
			pushFollow(FOLLOW_declarator_in_initDeclarator5678);
			d=declarator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarator.add(d.getTree());
			// CivlCParser.g:780:4: ( -> ^( INIT_DECLARATOR $d ABSENT ) | ( ASSIGN i= initializer ) -> ^( INIT_DECLARATOR $d $i) )
			int alt58=2;
			int LA58_0 = input.LA(1);
			if ( (LA58_0==COMMA||LA58_0==IDENTIFIER||LA58_0==LCURLY||LA58_0==SEMI||(LA58_0 >= ABSTRACT && LA58_0 <= ALIGNAS)||(LA58_0 >= ASSIGNS && LA58_0 <= AUTO)||LA58_0==BOOL||LA58_0==CHAR||(LA58_0 >= COMPLEX && LA58_0 <= CONST)||LA58_0==DEPENDS||(LA58_0 >= DEVICE && LA58_0 <= DIFFERENTIABLE)||(LA58_0 >= DOMAIN && LA58_0 <= ENUM)||(LA58_0 >= EXTERN && LA58_0 <= FATOMIC)||LA58_0==FLOAT||LA58_0==GLOBAL||LA58_0==GUARD||(LA58_0 >= INLINE && LA58_0 <= INT)||(LA58_0 >= LONG && LA58_0 <= NORETURN)||LA58_0==OUTPUT||(LA58_0 >= PURE && LA58_0 <= RESTRICT)||(LA58_0 >= SHARED && LA58_0 <= SIGNED)||LA58_0==STATE_F||(LA58_0 >= STATIC && LA58_0 <= STRUCT)||LA58_0==SYSTEM||(LA58_0 >= THREADLOCAL && LA58_0 <= TYPEOF)||(LA58_0 >= UNION && LA58_0 <= UNSIGNED)||(LA58_0 >= VOID && LA58_0 <= VOLATILE)) ) {
				alt58=1;
			}
			else if ( (LA58_0==ASSIGN) ) {
				alt58=2;
			}

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

			switch (alt58) {
				case 1 :
					// CivlCParser.g:780:7: 
					{
					// AST REWRITE
					// elements: d
					// token labels: 
					// rule labels: d, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 780:7: -> ^( INIT_DECLARATOR $d ABSENT )
					{
						// CivlCParser.g:780:10: ^( INIT_DECLARATOR $d ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INIT_DECLARATOR, "INIT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_d.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:781:6: ( ASSIGN i= initializer )
					{
					// CivlCParser.g:781:6: ( ASSIGN i= initializer )
					// CivlCParser.g:781:7: ASSIGN i= initializer
					{
					ASSIGN209=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_initDeclarator5703); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN209);

					pushFollow(FOLLOW_initializer_in_initDeclarator5707);
					i=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(i.getTree());
					}

					// AST REWRITE
					// elements: d, i
					// token labels: 
					// rule labels: d, i, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
					RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"rule i",i!=null?i.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 781:29: -> ^( INIT_DECLARATOR $d $i)
					{
						// CivlCParser.g:781:32: ^( INIT_DECLARATOR $d $i)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INIT_DECLARATOR, "INIT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_d.nextTree());
						adaptor.addChild(root_1, stream_i.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "initDeclarator"


	public static class storageClassSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "storageClassSpecifier"
	// CivlCParser.g:786:1: storageClassSpecifier : ( TYPEDEF | ( EXTERN | STATIC | THREADLOCAL | AUTO | REGISTER | SHARED ) );
	public final CivlCParser.storageClassSpecifier_return storageClassSpecifier() throws RecognitionException {
		CivlCParser.storageClassSpecifier_return retval = new CivlCParser.storageClassSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token TYPEDEF210=null;
		Token set211=null;

		Object TYPEDEF210_tree=null;
		Object set211_tree=null;

		try {
			// CivlCParser.g:787:2: ( TYPEDEF | ( EXTERN | STATIC | THREADLOCAL | AUTO | REGISTER | SHARED ) )
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==TYPEDEF) ) {
				alt59=1;
			}
			else if ( (LA59_0==AUTO||LA59_0==EXTERN||LA59_0==REGISTER||LA59_0==SHARED||LA59_0==STATIC||LA59_0==THREADLOCAL) ) {
				alt59=2;
			}

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

			switch (alt59) {
				case 1 :
					// CivlCParser.g:787:4: TYPEDEF
					{
					root_0 = (Object)adaptor.nil();


					TYPEDEF210=(Token)match(input,TYPEDEF,FOLLOW_TYPEDEF_in_storageClassSpecifier5738); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					TYPEDEF210_tree = (Object)adaptor.create(TYPEDEF210);
					adaptor.addChild(root_0, TYPEDEF210_tree);
					}

					if ( state.backtracking==0 ) {DeclarationScope_stack.peek().isTypedef = true;}
					}
					break;
				case 2 :
					// CivlCParser.g:788:4: ( EXTERN | STATIC | THREADLOCAL | AUTO | REGISTER | SHARED )
					{
					root_0 = (Object)adaptor.nil();


					set211=input.LT(1);
					if ( input.LA(1)==AUTO||input.LA(1)==EXTERN||input.LA(1)==REGISTER||input.LA(1)==SHARED||input.LA(1)==STATIC||input.LA(1)==THREADLOCAL ) {
						input.consume();
						if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set211));
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "storageClassSpecifier"


	public static class typeSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeSpecifier"
	// CivlCParser.g:792:1: typeSpecifier : ( VOID | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED | BOOL | COMPLEX | REAL | RANGE | atomicTypeSpecifier | structOrUnionSpecifier | enumSpecifier | typedefName | domainSpecifier | typeofSpecifier | memSpecifier );
	public final CivlCParser.typeSpecifier_return typeSpecifier() throws RecognitionException {
		CivlCParser.typeSpecifier_return retval = new CivlCParser.typeSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token VOID212=null;
		Token CHAR213=null;
		Token SHORT214=null;
		Token INT215=null;
		Token LONG216=null;
		Token FLOAT217=null;
		Token DOUBLE218=null;
		Token SIGNED219=null;
		Token UNSIGNED220=null;
		Token BOOL221=null;
		Token COMPLEX222=null;
		Token REAL223=null;
		Token RANGE224=null;
		ParserRuleReturnScope atomicTypeSpecifier225 =null;
		ParserRuleReturnScope structOrUnionSpecifier226 =null;
		ParserRuleReturnScope enumSpecifier227 =null;
		ParserRuleReturnScope typedefName228 =null;
		ParserRuleReturnScope domainSpecifier229 =null;
		ParserRuleReturnScope typeofSpecifier230 =null;
		ParserRuleReturnScope memSpecifier231 =null;

		Object VOID212_tree=null;
		Object CHAR213_tree=null;
		Object SHORT214_tree=null;
		Object INT215_tree=null;
		Object LONG216_tree=null;
		Object FLOAT217_tree=null;
		Object DOUBLE218_tree=null;
		Object SIGNED219_tree=null;
		Object UNSIGNED220_tree=null;
		Object BOOL221_tree=null;
		Object COMPLEX222_tree=null;
		Object REAL223_tree=null;
		Object RANGE224_tree=null;

		try {
			// CivlCParser.g:793:2: ( VOID | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED | BOOL | COMPLEX | REAL | RANGE | atomicTypeSpecifier | structOrUnionSpecifier | enumSpecifier | typedefName | domainSpecifier | typeofSpecifier | memSpecifier )
			int alt60=20;
			switch ( input.LA(1) ) {
			case VOID:
				{
				alt60=1;
				}
				break;
			case CHAR:
				{
				alt60=2;
				}
				break;
			case SHORT:
				{
				alt60=3;
				}
				break;
			case INT:
				{
				alt60=4;
				}
				break;
			case LONG:
				{
				alt60=5;
				}
				break;
			case FLOAT:
				{
				alt60=6;
				}
				break;
			case DOUBLE:
				{
				alt60=7;
				}
				break;
			case SIGNED:
				{
				alt60=8;
				}
				break;
			case UNSIGNED:
				{
				alt60=9;
				}
				break;
			case BOOL:
				{
				alt60=10;
				}
				break;
			case COMPLEX:
				{
				alt60=11;
				}
				break;
			case REAL:
				{
				alt60=12;
				}
				break;
			case RANGE:
				{
				alt60=13;
				}
				break;
			case ATOMIC:
				{
				alt60=14;
				}
				break;
			case STRUCT:
			case UNION:
				{
				alt60=15;
				}
				break;
			case ENUM:
				{
				alt60=16;
				}
				break;
			case IDENTIFIER:
				{
				alt60=17;
				}
				break;
			case DOMAIN:
				{
				alt60=18;
				}
				break;
			case TYPEOF:
				{
				alt60=19;
				}
				break;
			case MEM_TYPE:
				{
				alt60=20;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 60, 0, input);
				throw nvae;
			}
			switch (alt60) {
				case 1 :
					// CivlCParser.g:793:4: VOID
					{
					root_0 = (Object)adaptor.nil();


					VOID212=(Token)match(input,VOID,FOLLOW_VOID_in_typeSpecifier5780); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					VOID212_tree = (Object)adaptor.create(VOID212);
					adaptor.addChild(root_0, VOID212_tree);
					}

					}
					break;
				case 2 :
					// CivlCParser.g:793:11: CHAR
					{
					root_0 = (Object)adaptor.nil();


					CHAR213=(Token)match(input,CHAR,FOLLOW_CHAR_in_typeSpecifier5784); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					CHAR213_tree = (Object)adaptor.create(CHAR213);
					adaptor.addChild(root_0, CHAR213_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:793:18: SHORT
					{
					root_0 = (Object)adaptor.nil();


					SHORT214=(Token)match(input,SHORT,FOLLOW_SHORT_in_typeSpecifier5788); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					SHORT214_tree = (Object)adaptor.create(SHORT214);
					adaptor.addChild(root_0, SHORT214_tree);
					}

					}
					break;
				case 4 :
					// CivlCParser.g:793:26: INT
					{
					root_0 = (Object)adaptor.nil();


					INT215=(Token)match(input,INT,FOLLOW_INT_in_typeSpecifier5792); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					INT215_tree = (Object)adaptor.create(INT215);
					adaptor.addChild(root_0, INT215_tree);
					}

					}
					break;
				case 5 :
					// CivlCParser.g:793:32: LONG
					{
					root_0 = (Object)adaptor.nil();


					LONG216=(Token)match(input,LONG,FOLLOW_LONG_in_typeSpecifier5796); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					LONG216_tree = (Object)adaptor.create(LONG216);
					adaptor.addChild(root_0, LONG216_tree);
					}

					}
					break;
				case 6 :
					// CivlCParser.g:793:39: FLOAT
					{
					root_0 = (Object)adaptor.nil();


					FLOAT217=(Token)match(input,FLOAT,FOLLOW_FLOAT_in_typeSpecifier5800); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					FLOAT217_tree = (Object)adaptor.create(FLOAT217);
					adaptor.addChild(root_0, FLOAT217_tree);
					}

					}
					break;
				case 7 :
					// CivlCParser.g:793:47: DOUBLE
					{
					root_0 = (Object)adaptor.nil();


					DOUBLE218=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_typeSpecifier5804); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					DOUBLE218_tree = (Object)adaptor.create(DOUBLE218);
					adaptor.addChild(root_0, DOUBLE218_tree);
					}

					}
					break;
				case 8 :
					// CivlCParser.g:794:4: SIGNED
					{
					root_0 = (Object)adaptor.nil();


					SIGNED219=(Token)match(input,SIGNED,FOLLOW_SIGNED_in_typeSpecifier5809); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					SIGNED219_tree = (Object)adaptor.create(SIGNED219);
					adaptor.addChild(root_0, SIGNED219_tree);
					}

					}
					break;
				case 9 :
					// CivlCParser.g:794:13: UNSIGNED
					{
					root_0 = (Object)adaptor.nil();


					UNSIGNED220=(Token)match(input,UNSIGNED,FOLLOW_UNSIGNED_in_typeSpecifier5813); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					UNSIGNED220_tree = (Object)adaptor.create(UNSIGNED220);
					adaptor.addChild(root_0, UNSIGNED220_tree);
					}

					}
					break;
				case 10 :
					// CivlCParser.g:794:24: BOOL
					{
					root_0 = (Object)adaptor.nil();


					BOOL221=(Token)match(input,BOOL,FOLLOW_BOOL_in_typeSpecifier5817); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					BOOL221_tree = (Object)adaptor.create(BOOL221);
					adaptor.addChild(root_0, BOOL221_tree);
					}

					}
					break;
				case 11 :
					// CivlCParser.g:794:31: COMPLEX
					{
					root_0 = (Object)adaptor.nil();


					COMPLEX222=(Token)match(input,COMPLEX,FOLLOW_COMPLEX_in_typeSpecifier5821); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					COMPLEX222_tree = (Object)adaptor.create(COMPLEX222);
					adaptor.addChild(root_0, COMPLEX222_tree);
					}

					}
					break;
				case 12 :
					// CivlCParser.g:794:41: REAL
					{
					root_0 = (Object)adaptor.nil();


					REAL223=(Token)match(input,REAL,FOLLOW_REAL_in_typeSpecifier5825); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					REAL223_tree = (Object)adaptor.create(REAL223);
					adaptor.addChild(root_0, REAL223_tree);
					}

					}
					break;
				case 13 :
					// CivlCParser.g:794:48: RANGE
					{
					root_0 = (Object)adaptor.nil();


					RANGE224=(Token)match(input,RANGE,FOLLOW_RANGE_in_typeSpecifier5829); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RANGE224_tree = (Object)adaptor.create(RANGE224);
					adaptor.addChild(root_0, RANGE224_tree);
					}

					}
					break;
				case 14 :
					// CivlCParser.g:795:4: atomicTypeSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_atomicTypeSpecifier_in_typeSpecifier5834);
					atomicTypeSpecifier225=atomicTypeSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, atomicTypeSpecifier225.getTree());

					}
					break;
				case 15 :
					// CivlCParser.g:796:4: structOrUnionSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_structOrUnionSpecifier_in_typeSpecifier5839);
					structOrUnionSpecifier226=structOrUnionSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, structOrUnionSpecifier226.getTree());

					}
					break;
				case 16 :
					// CivlCParser.g:797:4: enumSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_enumSpecifier_in_typeSpecifier5844);
					enumSpecifier227=enumSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, enumSpecifier227.getTree());

					}
					break;
				case 17 :
					// CivlCParser.g:798:4: typedefName
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typedefName_in_typeSpecifier5849);
					typedefName228=typedefName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typedefName228.getTree());

					}
					break;
				case 18 :
					// CivlCParser.g:799:4: domainSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_domainSpecifier_in_typeSpecifier5854);
					domainSpecifier229=domainSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, domainSpecifier229.getTree());

					}
					break;
				case 19 :
					// CivlCParser.g:800:7: typeofSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeofSpecifier_in_typeSpecifier5862);
					typeofSpecifier230=typeofSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeofSpecifier230.getTree());

					}
					break;
				case 20 :
					// CivlCParser.g:801:7: memSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_memSpecifier_in_typeSpecifier5870);
					memSpecifier231=memSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, memSpecifier231.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeSpecifier"


	public static class typeofSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeofSpecifier"
	// CivlCParser.g:817:1: typeofSpecifier : TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) ) ;
	public final CivlCParser.typeofSpecifier_return typeofSpecifier() throws RecognitionException {
		CivlCParser.typeofSpecifier_return retval = new CivlCParser.typeofSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token TYPEOF232=null;
		Token LPAREN233=null;
		Token RPAREN235=null;
		Token RPAREN237=null;
		ParserRuleReturnScope commaExpression234 =null;
		ParserRuleReturnScope typeName236 =null;

		Object TYPEOF232_tree=null;
		Object LPAREN233_tree=null;
		Object RPAREN235_tree=null;
		Object RPAREN237_tree=null;
		RewriteRuleTokenStream stream_TYPEOF=new RewriteRuleTokenStream(adaptor,"token TYPEOF");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");
		RewriteRuleSubtreeStream stream_commaExpression=new RewriteRuleSubtreeStream(adaptor,"rule commaExpression");

		try {
			// CivlCParser.g:818:5: ( TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) ) )
			// CivlCParser.g:818:7: TYPEOF LPAREN ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			{
			TYPEOF232=(Token)match(input,TYPEOF,FOLLOW_TYPEOF_in_typeofSpecifier5886); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_TYPEOF.add(TYPEOF232);

			LPAREN233=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_typeofSpecifier5888); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN233);

			// CivlCParser.g:819:9: ( commaExpression RPAREN -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN ) | typeName RPAREN -> ^( TYPEOF_TYPE LPAREN typeName RPAREN ) )
			int alt61=2;
			switch ( input.LA(1) ) {
			case AMPERSAND:
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case INTEGER_CONSTANT:
			case LPAREN:
			case MINUSMINUS:
			case NOT:
			case PLUS:
			case PLUSPLUS:
			case STAR:
			case STRING_LITERAL:
			case SUB:
			case TILDE:
			case ALIGNOF:
			case BIG_O:
			case CALLS:
			case DERIV:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case STATE_NULL:
			case VALUE_AT:
				{
				alt61=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA61_2 = input.LA(2);
				if ( (!(((!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText()))))) ) {
					alt61=1;
				}
				else if ( ((!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText()))) ) {
					alt61=2;
				}

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

				}
				break;
			case ATOMIC:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DOMAIN:
			case DOUBLE:
			case ENUM:
			case FLOAT:
			case INPUT:
			case INT:
			case LONG:
			case MEM_TYPE:
			case OUTPUT:
			case RANGE:
			case REAL:
			case RESTRICT:
			case SHORT:
			case SIGNED:
			case STRUCT:
			case TYPEOF:
			case UNION:
			case UNSIGNED:
			case VOID:
			case VOLATILE:
				{
				alt61=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 61, 0, input);
				throw nvae;
			}
			switch (alt61) {
				case 1 :
					// CivlCParser.g:819:11: commaExpression RPAREN
					{
					pushFollow(FOLLOW_commaExpression_in_typeofSpecifier5900);
					commaExpression234=commaExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_commaExpression.add(commaExpression234.getTree());
					RPAREN235=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier5902); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN235);

					// AST REWRITE
					// elements: LPAREN, commaExpression, RPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 820:11: -> ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN )
					{
						// CivlCParser.g:820:14: ^( TYPEOF_EXPRESSION LPAREN commaExpression RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPEOF_EXPRESSION, "TYPEOF_EXPRESSION"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_commaExpression.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:821:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_typeofSpecifier5936);
					typeName236=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName236.getTree());
					RPAREN237=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_typeofSpecifier5938); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN237);

					// AST REWRITE
					// elements: LPAREN, typeName, RPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 822:11: -> ^( TYPEOF_TYPE LPAREN typeName RPAREN )
					{
						// CivlCParser.g:822:14: ^( TYPEOF_TYPE LPAREN typeName RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPEOF_TYPE, "TYPEOF_TYPE"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeofSpecifier"


	public static class structOrUnionSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structOrUnionSpecifier"
	// CivlCParser.g:831:1: structOrUnionSpecifier : structOrUnion ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) ) ;
	public final CivlCParser.structOrUnionSpecifier_return structOrUnionSpecifier() throws RecognitionException {
		CivlCParser.structOrUnionSpecifier_return retval = new CivlCParser.structOrUnionSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER239=null;
		Token LCURLY240=null;
		Token RCURLY242=null;
		Token LCURLY243=null;
		Token RCURLY245=null;
		Token IDENTIFIER246=null;
		ParserRuleReturnScope structOrUnion238 =null;
		ParserRuleReturnScope structDeclarationList241 =null;
		ParserRuleReturnScope structDeclarationList244 =null;

		Object IDENTIFIER239_tree=null;
		Object LCURLY240_tree=null;
		Object RCURLY242_tree=null;
		Object LCURLY243_tree=null;
		Object RCURLY245_tree=null;
		Object IDENTIFIER246_tree=null;
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_structDeclarationList=new RewriteRuleSubtreeStream(adaptor,"rule structDeclarationList");
		RewriteRuleSubtreeStream stream_structOrUnion=new RewriteRuleSubtreeStream(adaptor,"rule structOrUnion");

		try {
			// CivlCParser.g:832:2: ( structOrUnion ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) ) )
			// CivlCParser.g:832:4: structOrUnion ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) )
			{
			pushFollow(FOLLOW_structOrUnion_in_structOrUnionSpecifier5986);
			structOrUnion238=structOrUnion();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_structOrUnion.add(structOrUnion238.getTree());
			// CivlCParser.g:833:6: ( IDENTIFIER LCURLY structDeclarationList RCURLY -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY ) | LCURLY structDeclarationList RCURLY -> ^( structOrUnion ABSENT structDeclarationList RCURLY ) | IDENTIFIER -> ^( structOrUnion IDENTIFIER ABSENT ) )
			int alt62=3;
			int LA62_0 = input.LA(1);
			if ( (LA62_0==IDENTIFIER) ) {
				int LA62_1 = input.LA(2);
				if ( (LA62_1==LCURLY) ) {
					alt62=1;
				}
				else if ( (LA62_1==EOF||(LA62_1 >= COLON && LA62_1 <= COMMA)||LA62_1==IDENTIFIER||LA62_1==LPAREN||LA62_1==LSQUARE||LA62_1==RPAREN||LA62_1==SEMI||LA62_1==STAR||(LA62_1 >= ABSTRACT && LA62_1 <= ALIGNAS)||(LA62_1 >= ATOMIC && LA62_1 <= AUTO)||LA62_1==BOOL||LA62_1==CHAR||(LA62_1 >= COMPLEX && LA62_1 <= CONST)||(LA62_1 >= DEVICE && LA62_1 <= DIFFERENTIABLE)||(LA62_1 >= DOMAIN && LA62_1 <= DOUBLE)||LA62_1==ENUM||(LA62_1 >= EXTERN && LA62_1 <= FATOMIC)||LA62_1==FLOAT||LA62_1==GLOBAL||(LA62_1 >= INLINE && LA62_1 <= INT)||(LA62_1 >= LONG && LA62_1 <= NORETURN)||LA62_1==OUTPUT||(LA62_1 >= PURE && LA62_1 <= RANGE)||(LA62_1 >= REAL && LA62_1 <= REGISTER)||LA62_1==RESTRICT||(LA62_1 >= SHARED && LA62_1 <= SIGNED)||LA62_1==STATE_F||LA62_1==STATIC||LA62_1==STRUCT||LA62_1==SYSTEM||(LA62_1 >= THREADLOCAL && LA62_1 <= TYPEOF)||(LA62_1 >= UNION && LA62_1 <= UNSIGNED)||(LA62_1 >= VOID && LA62_1 <= VOLATILE)) ) {
					alt62=3;
				}

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

			}
			else if ( (LA62_0==LCURLY) ) {
				alt62=2;
			}

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

			switch (alt62) {
				case 1 :
					// CivlCParser.g:833:8: IDENTIFIER LCURLY structDeclarationList RCURLY
					{
					IDENTIFIER239=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_structOrUnionSpecifier5995); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER239);

					LCURLY240=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_structOrUnionSpecifier5997); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY240);

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier5999);
					structDeclarationList241=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList241.getTree());
					RCURLY242=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier6001); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY242);

					// AST REWRITE
					// elements: structDeclarationList, IDENTIFIER, RCURLY, structOrUnion
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 834:8: -> ^( structOrUnion IDENTIFIER structDeclarationList RCURLY )
					{
						// CivlCParser.g:834:11: ^( structOrUnion IDENTIFIER structDeclarationList RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_structOrUnion.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, stream_structDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:835:8: LCURLY structDeclarationList RCURLY
					{
					LCURLY243=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_structOrUnionSpecifier6029); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY243);

					pushFollow(FOLLOW_structDeclarationList_in_structOrUnionSpecifier6031);
					structDeclarationList244=structDeclarationList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarationList.add(structDeclarationList244.getTree());
					RCURLY245=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_structOrUnionSpecifier6033); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY245);

					// AST REWRITE
					// elements: structOrUnion, RCURLY, structDeclarationList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 836:8: -> ^( structOrUnion ABSENT structDeclarationList RCURLY )
					{
						// CivlCParser.g:836:11: ^( structOrUnion ABSENT structDeclarationList RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_structOrUnion.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_structDeclarationList.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:837:8: IDENTIFIER
					{
					IDENTIFIER246=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6061); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER246);

					// AST REWRITE
					// elements: IDENTIFIER, structOrUnion
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 838:8: -> ^( structOrUnion IDENTIFIER ABSENT )
					{
						// CivlCParser.g:838:11: ^( structOrUnion IDENTIFIER ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_structOrUnion.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "structOrUnionSpecifier"


	public static class structOrUnion_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structOrUnion"
	// CivlCParser.g:843:1: structOrUnion : ( STRUCT | UNION );
	public final CivlCParser.structOrUnion_return structOrUnion() throws RecognitionException {
		CivlCParser.structOrUnion_return retval = new CivlCParser.structOrUnion_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set247=null;

		Object set247_tree=null;

		try {
			// CivlCParser.g:844:2: ( STRUCT | UNION )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set247=input.LT(1);
			if ( input.LA(1)==STRUCT||input.LA(1)==UNION ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set247));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "structOrUnion"


	public static class structDeclarationList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structDeclarationList"
	// CivlCParser.g:851:1: structDeclarationList : ( structDeclaration )* -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* ) ;
	public final CivlCParser.structDeclarationList_return structDeclarationList() throws RecognitionException {
		CivlCParser.structDeclarationList_return retval = new CivlCParser.structDeclarationList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope structDeclaration248 =null;

		RewriteRuleSubtreeStream stream_structDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule structDeclaration");

		try {
			// CivlCParser.g:852:2: ( ( structDeclaration )* -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* ) )
			// CivlCParser.g:852:4: ( structDeclaration )*
			{
			// CivlCParser.g:852:4: ( structDeclaration )*
			loop63:
			while (true) {
				int alt63=2;
				int LA63_0 = input.LA(1);
				if ( (LA63_0==IDENTIFIER||LA63_0==ATOMIC||LA63_0==BOOL||LA63_0==CHAR||(LA63_0 >= COMPLEX && LA63_0 <= CONST)||(LA63_0 >= DOMAIN && LA63_0 <= DOUBLE)||LA63_0==ENUM||LA63_0==FLOAT||(LA63_0 >= INPUT && LA63_0 <= INT)||(LA63_0 >= LONG && LA63_0 <= MEM_TYPE)||LA63_0==OUTPUT||LA63_0==RANGE||LA63_0==REAL||LA63_0==RESTRICT||(LA63_0 >= SHORT && LA63_0 <= SIGNED)||(LA63_0 >= STATICASSERT && LA63_0 <= STRUCT)||LA63_0==TYPEOF||(LA63_0 >= UNION && LA63_0 <= UNSIGNED)||(LA63_0 >= VOID && LA63_0 <= VOLATILE)) ) {
					alt63=1;
				}

				switch (alt63) {
				case 1 :
					// CivlCParser.g:852:4: structDeclaration
					{
					pushFollow(FOLLOW_structDeclaration_in_structDeclarationList6115);
					structDeclaration248=structDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclaration.add(structDeclaration248.getTree());
					}
					break;

				default :
					break loop63;
				}
			}

			// AST REWRITE
			// elements: structDeclaration
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 853:4: -> ^( STRUCT_DECLARATION_LIST ( structDeclaration )* )
			{
				// CivlCParser.g:853:7: ^( STRUCT_DECLARATION_LIST ( structDeclaration )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATION_LIST, "STRUCT_DECLARATION_LIST"), root_1);
				// CivlCParser.g:853:33: ( structDeclaration )*
				while ( stream_structDeclaration.hasNext() ) {
					adaptor.addChild(root_1, stream_structDeclaration.nextTree());
				}
				stream_structDeclaration.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "structDeclarationList"


	public static class structDeclaration_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structDeclaration"
	// CivlCParser.g:867:1: structDeclaration : (s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI | staticAssertDeclaration );
	public final CivlCParser.structDeclaration_return structDeclaration() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.structDeclaration_return retval = new CivlCParser.structDeclaration_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEMI250=null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope structDeclaratorList249 =null;
		ParserRuleReturnScope staticAssertDeclaration251 =null;

		Object SEMI250_tree=null;
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_structDeclaratorList=new RewriteRuleSubtreeStream(adaptor,"rule structDeclaratorList");
		RewriteRuleSubtreeStream stream_specifierQualifierList=new RewriteRuleSubtreeStream(adaptor,"rule specifierQualifierList");


		  DeclarationScope_stack.peek().isTypedef = false;
		  DeclarationScope_stack.peek().typedefNameUsed = false;

		try {
			// CivlCParser.g:873:5: (s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI | staticAssertDeclaration )
			int alt65=2;
			int LA65_0 = input.LA(1);
			if ( (LA65_0==IDENTIFIER||LA65_0==ATOMIC||LA65_0==BOOL||LA65_0==CHAR||(LA65_0 >= COMPLEX && LA65_0 <= CONST)||(LA65_0 >= DOMAIN && LA65_0 <= DOUBLE)||LA65_0==ENUM||LA65_0==FLOAT||(LA65_0 >= INPUT && LA65_0 <= INT)||(LA65_0 >= LONG && LA65_0 <= MEM_TYPE)||LA65_0==OUTPUT||LA65_0==RANGE||LA65_0==REAL||LA65_0==RESTRICT||(LA65_0 >= SHORT && LA65_0 <= SIGNED)||LA65_0==STRUCT||LA65_0==TYPEOF||(LA65_0 >= UNION && LA65_0 <= UNSIGNED)||(LA65_0 >= VOID && LA65_0 <= VOLATILE)) ) {
				alt65=1;
			}
			else if ( (LA65_0==STATICASSERT) ) {
				alt65=2;
			}

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

			switch (alt65) {
				case 1 :
					// CivlCParser.g:873:7: s= specifierQualifierList ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) ) SEMI
					{
					pushFollow(FOLLOW_specifierQualifierList_in_structDeclaration6156);
					s=specifierQualifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_specifierQualifierList.add(s.getTree());
					// CivlCParser.g:874:7: ( -> ^( STRUCT_DECLARATION $s ABSENT ) | structDeclaratorList -> ^( STRUCT_DECLARATION $s structDeclaratorList ) )
					int alt64=2;
					int LA64_0 = input.LA(1);
					if ( (LA64_0==SEMI) ) {
						alt64=1;
					}
					else if ( (LA64_0==COLON||LA64_0==IDENTIFIER||LA64_0==LPAREN||LA64_0==STAR) ) {
						alt64=2;
					}

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

					switch (alt64) {
						case 1 :
							// CivlCParser.g:874:9: 
							{
							// AST REWRITE
							// elements: s
							// token labels: 
							// rule labels: s, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 874:9: -> ^( STRUCT_DECLARATION $s ABSENT )
							{
								// CivlCParser.g:874:12: ^( STRUCT_DECLARATION $s ABSENT )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATION, "STRUCT_DECLARATION"), root_1);
								adaptor.addChild(root_1, stream_s.nextTree());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:875:9: structDeclaratorList
							{
							pushFollow(FOLLOW_structDeclaratorList_in_structDeclaration6185);
							structDeclaratorList249=structDeclaratorList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_structDeclaratorList.add(structDeclaratorList249.getTree());
							// AST REWRITE
							// elements: s, structDeclaratorList
							// token labels: 
							// rule labels: s, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 876:9: -> ^( STRUCT_DECLARATION $s structDeclaratorList )
							{
								// CivlCParser.g:876:12: ^( STRUCT_DECLARATION $s structDeclaratorList )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATION, "STRUCT_DECLARATION"), root_1);
								adaptor.addChild(root_1, stream_s.nextTree());
								adaptor.addChild(root_1, stream_structDeclaratorList.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					SEMI250=(Token)match(input,SEMI,FOLLOW_SEMI_in_structDeclaration6220); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI250);

					}
					break;
				case 2 :
					// CivlCParser.g:879:7: staticAssertDeclaration
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_staticAssertDeclaration_in_structDeclaration6228);
					staticAssertDeclaration251=staticAssertDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, staticAssertDeclaration251.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "structDeclaration"


	public static class specifierQualifierList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "specifierQualifierList"
	// CivlCParser.g:886:1: specifierQualifierList : ( typeSpecifierOrQualifier )+ -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ ) ;
	public final CivlCParser.specifierQualifierList_return specifierQualifierList() throws RecognitionException {
		CivlCParser.specifierQualifierList_return retval = new CivlCParser.specifierQualifierList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope typeSpecifierOrQualifier252 =null;

		RewriteRuleSubtreeStream stream_typeSpecifierOrQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeSpecifierOrQualifier");

		try {
			// CivlCParser.g:887:5: ( ( typeSpecifierOrQualifier )+ -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ ) )
			// CivlCParser.g:887:7: ( typeSpecifierOrQualifier )+
			{
			// CivlCParser.g:887:7: ( typeSpecifierOrQualifier )+
			int cnt66=0;
			loop66:
			while (true) {
				int alt66=2;
				int LA66_0 = input.LA(1);
				if ( (LA66_0==IDENTIFIER) ) {
					int LA66_2 = input.LA(2);
					if ( ((!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText()))) ) {
						alt66=1;
					}

				}
				else if ( (LA66_0==ATOMIC||LA66_0==BOOL||LA66_0==CHAR||(LA66_0 >= COMPLEX && LA66_0 <= CONST)||(LA66_0 >= DOMAIN && LA66_0 <= DOUBLE)||LA66_0==ENUM||LA66_0==FLOAT||(LA66_0 >= INPUT && LA66_0 <= INT)||(LA66_0 >= LONG && LA66_0 <= MEM_TYPE)||LA66_0==OUTPUT||LA66_0==RANGE||LA66_0==REAL||LA66_0==RESTRICT||(LA66_0 >= SHORT && LA66_0 <= SIGNED)||LA66_0==STRUCT||LA66_0==TYPEOF||(LA66_0 >= UNION && LA66_0 <= UNSIGNED)||(LA66_0 >= VOID && LA66_0 <= VOLATILE)) ) {
					alt66=1;
				}

				switch (alt66) {
				case 1 :
					// CivlCParser.g:887:7: typeSpecifierOrQualifier
					{
					pushFollow(FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList6247);
					typeSpecifierOrQualifier252=typeSpecifierOrQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeSpecifierOrQualifier.add(typeSpecifierOrQualifier252.getTree());
					}
					break;

				default :
					if ( cnt66 >= 1 ) break loop66;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(66, input);
					throw eee;
				}
				cnt66++;
			}

			// AST REWRITE
			// elements: typeSpecifierOrQualifier
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 888:7: -> ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ )
			{
				// CivlCParser.g:888:10: ^( SPECIFIER_QUALIFIER_LIST ( typeSpecifierOrQualifier )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SPECIFIER_QUALIFIER_LIST, "SPECIFIER_QUALIFIER_LIST"), root_1);
				if ( !(stream_typeSpecifierOrQualifier.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_typeSpecifierOrQualifier.hasNext() ) {
					adaptor.addChild(root_1, stream_typeSpecifierOrQualifier.nextTree());
				}
				stream_typeSpecifierOrQualifier.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "specifierQualifierList"


	public static class structDeclaratorList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structDeclaratorList"
	// CivlCParser.g:895:1: structDeclaratorList :s+= structDeclarator ( COMMA s+= structDeclarator )* -> ^( STRUCT_DECLARATOR_LIST ( $s)+ ) ;
	public final CivlCParser.structDeclaratorList_return structDeclaratorList() throws RecognitionException {
		CivlCParser.structDeclaratorList_return retval = new CivlCParser.structDeclaratorList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA253=null;
		List<Object> list_s=null;
		RuleReturnScope s = null;
		Object COMMA253_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_structDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule structDeclarator");

		try {
			// CivlCParser.g:896:5: (s+= structDeclarator ( COMMA s+= structDeclarator )* -> ^( STRUCT_DECLARATOR_LIST ( $s)+ ) )
			// CivlCParser.g:896:7: s+= structDeclarator ( COMMA s+= structDeclarator )*
			{
			pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList6284);
			s=structDeclarator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_structDeclarator.add(s.getTree());
			if (list_s==null) list_s=new ArrayList<Object>();
			list_s.add(s.getTree());
			// CivlCParser.g:896:27: ( COMMA s+= structDeclarator )*
			loop67:
			while (true) {
				int alt67=2;
				int LA67_0 = input.LA(1);
				if ( (LA67_0==COMMA) ) {
					alt67=1;
				}

				switch (alt67) {
				case 1 :
					// CivlCParser.g:896:28: COMMA s+= structDeclarator
					{
					COMMA253=(Token)match(input,COMMA,FOLLOW_COMMA_in_structDeclaratorList6287); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA253);

					pushFollow(FOLLOW_structDeclarator_in_structDeclaratorList6291);
					s=structDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_structDeclarator.add(s.getTree());
					if (list_s==null) list_s=new ArrayList<Object>();
					list_s.add(s.getTree());
					}
					break;

				default :
					break loop67;
				}
			}

			// AST REWRITE
			// elements: s
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: s
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
			RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"token s",list_s);
			root_0 = (Object)adaptor.nil();
			// 897:7: -> ^( STRUCT_DECLARATOR_LIST ( $s)+ )
			{
				// CivlCParser.g:897:10: ^( STRUCT_DECLARATOR_LIST ( $s)+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATOR_LIST, "STRUCT_DECLARATOR_LIST"), root_1);
				if ( !(stream_s.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_s.hasNext() ) {
					adaptor.addChild(root_1, stream_s.nextTree());
				}
				stream_s.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "structDeclaratorList"


	public static class structDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "structDeclarator"
	// CivlCParser.g:905:1: structDeclarator : ( declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) ) | COLON constantExpression -> ^( STRUCT_DECLARATOR ABSENT constantExpression ) );
	public final CivlCParser.structDeclarator_return structDeclarator() throws RecognitionException {
		CivlCParser.structDeclarator_return retval = new CivlCParser.structDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COLON255=null;
		Token COLON257=null;
		ParserRuleReturnScope declarator254 =null;
		ParserRuleReturnScope constantExpression256 =null;
		ParserRuleReturnScope constantExpression258 =null;

		Object COLON255_tree=null;
		Object COLON257_tree=null;
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");
		RewriteRuleSubtreeStream stream_declarator=new RewriteRuleSubtreeStream(adaptor,"rule declarator");

		try {
			// CivlCParser.g:906:5: ( declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) ) | COLON constantExpression -> ^( STRUCT_DECLARATOR ABSENT constantExpression ) )
			int alt69=2;
			int LA69_0 = input.LA(1);
			if ( (LA69_0==IDENTIFIER||LA69_0==LPAREN||LA69_0==STAR) ) {
				alt69=1;
			}
			else if ( (LA69_0==COLON) ) {
				alt69=2;
			}

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

			switch (alt69) {
				case 1 :
					// CivlCParser.g:906:7: declarator ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					{
					pushFollow(FOLLOW_declarator_in_structDeclarator6328);
					declarator254=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator254.getTree());
					// CivlCParser.g:907:7: ( -> ^( STRUCT_DECLARATOR declarator ABSENT ) | COLON constantExpression -> ^( STRUCT_DECLARATOR declarator constantExpression ) )
					int alt68=2;
					int LA68_0 = input.LA(1);
					if ( (LA68_0==COMMA||LA68_0==SEMI) ) {
						alt68=1;
					}
					else if ( (LA68_0==COLON) ) {
						alt68=2;
					}

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

					switch (alt68) {
						case 1 :
							// CivlCParser.g:907:10: 
							{
							// AST REWRITE
							// elements: declarator
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 907:10: -> ^( STRUCT_DECLARATOR declarator ABSENT )
							{
								// CivlCParser.g:907:13: ^( STRUCT_DECLARATOR declarator ABSENT )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATOR, "STRUCT_DECLARATOR"), root_1);
								adaptor.addChild(root_1, stream_declarator.nextTree());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:908:9: COLON constantExpression
							{
							COLON255=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator6357); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COLON.add(COLON255);

							pushFollow(FOLLOW_constantExpression_in_structDeclarator6359);
							constantExpression256=constantExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression256.getTree());
							// AST REWRITE
							// elements: constantExpression, declarator
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 909:10: -> ^( STRUCT_DECLARATOR declarator constantExpression )
							{
								// CivlCParser.g:909:13: ^( STRUCT_DECLARATOR declarator constantExpression )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATOR, "STRUCT_DECLARATOR"), root_1);
								adaptor.addChild(root_1, stream_declarator.nextTree());
								adaptor.addChild(root_1, stream_constantExpression.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// CivlCParser.g:911:7: COLON constantExpression
					{
					COLON257=(Token)match(input,COLON,FOLLOW_COLON_in_structDeclarator6394); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON257);

					pushFollow(FOLLOW_constantExpression_in_structDeclarator6396);
					constantExpression258=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression258.getTree());
					// AST REWRITE
					// elements: constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 912:7: -> ^( STRUCT_DECLARATOR ABSENT constantExpression )
					{
						// CivlCParser.g:912:10: ^( STRUCT_DECLARATOR ABSENT constantExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRUCT_DECLARATOR, "STRUCT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_constantExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "structDeclarator"


	public static class enumSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "enumSpecifier"
	// CivlCParser.g:920:1: enumSpecifier : ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) ) ;
	public final CivlCParser.enumSpecifier_return enumSpecifier() throws RecognitionException {
		CivlCParser.enumSpecifier_return retval = new CivlCParser.enumSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ENUM259=null;
		Token IDENTIFIER260=null;
		Token IDENTIFIER261=null;
		Token LCURLY262=null;
		Token COMMA264=null;
		Token RCURLY265=null;
		Token LCURLY266=null;
		Token COMMA268=null;
		Token RCURLY269=null;
		ParserRuleReturnScope enumeratorList263 =null;
		ParserRuleReturnScope enumeratorList267 =null;

		Object ENUM259_tree=null;
		Object IDENTIFIER260_tree=null;
		Object IDENTIFIER261_tree=null;
		Object LCURLY262_tree=null;
		Object COMMA264_tree=null;
		Object RCURLY265_tree=null;
		Object LCURLY266_tree=null;
		Object COMMA268_tree=null;
		Object RCURLY269_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_ENUM=new RewriteRuleTokenStream(adaptor,"token ENUM");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_enumeratorList=new RewriteRuleSubtreeStream(adaptor,"rule enumeratorList");

		try {
			// CivlCParser.g:921:5: ( ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) ) )
			// CivlCParser.g:921:7: ENUM ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) )
			{
			ENUM259=(Token)match(input,ENUM,FOLLOW_ENUM_in_enumSpecifier6431); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ENUM.add(ENUM259);

			// CivlCParser.g:922:9: ( IDENTIFIER -> ^( ENUM IDENTIFIER ABSENT ) | IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM IDENTIFIER enumeratorList ) | LCURLY enumeratorList ( COMMA )? RCURLY -> ^( ENUM ABSENT enumeratorList ) )
			int alt72=3;
			int LA72_0 = input.LA(1);
			if ( (LA72_0==IDENTIFIER) ) {
				int LA72_1 = input.LA(2);
				if ( (LA72_1==LCURLY) ) {
					alt72=2;
				}
				else if ( (LA72_1==EOF||(LA72_1 >= COLON && LA72_1 <= COMMA)||LA72_1==IDENTIFIER||LA72_1==LPAREN||LA72_1==LSQUARE||LA72_1==RPAREN||LA72_1==SEMI||LA72_1==STAR||(LA72_1 >= ABSTRACT && LA72_1 <= ALIGNAS)||(LA72_1 >= ATOMIC && LA72_1 <= AUTO)||LA72_1==BOOL||LA72_1==CHAR||(LA72_1 >= COMPLEX && LA72_1 <= CONST)||(LA72_1 >= DEVICE && LA72_1 <= DIFFERENTIABLE)||(LA72_1 >= DOMAIN && LA72_1 <= DOUBLE)||LA72_1==ENUM||(LA72_1 >= EXTERN && LA72_1 <= FATOMIC)||LA72_1==FLOAT||LA72_1==GLOBAL||(LA72_1 >= INLINE && LA72_1 <= INT)||(LA72_1 >= LONG && LA72_1 <= NORETURN)||LA72_1==OUTPUT||(LA72_1 >= PURE && LA72_1 <= RANGE)||(LA72_1 >= REAL && LA72_1 <= REGISTER)||LA72_1==RESTRICT||(LA72_1 >= SHARED && LA72_1 <= SIGNED)||LA72_1==STATE_F||LA72_1==STATIC||LA72_1==STRUCT||LA72_1==SYSTEM||(LA72_1 >= THREADLOCAL && LA72_1 <= TYPEOF)||(LA72_1 >= UNION && LA72_1 <= UNSIGNED)||(LA72_1 >= VOID && LA72_1 <= VOLATILE)) ) {
					alt72=1;
				}

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

			}
			else if ( (LA72_0==LCURLY) ) {
				alt72=3;
			}

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

			switch (alt72) {
				case 1 :
					// CivlCParser.g:922:11: IDENTIFIER
					{
					IDENTIFIER260=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6443); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER260);

					// AST REWRITE
					// elements: ENUM, IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 923:11: -> ^( ENUM IDENTIFIER ABSENT )
					{
						// CivlCParser.g:923:14: ^( ENUM IDENTIFIER ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ENUM.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:924:11: IDENTIFIER LCURLY enumeratorList ( COMMA )? RCURLY
					{
					IDENTIFIER261=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumSpecifier6475); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER261);

					LCURLY262=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_enumSpecifier6477); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY262);

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6479);
					enumeratorList263=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList263.getTree());
					// CivlCParser.g:924:44: ( COMMA )?
					int alt70=2;
					int LA70_0 = input.LA(1);
					if ( (LA70_0==COMMA) ) {
						alt70=1;
					}
					switch (alt70) {
						case 1 :
							// CivlCParser.g:924:44: COMMA
							{
							COMMA264=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6481); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA264);

							}
							break;

					}

					RCURLY265=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_enumSpecifier6484); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY265);

					// AST REWRITE
					// elements: IDENTIFIER, enumeratorList, ENUM
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 925:11: -> ^( ENUM IDENTIFIER enumeratorList )
					{
						// CivlCParser.g:925:14: ^( ENUM IDENTIFIER enumeratorList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ENUM.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, stream_enumeratorList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:926:11: LCURLY enumeratorList ( COMMA )? RCURLY
					{
					LCURLY266=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_enumSpecifier6516); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY266);

					pushFollow(FOLLOW_enumeratorList_in_enumSpecifier6518);
					enumeratorList267=enumeratorList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumeratorList.add(enumeratorList267.getTree());
					// CivlCParser.g:926:33: ( COMMA )?
					int alt71=2;
					int LA71_0 = input.LA(1);
					if ( (LA71_0==COMMA) ) {
						alt71=1;
					}
					switch (alt71) {
						case 1 :
							// CivlCParser.g:926:33: COMMA
							{
							COMMA268=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumSpecifier6520); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA268);

							}
							break;

					}

					RCURLY269=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_enumSpecifier6523); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY269);

					// AST REWRITE
					// elements: enumeratorList, ENUM
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 927:11: -> ^( ENUM ABSENT enumeratorList )
					{
						// CivlCParser.g:927:14: ^( ENUM ABSENT enumeratorList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ENUM.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_enumeratorList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "enumSpecifier"


	public static class enumeratorList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "enumeratorList"
	// CivlCParser.g:935:1: enumeratorList : enumerator ( COMMA enumerator )* -> ^( ENUMERATOR_LIST ( enumerator )+ ) ;
	public final CivlCParser.enumeratorList_return enumeratorList() throws RecognitionException {
		CivlCParser.enumeratorList_return retval = new CivlCParser.enumeratorList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA271=null;
		ParserRuleReturnScope enumerator270 =null;
		ParserRuleReturnScope enumerator272 =null;

		Object COMMA271_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_enumerator=new RewriteRuleSubtreeStream(adaptor,"rule enumerator");

		try {
			// CivlCParser.g:936:5: ( enumerator ( COMMA enumerator )* -> ^( ENUMERATOR_LIST ( enumerator )+ ) )
			// CivlCParser.g:936:7: enumerator ( COMMA enumerator )*
			{
			pushFollow(FOLLOW_enumerator_in_enumeratorList6572);
			enumerator270=enumerator();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_enumerator.add(enumerator270.getTree());
			// CivlCParser.g:936:18: ( COMMA enumerator )*
			loop73:
			while (true) {
				int alt73=2;
				int LA73_0 = input.LA(1);
				if ( (LA73_0==COMMA) ) {
					int LA73_1 = input.LA(2);
					if ( (LA73_1==IDENTIFIER) ) {
						alt73=1;
					}

				}

				switch (alt73) {
				case 1 :
					// CivlCParser.g:936:19: COMMA enumerator
					{
					COMMA271=(Token)match(input,COMMA,FOLLOW_COMMA_in_enumeratorList6575); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA271);

					pushFollow(FOLLOW_enumerator_in_enumeratorList6577);
					enumerator272=enumerator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_enumerator.add(enumerator272.getTree());
					}
					break;

				default :
					break loop73;
				}
			}

			// AST REWRITE
			// elements: enumerator
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 937:7: -> ^( ENUMERATOR_LIST ( enumerator )+ )
			{
				// CivlCParser.g:937:10: ^( ENUMERATOR_LIST ( enumerator )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUMERATOR_LIST, "ENUMERATOR_LIST"), root_1);
				if ( !(stream_enumerator.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_enumerator.hasNext() ) {
					adaptor.addChild(root_1, stream_enumerator.nextTree());
				}
				stream_enumerator.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "enumeratorList"


	public static class enumerator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "enumerator"
	// CivlCParser.g:945:1: enumerator : IDENTIFIER ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) ) ;
	public final CivlCParser.enumerator_return enumerator() throws RecognitionException {
		CivlCParser.enumerator_return retval = new CivlCParser.enumerator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER273=null;
		Token ASSIGN274=null;
		ParserRuleReturnScope constantExpression275 =null;

		Object IDENTIFIER273_tree=null;
		Object ASSIGN274_tree=null;
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_ASSIGN=new RewriteRuleTokenStream(adaptor,"token ASSIGN");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");

		try {
			// CivlCParser.g:946:2: ( IDENTIFIER ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) ) )
			// CivlCParser.g:946:4: IDENTIFIER ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) )
			{
			IDENTIFIER273=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumerator6610); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER273);

			if ( state.backtracking==0 ) {
			    		Symbols_stack.peek().enumerationConstants.add((IDENTIFIER273!=null?IDENTIFIER273.getText():null));
					// System.err.println("define enum constant "+(IDENTIFIER273!=null?IDENTIFIER273.getText():null));
			    	  }
			// CivlCParser.g:951:8: ( -> ^( ENUMERATOR IDENTIFIER ABSENT ) | ( ASSIGN constantExpression ) -> ^( ENUMERATOR IDENTIFIER constantExpression ) )
			int alt74=2;
			int LA74_0 = input.LA(1);
			if ( (LA74_0==COMMA||LA74_0==RCURLY) ) {
				alt74=1;
			}
			else if ( (LA74_0==ASSIGN) ) {
				alt74=2;
			}

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

			switch (alt74) {
				case 1 :
					// CivlCParser.g:951:11: 
					{
					// AST REWRITE
					// elements: IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 951:11: -> ^( ENUMERATOR IDENTIFIER ABSENT )
					{
						// CivlCParser.g:951:14: ^( ENUMERATOR IDENTIFIER ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUMERATOR, "ENUMERATOR"), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:952:10: ( ASSIGN constantExpression )
					{
					// CivlCParser.g:952:10: ( ASSIGN constantExpression )
					// CivlCParser.g:952:11: ASSIGN constantExpression
					{
					ASSIGN274=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_enumerator6651); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN274);

					pushFollow(FOLLOW_constantExpression_in_enumerator6653);
					constantExpression275=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression275.getTree());
					}

					// AST REWRITE
					// elements: IDENTIFIER, constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 953:11: -> ^( ENUMERATOR IDENTIFIER constantExpression )
					{
						// CivlCParser.g:953:14: ^( ENUMERATOR IDENTIFIER constantExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ENUMERATOR, "ENUMERATOR"), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, stream_constantExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "enumerator"


	public static class atomicTypeSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "atomicTypeSpecifier"
	// CivlCParser.g:958:1: atomicTypeSpecifier : ATOMIC LPAREN typeName RPAREN -> ^( ATOMIC typeName ) ;
	public final CivlCParser.atomicTypeSpecifier_return atomicTypeSpecifier() throws RecognitionException {
		CivlCParser.atomicTypeSpecifier_return retval = new CivlCParser.atomicTypeSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ATOMIC276=null;
		Token LPAREN277=null;
		Token RPAREN279=null;
		ParserRuleReturnScope typeName278 =null;

		Object ATOMIC276_tree=null;
		Object LPAREN277_tree=null;
		Object RPAREN279_tree=null;
		RewriteRuleTokenStream stream_ATOMIC=new RewriteRuleTokenStream(adaptor,"token ATOMIC");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");

		try {
			// CivlCParser.g:959:5: ( ATOMIC LPAREN typeName RPAREN -> ^( ATOMIC typeName ) )
			// CivlCParser.g:959:7: ATOMIC LPAREN typeName RPAREN
			{
			ATOMIC276=(Token)match(input,ATOMIC,FOLLOW_ATOMIC_in_atomicTypeSpecifier6699); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ATOMIC.add(ATOMIC276);

			LPAREN277=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_atomicTypeSpecifier6701); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN277);

			pushFollow(FOLLOW_typeName_in_atomicTypeSpecifier6703);
			typeName278=typeName();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeName.add(typeName278.getTree());
			RPAREN279=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_atomicTypeSpecifier6705); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN279);

			// AST REWRITE
			// elements: ATOMIC, typeName
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 960:7: -> ^( ATOMIC typeName )
			{
				// CivlCParser.g:960:10: ^( ATOMIC typeName )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_ATOMIC.nextNode(), root_1);
				adaptor.addChild(root_1, stream_typeName.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "atomicTypeSpecifier"


	public static class typeQualifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeQualifier"
	// CivlCParser.g:964:1: typeQualifier : ( CONST | RESTRICT | VOLATILE | ATOMIC | INPUT | OUTPUT );
	public final CivlCParser.typeQualifier_return typeQualifier() throws RecognitionException {
		CivlCParser.typeQualifier_return retval = new CivlCParser.typeQualifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set280=null;

		Object set280_tree=null;

		try {
			// CivlCParser.g:965:5: ( CONST | RESTRICT | VOLATILE | ATOMIC | INPUT | OUTPUT )
			// CivlCParser.g:
			{
			root_0 = (Object)adaptor.nil();


			set280=input.LT(1);
			if ( input.LA(1)==ATOMIC||input.LA(1)==CONST||input.LA(1)==INPUT||input.LA(1)==OUTPUT||input.LA(1)==RESTRICT||input.LA(1)==VOLATILE ) {
				input.consume();
				if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set280));
				state.errorRecovery=false;
				state.failed=false;
			}
			else {
				if (state.backtracking>0) {state.failed=true; return retval;}
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeQualifier"


	public static class functionSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "functionSpecifier"
	// CivlCParser.g:974:1: functionSpecifier : ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL | differentiableSpecifier );
	public final CivlCParser.functionSpecifier_return functionSpecifier() throws RecognitionException {
		CivlCParser.functionSpecifier_return retval = new CivlCParser.functionSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token INLINE281=null;
		Token NORETURN282=null;
		Token PURE284=null;
		Token STATE_F285=null;
		Token SYSTEM286=null;
		Token SYSTEM288=null;
		Token FATOMIC289=null;
		Token DEVICE290=null;
		Token GLOBAL291=null;
		ParserRuleReturnScope abstractSpecifier283 =null;
		ParserRuleReturnScope libraryName287 =null;
		ParserRuleReturnScope differentiableSpecifier292 =null;

		Object INLINE281_tree=null;
		Object NORETURN282_tree=null;
		Object PURE284_tree=null;
		Object STATE_F285_tree=null;
		Object SYSTEM286_tree=null;
		Object SYSTEM288_tree=null;
		Object FATOMIC289_tree=null;
		Object DEVICE290_tree=null;
		Object GLOBAL291_tree=null;
		RewriteRuleTokenStream stream_SYSTEM=new RewriteRuleTokenStream(adaptor,"token SYSTEM");
		RewriteRuleTokenStream stream_FATOMIC=new RewriteRuleTokenStream(adaptor,"token FATOMIC");
		RewriteRuleTokenStream stream_PURE=new RewriteRuleTokenStream(adaptor,"token PURE");
		RewriteRuleTokenStream stream_STATE_F=new RewriteRuleTokenStream(adaptor,"token STATE_F");
		RewriteRuleSubtreeStream stream_libraryName=new RewriteRuleSubtreeStream(adaptor,"rule libraryName");

		try {
			// CivlCParser.g:975:5: ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL | differentiableSpecifier )
			int alt75=11;
			alt75 = dfa75.predict(input);
			switch (alt75) {
				case 1 :
					// CivlCParser.g:975:7: INLINE
					{
					root_0 = (Object)adaptor.nil();


					INLINE281=(Token)match(input,INLINE,FOLLOW_INLINE_in_functionSpecifier6777); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					INLINE281_tree = (Object)adaptor.create(INLINE281);
					adaptor.addChild(root_0, INLINE281_tree);
					}

					}
					break;
				case 2 :
					// CivlCParser.g:975:16: NORETURN
					{
					root_0 = (Object)adaptor.nil();


					NORETURN282=(Token)match(input,NORETURN,FOLLOW_NORETURN_in_functionSpecifier6781); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					NORETURN282_tree = (Object)adaptor.create(NORETURN282);
					adaptor.addChild(root_0, NORETURN282_tree);
					}

					}
					break;
				case 3 :
					// CivlCParser.g:976:7: abstractSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_abstractSpecifier_in_functionSpecifier6789);
					abstractSpecifier283=abstractSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, abstractSpecifier283.getTree());

					}
					break;
				case 4 :
					// CivlCParser.g:977:7: PURE
					{
					PURE284=(Token)match(input,PURE,FOLLOW_PURE_in_functionSpecifier6797); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PURE.add(PURE284);

					// AST REWRITE
					// elements: PURE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 977:12: -> ^( PURE )
					{
						// CivlCParser.g:977:15: ^( PURE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_PURE.nextNode(), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// CivlCParser.g:978:7: STATE_F
					{
					STATE_F285=(Token)match(input,STATE_F,FOLLOW_STATE_F_in_functionSpecifier6811); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATE_F.add(STATE_F285);

					// AST REWRITE
					// elements: STATE_F
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 978:15: -> ^( STATE_F )
					{
						// CivlCParser.g:978:18: ^( STATE_F )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_STATE_F.nextNode(), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// CivlCParser.g:979:7: ( ( SYSTEM libraryName )=> SYSTEM libraryName )
					{
					// CivlCParser.g:979:7: ( ( SYSTEM libraryName )=> SYSTEM libraryName )
					// CivlCParser.g:979:8: ( SYSTEM libraryName )=> SYSTEM libraryName
					{
					SYSTEM286=(Token)match(input,SYSTEM,FOLLOW_SYSTEM_in_functionSpecifier6834); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SYSTEM.add(SYSTEM286);

					pushFollow(FOLLOW_libraryName_in_functionSpecifier6836);
					libraryName287=libraryName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_libraryName.add(libraryName287.getTree());
					}

					// AST REWRITE
					// elements: SYSTEM, libraryName
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 979:52: -> ^( SYSTEM libraryName )
					{
						// CivlCParser.g:979:55: ^( SYSTEM libraryName )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SYSTEM.nextNode(), root_1);
						adaptor.addChild(root_1, stream_libraryName.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 7 :
					// CivlCParser.g:980:7: SYSTEM
					{
					SYSTEM288=(Token)match(input,SYSTEM,FOLLOW_SYSTEM_in_functionSpecifier6853); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SYSTEM.add(SYSTEM288);

					// AST REWRITE
					// elements: SYSTEM
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 980:15: -> ^( SYSTEM ABSENT )
					{
						// CivlCParser.g:980:18: ^( SYSTEM ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SYSTEM.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 8 :
					// CivlCParser.g:981:7: FATOMIC
					{
					FATOMIC289=(Token)match(input,FATOMIC,FOLLOW_FATOMIC_in_functionSpecifier6870); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_FATOMIC.add(FATOMIC289);

					// AST REWRITE
					// elements: FATOMIC
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 981:15: -> ^( FATOMIC )
					{
						// CivlCParser.g:981:18: ^( FATOMIC )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_FATOMIC.nextNode(), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 9 :
					// CivlCParser.g:982:7: DEVICE
					{
					root_0 = (Object)adaptor.nil();


					DEVICE290=(Token)match(input,DEVICE,FOLLOW_DEVICE_in_functionSpecifier6884); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					DEVICE290_tree = (Object)adaptor.create(DEVICE290);
					adaptor.addChild(root_0, DEVICE290_tree);
					}

					}
					break;
				case 10 :
					// CivlCParser.g:983:7: GLOBAL
					{
					root_0 = (Object)adaptor.nil();


					GLOBAL291=(Token)match(input,GLOBAL,FOLLOW_GLOBAL_in_functionSpecifier6892); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					GLOBAL291_tree = (Object)adaptor.create(GLOBAL291);
					adaptor.addChild(root_0, GLOBAL291_tree);
					}

					}
					break;
				case 11 :
					// CivlCParser.g:984:7: differentiableSpecifier
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_differentiableSpecifier_in_functionSpecifier6900);
					differentiableSpecifier292=differentiableSpecifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, differentiableSpecifier292.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "functionSpecifier"


	public static class abstractSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "abstractSpecifier"
	// CivlCParser.g:987:1: abstractSpecifier : ABSTRACT ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) ) ;
	public final CivlCParser.abstractSpecifier_return abstractSpecifier() throws RecognitionException {
		CivlCParser.abstractSpecifier_return retval = new CivlCParser.abstractSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ABSTRACT293=null;
		Token CONTIN294=null;
		Token LPAREN295=null;
		Token INTEGER_CONSTANT296=null;
		Token RPAREN297=null;
		Token LPAREN298=null;
		Token STRING_LITERAL299=null;
		Token RPAREN300=null;

		Object ABSTRACT293_tree=null;
		Object CONTIN294_tree=null;
		Object LPAREN295_tree=null;
		Object INTEGER_CONSTANT296_tree=null;
		Object RPAREN297_tree=null;
		Object LPAREN298_tree=null;
		Object STRING_LITERAL299_tree=null;
		Object RPAREN300_tree=null;
		RewriteRuleTokenStream stream_CONTIN=new RewriteRuleTokenStream(adaptor,"token CONTIN");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_ABSTRACT=new RewriteRuleTokenStream(adaptor,"token ABSTRACT");
		RewriteRuleTokenStream stream_INTEGER_CONSTANT=new RewriteRuleTokenStream(adaptor,"token INTEGER_CONSTANT");

		try {
			// CivlCParser.g:988:5: ( ABSTRACT ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) ) )
			// CivlCParser.g:988:7: ABSTRACT ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			{
			ABSTRACT293=(Token)match(input,ABSTRACT,FOLLOW_ABSTRACT_in_abstractSpecifier6917); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ABSTRACT.add(ABSTRACT293);

			// CivlCParser.g:988:16: ( -> ^( ABSTRACT ) | CONTIN LPAREN INTEGER_CONSTANT RPAREN -> ^( ABSTRACT INTEGER_CONSTANT ) | LPAREN STRING_LITERAL RPAREN -> ^( ABSTRACT STRING_LITERAL ) )
			int alt76=3;
			switch ( input.LA(1) ) {
			case COMMA:
			case IDENTIFIER:
			case LSQUARE:
			case RPAREN:
			case SEMI:
			case STAR:
			case ABSTRACT:
			case ALIGNAS:
			case ATOMIC:
			case AUTO:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DEVICE:
			case DIFFERENTIABLE:
			case DOMAIN:
			case DOUBLE:
			case ENUM:
			case EXTERN:
			case FATOMIC:
			case FLOAT:
			case GLOBAL:
			case INLINE:
			case INPUT:
			case INT:
			case LONG:
			case MEM_TYPE:
			case NORETURN:
			case OUTPUT:
			case PURE:
			case RANGE:
			case REAL:
			case REGISTER:
			case RESTRICT:
			case SHARED:
			case SHORT:
			case SIGNED:
			case STATE_F:
			case STATIC:
			case STRUCT:
			case SYSTEM:
			case THREADLOCAL:
			case TYPEDEF:
			case TYPEOF:
			case UNION:
			case UNSIGNED:
			case VOID:
			case VOLATILE:
				{
				alt76=1;
				}
				break;
			case LPAREN:
				{
				int LA76_2 = input.LA(2);
				if ( (LA76_2==STRING_LITERAL) ) {
					alt76=3;
				}
				else if ( (LA76_2==IDENTIFIER||LA76_2==LPAREN||LA76_2==LSQUARE||LA76_2==RPAREN||LA76_2==STAR||(LA76_2 >= ABSTRACT && LA76_2 <= ALIGNAS)||(LA76_2 >= ATOMIC && LA76_2 <= AUTO)||LA76_2==BOOL||LA76_2==CHAR||(LA76_2 >= COMPLEX && LA76_2 <= CONST)||(LA76_2 >= DEVICE && LA76_2 <= DIFFERENTIABLE)||(LA76_2 >= DOMAIN && LA76_2 <= DOUBLE)||LA76_2==ENUM||(LA76_2 >= EXTERN && LA76_2 <= FATOMIC)||LA76_2==FLOAT||LA76_2==GLOBAL||(LA76_2 >= INLINE && LA76_2 <= INT)||(LA76_2 >= LONG && LA76_2 <= NORETURN)||LA76_2==OUTPUT||(LA76_2 >= PURE && LA76_2 <= RANGE)||(LA76_2 >= REAL && LA76_2 <= REGISTER)||LA76_2==RESTRICT||(LA76_2 >= SHARED && LA76_2 <= SIGNED)||LA76_2==STATE_F||LA76_2==STATIC||LA76_2==STRUCT||LA76_2==SYSTEM||(LA76_2 >= THREADLOCAL && LA76_2 <= TYPEOF)||(LA76_2 >= UNION && LA76_2 <= UNSIGNED)||(LA76_2 >= VOID && LA76_2 <= VOLATILE)) ) {
					alt76=1;
				}

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

				}
				break;
			case CONTIN:
				{
				alt76=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 76, 0, input);
				throw nvae;
			}
			switch (alt76) {
				case 1 :
					// CivlCParser.g:988:19: 
					{
					// AST REWRITE
					// elements: ABSTRACT
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 988:19: -> ^( ABSTRACT )
					{
						// CivlCParser.g:988:22: ^( ABSTRACT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ABSTRACT.nextNode(), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:989:20: CONTIN LPAREN INTEGER_CONSTANT RPAREN
					{
					CONTIN294=(Token)match(input,CONTIN,FOLLOW_CONTIN_in_abstractSpecifier6947); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CONTIN.add(CONTIN294);

					LPAREN295=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_abstractSpecifier6949); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN295);

					INTEGER_CONSTANT296=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_abstractSpecifier6951); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INTEGER_CONSTANT.add(INTEGER_CONSTANT296);

					RPAREN297=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_abstractSpecifier6953); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN297);

					// AST REWRITE
					// elements: INTEGER_CONSTANT, ABSTRACT
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 990:19: -> ^( ABSTRACT INTEGER_CONSTANT )
					{
						// CivlCParser.g:990:22: ^( ABSTRACT INTEGER_CONSTANT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ABSTRACT.nextNode(), root_1);
						adaptor.addChild(root_1, stream_INTEGER_CONSTANT.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:991:19: LPAREN STRING_LITERAL RPAREN
					{
					LPAREN298=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_abstractSpecifier6999); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN298);

					STRING_LITERAL299=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_abstractSpecifier7001); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL299);

					RPAREN300=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_abstractSpecifier7003); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN300);

					// AST REWRITE
					// elements: STRING_LITERAL, ABSTRACT
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 992:19: -> ^( ABSTRACT STRING_LITERAL )
					{
						// CivlCParser.g:992:22: ^( ABSTRACT STRING_LITERAL )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ABSTRACT.nextNode(), root_1);
						adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "abstractSpecifier"


	public static class differentiableSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "differentiableSpecifier"
	// CivlCParser.g:996:1: differentiableSpecifier : DIFFERENTIABLE LPAREN INTEGER_CONSTANT COMMA intervalSeq RPAREN -> ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq ) ;
	public final CivlCParser.differentiableSpecifier_return differentiableSpecifier() throws RecognitionException {
		CivlCParser.differentiableSpecifier_return retval = new CivlCParser.differentiableSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DIFFERENTIABLE301=null;
		Token LPAREN302=null;
		Token INTEGER_CONSTANT303=null;
		Token COMMA304=null;
		Token RPAREN306=null;
		ParserRuleReturnScope intervalSeq305 =null;

		Object DIFFERENTIABLE301_tree=null;
		Object LPAREN302_tree=null;
		Object INTEGER_CONSTANT303_tree=null;
		Object COMMA304_tree=null;
		Object RPAREN306_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_DIFFERENTIABLE=new RewriteRuleTokenStream(adaptor,"token DIFFERENTIABLE");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_INTEGER_CONSTANT=new RewriteRuleTokenStream(adaptor,"token INTEGER_CONSTANT");
		RewriteRuleSubtreeStream stream_intervalSeq=new RewriteRuleSubtreeStream(adaptor,"rule intervalSeq");

		try {
			// CivlCParser.g:997:2: ( DIFFERENTIABLE LPAREN INTEGER_CONSTANT COMMA intervalSeq RPAREN -> ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq ) )
			// CivlCParser.g:997:4: DIFFERENTIABLE LPAREN INTEGER_CONSTANT COMMA intervalSeq RPAREN
			{
			DIFFERENTIABLE301=(Token)match(input,DIFFERENTIABLE,FOLLOW_DIFFERENTIABLE_in_differentiableSpecifier7060); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DIFFERENTIABLE.add(DIFFERENTIABLE301);

			LPAREN302=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_differentiableSpecifier7062); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN302);

			INTEGER_CONSTANT303=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_differentiableSpecifier7064); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_INTEGER_CONSTANT.add(INTEGER_CONSTANT303);

			COMMA304=(Token)match(input,COMMA,FOLLOW_COMMA_in_differentiableSpecifier7066); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA304);

			pushFollow(FOLLOW_intervalSeq_in_differentiableSpecifier7068);
			intervalSeq305=intervalSeq();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_intervalSeq.add(intervalSeq305.getTree());
			RPAREN306=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_differentiableSpecifier7070); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN306);

			// AST REWRITE
			// elements: INTEGER_CONSTANT, DIFFERENTIABLE, intervalSeq
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 998:4: -> ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq )
			{
				// CivlCParser.g:999:4: ^( DIFFERENTIABLE INTEGER_CONSTANT intervalSeq )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_DIFFERENTIABLE.nextNode(), root_1);
				adaptor.addChild(root_1, stream_INTEGER_CONSTANT.nextNode());
				adaptor.addChild(root_1, stream_intervalSeq.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "differentiableSpecifier"


	public static class libraryName_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "libraryName"
	// CivlCParser.g:1002:1: libraryName : LSQUARE i0= IDENTIFIER i1+= ( SUB | IDENTIFIER )* RSQUARE -> ^( LIB_NAME $i0 ( $i1)* ) ;
	public final CivlCParser.libraryName_return libraryName() throws RecognitionException {
		CivlCParser.libraryName_return retval = new CivlCParser.libraryName_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token i0=null;
		Token LSQUARE307=null;
		Token RSQUARE308=null;
		Token i1=null;
		List<Object> list_i1=null;

		Object i0_tree=null;
		Object LSQUARE307_tree=null;
		Object RSQUARE308_tree=null;
		Object i1_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_SUB=new RewriteRuleTokenStream(adaptor,"token SUB");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

		try {
			// CivlCParser.g:1003:2: ( LSQUARE i0= IDENTIFIER i1+= ( SUB | IDENTIFIER )* RSQUARE -> ^( LIB_NAME $i0 ( $i1)* ) )
			// CivlCParser.g:1003:4: LSQUARE i0= IDENTIFIER i1+= ( SUB | IDENTIFIER )* RSQUARE
			{
			LSQUARE307=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_libraryName7097); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE307);

			i0=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_libraryName7101); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(i0);

			// CivlCParser.g:1003:30: ( SUB | IDENTIFIER )*
			loop77:
			while (true) {
				int alt77=3;
				int LA77_0 = input.LA(1);
				if ( (LA77_0==SUB) ) {
					alt77=1;
				}
				else if ( (LA77_0==IDENTIFIER) ) {
					alt77=2;
				}

				switch (alt77) {
				case 1 :
					// CivlCParser.g:1003:31: SUB
					{
					i1=(Token)match(input,SUB,FOLLOW_SUB_in_libraryName7106); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SUB.add(i1);

					if (list_i1==null) list_i1=new ArrayList<Object>();
					list_i1.add(i1);
					}
					break;
				case 2 :
					// CivlCParser.g:1003:37: IDENTIFIER
					{
					i1=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_libraryName7110); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(i1);

					if (list_i1==null) list_i1=new ArrayList<Object>();
					list_i1.add(i1);
					}
					break;

				default :
					break loop77;
				}
			}

			RSQUARE308=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_libraryName7114); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE308);

			// AST REWRITE
			// elements: i0, i1
			// token labels: i0
			// rule labels: retval
			// token list labels: i1
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleTokenStream stream_i0=new RewriteRuleTokenStream(adaptor,"token i0",i0);
			RewriteRuleTokenStream stream_i1=new RewriteRuleTokenStream(adaptor,"token i1", list_i1);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1004:2: -> ^( LIB_NAME $i0 ( $i1)* )
			{
				// CivlCParser.g:1004:4: ^( LIB_NAME $i0 ( $i1)* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(LIB_NAME, "LIB_NAME"), root_1);
				adaptor.addChild(root_1, stream_i0.nextNode());
				// CivlCParser.g:1004:20: ( $i1)*
				while ( stream_i1.hasNext() ) {
					adaptor.addChild(root_1, stream_i1.nextNode());
				}
				stream_i1.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "libraryName"


	public static class alignmentSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "alignmentSpecifier"
	// CivlCParser.g:1014:1: alignmentSpecifier : ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) ) ;
	public final CivlCParser.alignmentSpecifier_return alignmentSpecifier() throws RecognitionException {
		CivlCParser.alignmentSpecifier_return retval = new CivlCParser.alignmentSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ALIGNAS309=null;
		Token LPAREN310=null;
		Token RPAREN312=null;
		Token RPAREN314=null;
		ParserRuleReturnScope typeName311 =null;
		ParserRuleReturnScope constantExpression313 =null;

		Object ALIGNAS309_tree=null;
		Object LPAREN310_tree=null;
		Object RPAREN312_tree=null;
		Object RPAREN314_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_ALIGNAS=new RewriteRuleTokenStream(adaptor,"token ALIGNAS");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");
		RewriteRuleSubtreeStream stream_typeName=new RewriteRuleSubtreeStream(adaptor,"rule typeName");

		try {
			// CivlCParser.g:1015:5: ( ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) ) )
			// CivlCParser.g:1015:7: ALIGNAS LPAREN ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			{
			ALIGNAS309=(Token)match(input,ALIGNAS,FOLLOW_ALIGNAS_in_alignmentSpecifier7144); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ALIGNAS.add(ALIGNAS309);

			LPAREN310=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_alignmentSpecifier7146); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN310);

			// CivlCParser.g:1016:9: ( typeName RPAREN -> ^( ALIGNAS TYPE typeName ) | constantExpression RPAREN -> ^( ALIGNAS EXPR constantExpression ) )
			int alt78=2;
			switch ( input.LA(1) ) {
			case ATOMIC:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DOMAIN:
			case DOUBLE:
			case ENUM:
			case FLOAT:
			case INPUT:
			case INT:
			case LONG:
			case MEM_TYPE:
			case OUTPUT:
			case RANGE:
			case REAL:
			case RESTRICT:
			case SHORT:
			case SIGNED:
			case STRUCT:
			case TYPEOF:
			case UNION:
			case UNSIGNED:
			case VOID:
			case VOLATILE:
				{
				alt78=1;
				}
				break;
			case IDENTIFIER:
				{
				int LA78_17 = input.LA(2);
				if ( ((!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText()))) ) {
					alt78=1;
				}
				else if ( (true) ) {
					alt78=2;
				}

				}
				break;
			case AMPERSAND:
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case INTEGER_CONSTANT:
			case LPAREN:
			case MINUSMINUS:
			case NOT:
			case PLUS:
			case PLUSPLUS:
			case STAR:
			case STRING_LITERAL:
			case SUB:
			case TILDE:
			case ALIGNOF:
			case BIG_O:
			case CALLS:
			case DERIV:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case STATE_NULL:
			case VALUE_AT:
				{
				alt78=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 78, 0, input);
				throw nvae;
			}
			switch (alt78) {
				case 1 :
					// CivlCParser.g:1016:11: typeName RPAREN
					{
					pushFollow(FOLLOW_typeName_in_alignmentSpecifier7158);
					typeName311=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName.add(typeName311.getTree());
					RPAREN312=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier7160); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN312);

					// AST REWRITE
					// elements: typeName, ALIGNAS
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1017:11: -> ^( ALIGNAS TYPE typeName )
					{
						// CivlCParser.g:1017:14: ^( ALIGNAS TYPE typeName )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ALIGNAS.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(TYPE, "TYPE"));
						adaptor.addChild(root_1, stream_typeName.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1018:11: constantExpression RPAREN
					{
					pushFollow(FOLLOW_constantExpression_in_alignmentSpecifier7192);
					constantExpression313=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression313.getTree());
					RPAREN314=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_alignmentSpecifier7194); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN314);

					// AST REWRITE
					// elements: ALIGNAS, constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1019:11: -> ^( ALIGNAS EXPR constantExpression )
					{
						// CivlCParser.g:1019:14: ^( ALIGNAS EXPR constantExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ALIGNAS.nextNode(), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(EXPR, "EXPR"));
						adaptor.addChild(root_1, stream_constantExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "alignmentSpecifier"


	public static class declarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarator"
	// CivlCParser.g:1028:1: declarator : (d= directDeclarator -> ^( DECLARATOR ABSENT $d) | pointer d= directDeclarator -> ^( DECLARATOR pointer $d) );
	public final CivlCParser.declarator_return declarator() throws RecognitionException {
		CivlCParser.declarator_return retval = new CivlCParser.declarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope d =null;
		ParserRuleReturnScope pointer315 =null;

		RewriteRuleSubtreeStream stream_pointer=new RewriteRuleSubtreeStream(adaptor,"rule pointer");
		RewriteRuleSubtreeStream stream_directDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule directDeclarator");

		try {
			// CivlCParser.g:1029:2: (d= directDeclarator -> ^( DECLARATOR ABSENT $d) | pointer d= directDeclarator -> ^( DECLARATOR pointer $d) )
			int alt79=2;
			int LA79_0 = input.LA(1);
			if ( (LA79_0==IDENTIFIER||LA79_0==LPAREN) ) {
				alt79=1;
			}
			else if ( (LA79_0==STAR) ) {
				alt79=2;
			}

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

			switch (alt79) {
				case 1 :
					// CivlCParser.g:1029:4: d= directDeclarator
					{
					pushFollow(FOLLOW_directDeclarator_in_declarator7242);
					d=directDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directDeclarator.add(d.getTree());
					// AST REWRITE
					// elements: d
					// token labels: 
					// rule labels: d, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1030:4: -> ^( DECLARATOR ABSENT $d)
					{
						// CivlCParser.g:1030:7: ^( DECLARATOR ABSENT $d)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATOR, "DECLARATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_d.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1031:4: pointer d= directDeclarator
					{
					pushFollow(FOLLOW_pointer_in_declarator7261);
					pointer315=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer315.getTree());
					pushFollow(FOLLOW_directDeclarator_in_declarator7265);
					d=directDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directDeclarator.add(d.getTree());
					// AST REWRITE
					// elements: pointer, d
					// token labels: 
					// rule labels: d, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1032:4: -> ^( DECLARATOR pointer $d)
					{
						// CivlCParser.g:1032:7: ^( DECLARATOR pointer $d)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATOR, "DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_pointer.nextTree());
						adaptor.addChild(root_1, stream_d.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declarator"


	public static class directDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directDeclarator"
	// CivlCParser.g:1040:1: directDeclarator : p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) ) ;
	public final CivlCParser.directDeclarator_return directDeclarator() throws RecognitionException {
		CivlCParser.directDeclarator_return retval = new CivlCParser.directDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		List<Object> list_s=null;
		ParserRuleReturnScope p =null;
		RuleReturnScope s = null;
		RewriteRuleSubtreeStream stream_directDeclaratorSuffix=new RewriteRuleSubtreeStream(adaptor,"rule directDeclaratorSuffix");
		RewriteRuleSubtreeStream stream_directDeclaratorPrefix=new RewriteRuleSubtreeStream(adaptor,"rule directDeclaratorPrefix");

		try {
			// CivlCParser.g:1041:2: (p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) ) )
			// CivlCParser.g:1041:4: p= directDeclaratorPrefix ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			{
			pushFollow(FOLLOW_directDeclaratorPrefix_in_directDeclarator7294);
			p=directDeclaratorPrefix();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_directDeclaratorPrefix.add(p.getTree());
			// CivlCParser.g:1042:4: ( -> ^( DIRECT_DECLARATOR $p) | (s+= directDeclaratorSuffix )+ -> ^( DIRECT_DECLARATOR $p ( $s)+ ) )
			int alt81=2;
			int LA81_0 = input.LA(1);
			if ( (LA81_0==EOF||LA81_0==ASSIGN||(LA81_0 >= COLON && LA81_0 <= COMMA)||LA81_0==IDENTIFIER||LA81_0==LCURLY||LA81_0==RPAREN||LA81_0==SEMI||(LA81_0 >= ABSTRACT && LA81_0 <= ALIGNAS)||(LA81_0 >= ASSIGNS && LA81_0 <= AUTO)||LA81_0==BOOL||LA81_0==CHAR||(LA81_0 >= COMPLEX && LA81_0 <= CONST)||LA81_0==DEPENDS||(LA81_0 >= DEVICE && LA81_0 <= DIFFERENTIABLE)||(LA81_0 >= DOMAIN && LA81_0 <= ENUM)||(LA81_0 >= EXTERN && LA81_0 <= FATOMIC)||LA81_0==FLOAT||LA81_0==GLOBAL||LA81_0==GUARD||(LA81_0 >= INLINE && LA81_0 <= INT)||(LA81_0 >= LONG && LA81_0 <= NORETURN)||LA81_0==OUTPUT||(LA81_0 >= PURE && LA81_0 <= RESTRICT)||(LA81_0 >= SHARED && LA81_0 <= SIGNED)||LA81_0==STATE_F||(LA81_0 >= STATIC && LA81_0 <= STRUCT)||LA81_0==SYSTEM||(LA81_0 >= THREADLOCAL && LA81_0 <= TYPEOF)||(LA81_0 >= UNION && LA81_0 <= UNSIGNED)||(LA81_0 >= VOID && LA81_0 <= VOLATILE)) ) {
				alt81=1;
			}
			else if ( (LA81_0==LPAREN||LA81_0==LSQUARE) ) {
				alt81=2;
			}

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

			switch (alt81) {
				case 1 :
					// CivlCParser.g:1042:6: 
					{
					// AST REWRITE
					// elements: p
					// token labels: 
					// rule labels: p, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_p=new RewriteRuleSubtreeStream(adaptor,"rule p",p!=null?p.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1042:6: -> ^( DIRECT_DECLARATOR $p)
					{
						// CivlCParser.g:1042:9: ^( DIRECT_DECLARATOR $p)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DIRECT_DECLARATOR, "DIRECT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_p.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1043:6: (s+= directDeclaratorSuffix )+
					{
					// CivlCParser.g:1043:7: (s+= directDeclaratorSuffix )+
					int cnt80=0;
					loop80:
					while (true) {
						int alt80=2;
						int LA80_0 = input.LA(1);
						if ( (LA80_0==LPAREN||LA80_0==LSQUARE) ) {
							alt80=1;
						}

						switch (alt80) {
						case 1 :
							// CivlCParser.g:1043:7: s+= directDeclaratorSuffix
							{
							pushFollow(FOLLOW_directDeclaratorSuffix_in_directDeclarator7317);
							s=directDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directDeclaratorSuffix.add(s.getTree());
							if (list_s==null) list_s=new ArrayList<Object>();
							list_s.add(s.getTree());
							}
							break;

						default :
							if ( cnt80 >= 1 ) break loop80;
							if (state.backtracking>0) {state.failed=true; return retval;}
							EarlyExitException eee = new EarlyExitException(80, input);
							throw eee;
						}
						cnt80++;
					}

					// AST REWRITE
					// elements: s, p
					// token labels: 
					// rule labels: p, retval
					// token list labels: 
					// rule list labels: s
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_p=new RewriteRuleSubtreeStream(adaptor,"rule p",p!=null?p.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"token s",list_s);
					root_0 = (Object)adaptor.nil();
					// 1043:33: -> ^( DIRECT_DECLARATOR $p ( $s)+ )
					{
						// CivlCParser.g:1043:35: ^( DIRECT_DECLARATOR $p ( $s)+ )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DIRECT_DECLARATOR, "DIRECT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_p.nextTree());
						if ( !(stream_s.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_s.hasNext() ) {
							adaptor.addChild(root_1, stream_s.nextTree());
						}
						stream_s.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directDeclarator"


	public static class directDeclaratorPrefix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directDeclaratorPrefix"
	// CivlCParser.g:1050:1: directDeclaratorPrefix : ( IDENTIFIER | LPAREN ! declarator RPAREN !);
	public final CivlCParser.directDeclaratorPrefix_return directDeclaratorPrefix() throws RecognitionException {
		CivlCParser.directDeclaratorPrefix_return retval = new CivlCParser.directDeclaratorPrefix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER316=null;
		Token LPAREN317=null;
		Token RPAREN319=null;
		ParserRuleReturnScope declarator318 =null;

		Object IDENTIFIER316_tree=null;
		Object LPAREN317_tree=null;
		Object RPAREN319_tree=null;

		try {
			// CivlCParser.g:1051:2: ( IDENTIFIER | LPAREN ! declarator RPAREN !)
			int alt82=2;
			int LA82_0 = input.LA(1);
			if ( (LA82_0==IDENTIFIER) ) {
				alt82=1;
			}
			else if ( (LA82_0==LPAREN) ) {
				alt82=2;
			}

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

			switch (alt82) {
				case 1 :
					// CivlCParser.g:1051:4: IDENTIFIER
					{
					root_0 = (Object)adaptor.nil();


					IDENTIFIER316=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_directDeclaratorPrefix7348); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					IDENTIFIER316_tree = (Object)adaptor.create(IDENTIFIER316);
					adaptor.addChild(root_0, IDENTIFIER316_tree);
					}

					if ( state.backtracking==0 ) {
								if (DeclarationScope_stack.peek().isTypedef) {
									Symbols_stack.peek().types.add((IDENTIFIER316!=null?IDENTIFIER316.getText():null));
					                //System.err.println("define type "+(IDENTIFIER316!=null?IDENTIFIER316.getText():null));
								}else{
					                //Symbols_stack.peek().types.remove((IDENTIFIER316!=null?IDENTIFIER316.getText():null));
					            }
							}
					}
					break;
				case 2 :
					// CivlCParser.g:1060:4: LPAREN ! declarator RPAREN !
					{
					root_0 = (Object)adaptor.nil();


					LPAREN317=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorPrefix7357); if (state.failed) return retval;
					pushFollow(FOLLOW_declarator_in_directDeclaratorPrefix7360);
					declarator318=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarator318.getTree());

					RPAREN319=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorPrefix7362); if (state.failed) return retval;
					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directDeclaratorPrefix"


	public static class directDeclaratorSuffix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directDeclaratorSuffix"
	// CivlCParser.g:1064:1: directDeclaratorSuffix : ( directDeclaratorArraySuffix | directDeclaratorFunctionSuffix );
	public final CivlCParser.directDeclaratorSuffix_return directDeclaratorSuffix() throws RecognitionException {
		CivlCParser.directDeclaratorSuffix_return retval = new CivlCParser.directDeclaratorSuffix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope directDeclaratorArraySuffix320 =null;
		ParserRuleReturnScope directDeclaratorFunctionSuffix321 =null;


		try {
			// CivlCParser.g:1065:2: ( directDeclaratorArraySuffix | directDeclaratorFunctionSuffix )
			int alt83=2;
			int LA83_0 = input.LA(1);
			if ( (LA83_0==LSQUARE) ) {
				alt83=1;
			}
			else if ( (LA83_0==LPAREN) ) {
				alt83=2;
			}

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

			switch (alt83) {
				case 1 :
					// CivlCParser.g:1065:4: directDeclaratorArraySuffix
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_directDeclaratorArraySuffix_in_directDeclaratorSuffix7375);
					directDeclaratorArraySuffix320=directDeclaratorArraySuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, directDeclaratorArraySuffix320.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1066:4: directDeclaratorFunctionSuffix
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix7380);
					directDeclaratorFunctionSuffix321=directDeclaratorFunctionSuffix();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, directDeclaratorFunctionSuffix321.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directDeclaratorSuffix"


	public static class directDeclaratorArraySuffix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directDeclaratorArraySuffix"
	// CivlCParser.g:1078:1: directDeclaratorArraySuffix : LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE ) | typeQualifierList_opt STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE ) ) ;
	public final CivlCParser.directDeclaratorArraySuffix_return directDeclaratorArraySuffix() throws RecognitionException {
		CivlCParser.directDeclaratorArraySuffix_return retval = new CivlCParser.directDeclaratorArraySuffix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LSQUARE322=null;
		Token RSQUARE325=null;
		Token STATIC326=null;
		Token RSQUARE329=null;
		Token STATIC331=null;
		Token RSQUARE333=null;
		Token STAR335=null;
		Token RSQUARE336=null;
		ParserRuleReturnScope typeQualifierList_opt323 =null;
		ParserRuleReturnScope assignmentExpression_opt324 =null;
		ParserRuleReturnScope typeQualifierList_opt327 =null;
		ParserRuleReturnScope assignmentExpression328 =null;
		ParserRuleReturnScope typeQualifierList330 =null;
		ParserRuleReturnScope assignmentExpression332 =null;
		ParserRuleReturnScope typeQualifierList_opt334 =null;

		Object LSQUARE322_tree=null;
		Object RSQUARE325_tree=null;
		Object STATIC326_tree=null;
		Object RSQUARE329_tree=null;
		Object STATIC331_tree=null;
		Object RSQUARE333_tree=null;
		Object STAR335_tree=null;
		Object RSQUARE336_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleTokenStream stream_STATIC=new RewriteRuleTokenStream(adaptor,"token STATIC");
		RewriteRuleSubtreeStream stream_typeQualifierList=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList");
		RewriteRuleSubtreeStream stream_assignmentExpression_opt=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression_opt");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_typeQualifierList_opt=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList_opt");

		try {
			// CivlCParser.g:1079:2: ( LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE ) | typeQualifierList_opt STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE ) ) )
			// CivlCParser.g:1079:4: LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE ) | typeQualifierList_opt STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE ) )
			{
			LSQUARE322=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directDeclaratorArraySuffix7393); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE322);

			// CivlCParser.g:1080:4: ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE ) | typeQualifierList_opt STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE ) )
			int alt84=4;
			alt84 = dfa84.predict(input);
			switch (alt84) {
				case 1 :
					// CivlCParser.g:1080:6: typeQualifierList_opt assignmentExpression_opt RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7400);
					typeQualifierList_opt323=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt323.getTree());
					pushFollow(FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix7402);
					assignmentExpression_opt324=assignmentExpression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt324.getTree());
					RSQUARE325=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7404); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE325);

					// AST REWRITE
					// elements: LSQUARE, RSQUARE, typeQualifierList_opt, assignmentExpression_opt
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1081:6: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE )
					{
						// CivlCParser.g:1081:9: ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LSQUARE.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
						adaptor.addChild(root_1, stream_assignmentExpression_opt.nextTree());
						adaptor.addChild(root_1, stream_RSQUARE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1083:6: STATIC typeQualifierList_opt assignmentExpression RSQUARE
					{
					STATIC326=(Token)match(input,STATIC,FOLLOW_STATIC_in_directDeclaratorArraySuffix7442); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATIC.add(STATIC326);

					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7444);
					typeQualifierList_opt327=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt327.getTree());
					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7446);
					assignmentExpression328=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression328.getTree());
					RSQUARE329=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7448); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE329);

					// AST REWRITE
					// elements: STATIC, RSQUARE, typeQualifierList_opt, LSQUARE, assignmentExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1084:6: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE )
					{
						// CivlCParser.g:1084:9: ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LSQUARE.nextNode());
						adaptor.addChild(root_1, stream_STATIC.nextNode());
						adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
						adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
						adaptor.addChild(root_1, stream_RSQUARE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1086:8: typeQualifierList STATIC assignmentExpression RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_in_directDeclaratorArraySuffix7488);
					typeQualifierList330=typeQualifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList.add(typeQualifierList330.getTree());
					STATIC331=(Token)match(input,STATIC,FOLLOW_STATIC_in_directDeclaratorArraySuffix7490); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STATIC.add(STATIC331);

					pushFollow(FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7492);
					assignmentExpression332=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression332.getTree());
					RSQUARE333=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7494); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE333);

					// AST REWRITE
					// elements: assignmentExpression, RSQUARE, STATIC, LSQUARE, typeQualifierList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1087:6: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE )
					{
						// CivlCParser.g:1087:9: ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LSQUARE.nextNode());
						adaptor.addChild(root_1, stream_STATIC.nextNode());
						adaptor.addChild(root_1, stream_typeQualifierList.nextTree());
						adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
						adaptor.addChild(root_1, stream_RSQUARE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:1089:8: typeQualifierList_opt STAR RSQUARE
					{
					pushFollow(FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7534);
					typeQualifierList_opt334=typeQualifierList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt334.getTree());
					STAR335=(Token)match(input,STAR,FOLLOW_STAR_in_directDeclaratorArraySuffix7536); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_STAR.add(STAR335);

					RSQUARE336=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7538); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE336);

					// AST REWRITE
					// elements: LSQUARE, typeQualifierList_opt, RSQUARE, STAR
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1090:6: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE )
					{
						// CivlCParser.g:1090:9: ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LSQUARE.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
						adaptor.addChild(root_1, stream_STAR.nextNode());
						adaptor.addChild(root_1, stream_RSQUARE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directDeclaratorArraySuffix"


	public static class directDeclaratorFunctionSuffix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directDeclaratorFunctionSuffix"
	// CivlCParser.g:1101:1: directDeclaratorFunctionSuffix : LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) ;
	public final CivlCParser.directDeclaratorFunctionSuffix_return directDeclaratorFunctionSuffix() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.directDeclaratorFunctionSuffix_return retval = new CivlCParser.directDeclaratorFunctionSuffix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LPAREN337=null;
		Token RPAREN339=null;
		Token RPAREN341=null;
		Token RPAREN342=null;
		ParserRuleReturnScope parameterTypeList338 =null;
		ParserRuleReturnScope identifierList340 =null;

		Object LPAREN337_tree=null;
		Object RPAREN339_tree=null;
		Object RPAREN341_tree=null;
		Object RPAREN342_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_identifierList=new RewriteRuleSubtreeStream(adaptor,"rule identifierList");
		RewriteRuleSubtreeStream stream_parameterTypeList=new RewriteRuleSubtreeStream(adaptor,"rule parameterTypeList");


		    DeclarationScope_stack.peek().isTypedef = false;
		    DeclarationScope_stack.peek().typedefNameUsed = false;

		try {
			// CivlCParser.g:1107:2: ( LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) )
			// CivlCParser.g:1107:4: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			{
			LPAREN337=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7597); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN337);

			// CivlCParser.g:1108:4: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
			int alt85=3;
			alt85 = dfa85.predict(input);
			switch (alt85) {
				case 1 :
					// CivlCParser.g:1108:6: parameterTypeList RPAREN
					{
					pushFollow(FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7604);
					parameterTypeList338=parameterTypeList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList338.getTree());
					RPAREN339=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7606); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN339);

					// AST REWRITE
					// elements: parameterTypeList, RPAREN, LPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1109:6: -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
					{
						// CivlCParser.g:1109:9: ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_SUFFIX, "FUNCTION_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_parameterTypeList.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1110:6: identifierList RPAREN
					{
					pushFollow(FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7631);
					identifierList340=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(identifierList340.getTree());
					RPAREN341=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7633); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN341);

					// AST REWRITE
					// elements: RPAREN, identifierList, LPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1111:6: -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN )
					{
						// CivlCParser.g:1111:9: ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_SUFFIX, "FUNCTION_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, stream_identifierList.nextTree());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1112:6: RPAREN
					{
					RPAREN342=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7657); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN342);

					// AST REWRITE
					// elements: LPAREN, RPAREN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1112:13: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
					{
						// CivlCParser.g:1112:16: ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_SUFFIX, "FUNCTION_SUFFIX"), root_1);
						adaptor.addChild(root_1, stream_LPAREN.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "directDeclaratorFunctionSuffix"


	public static class typeQualifierList_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeQualifierList_opt"
	// CivlCParser.g:1120:1: typeQualifierList_opt : ( typeQualifier )* -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )* ) ;
	public final CivlCParser.typeQualifierList_opt_return typeQualifierList_opt() throws RecognitionException {
		CivlCParser.typeQualifierList_opt_return retval = new CivlCParser.typeQualifierList_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope typeQualifier343 =null;

		RewriteRuleSubtreeStream stream_typeQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifier");

		try {
			// CivlCParser.g:1121:2: ( ( typeQualifier )* -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )* ) )
			// CivlCParser.g:1121:4: ( typeQualifier )*
			{
			// CivlCParser.g:1121:4: ( typeQualifier )*
			loop86:
			while (true) {
				int alt86=2;
				int LA86_0 = input.LA(1);
				if ( (LA86_0==ATOMIC||LA86_0==CONST||LA86_0==INPUT||LA86_0==OUTPUT||LA86_0==RESTRICT||LA86_0==VOLATILE) ) {
					alt86=1;
				}

				switch (alt86) {
				case 1 :
					// CivlCParser.g:1121:4: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList_opt7687);
					typeQualifier343=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier343.getTree());
					}
					break;

				default :
					break loop86;
				}
			}

			// AST REWRITE
			// elements: typeQualifier
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1121:19: -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )* )
			{
				// CivlCParser.g:1121:22: ^( TYPE_QUALIFIER_LIST ( typeQualifier )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPE_QUALIFIER_LIST, "TYPE_QUALIFIER_LIST"), root_1);
				// CivlCParser.g:1121:44: ( typeQualifier )*
				while ( stream_typeQualifier.hasNext() ) {
					adaptor.addChild(root_1, stream_typeQualifier.nextTree());
				}
				stream_typeQualifier.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeQualifierList_opt"


	public static class assignmentExpression_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "assignmentExpression_opt"
	// CivlCParser.g:1127:1: assignmentExpression_opt : ( -> ABSENT | assignmentExpression );
	public final CivlCParser.assignmentExpression_opt_return assignmentExpression_opt() throws RecognitionException {
		CivlCParser.assignmentExpression_opt_return retval = new CivlCParser.assignmentExpression_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope assignmentExpression344 =null;


		try {
			// CivlCParser.g:1128:2: ( -> ABSENT | assignmentExpression )
			int alt87=2;
			int LA87_0 = input.LA(1);
			if ( (LA87_0==RSQUARE) ) {
				alt87=1;
			}
			else if ( (LA87_0==AMPERSAND||LA87_0==CHARACTER_CONSTANT||LA87_0==ELLIPSIS||LA87_0==FLOATING_CONSTANT||LA87_0==IDENTIFIER||LA87_0==INTEGER_CONSTANT||LA87_0==LPAREN||LA87_0==MINUSMINUS||LA87_0==NOT||LA87_0==PLUS||LA87_0==PLUSPLUS||LA87_0==STAR||(LA87_0 >= STRING_LITERAL && LA87_0 <= SUB)||LA87_0==TILDE||LA87_0==ALIGNOF||LA87_0==BIG_O||LA87_0==CALLS||LA87_0==DERIV||LA87_0==GENERIC||LA87_0==HERE||LA87_0==PROCNULL||LA87_0==RESULT||(LA87_0 >= SCOPEOF && LA87_0 <= SELF)||(LA87_0 >= SIZEOF && LA87_0 <= SPAWN)||LA87_0==STATE_NULL||LA87_0==VALUE_AT) ) {
				alt87=2;
			}

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

			switch (alt87) {
				case 1 :
					// CivlCParser.g:1128:5: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1128:5: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1129:4: assignmentExpression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression_opt7718);
					assignmentExpression344=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, assignmentExpression344.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "assignmentExpression_opt"


	public static class pointer_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "pointer"
	// CivlCParser.g:1136:1: pointer : ( pointer_part )+ -> ^( POINTER ( pointer_part )+ ) ;
	public final CivlCParser.pointer_return pointer() throws RecognitionException {
		CivlCParser.pointer_return retval = new CivlCParser.pointer_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope pointer_part345 =null;

		RewriteRuleSubtreeStream stream_pointer_part=new RewriteRuleSubtreeStream(adaptor,"rule pointer_part");

		try {
			// CivlCParser.g:1137:5: ( ( pointer_part )+ -> ^( POINTER ( pointer_part )+ ) )
			// CivlCParser.g:1137:7: ( pointer_part )+
			{
			// CivlCParser.g:1137:7: ( pointer_part )+
			int cnt88=0;
			loop88:
			while (true) {
				int alt88=2;
				int LA88_0 = input.LA(1);
				if ( (LA88_0==STAR) ) {
					alt88=1;
				}

				switch (alt88) {
				case 1 :
					// CivlCParser.g:1137:7: pointer_part
					{
					pushFollow(FOLLOW_pointer_part_in_pointer7734);
					pointer_part345=pointer_part();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer_part.add(pointer_part345.getTree());
					}
					break;

				default :
					if ( cnt88 >= 1 ) break loop88;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(88, input);
					throw eee;
				}
				cnt88++;
			}

			// AST REWRITE
			// elements: pointer_part
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1137:21: -> ^( POINTER ( pointer_part )+ )
			{
				// CivlCParser.g:1137:24: ^( POINTER ( pointer_part )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(POINTER, "POINTER"), root_1);
				if ( !(stream_pointer_part.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_pointer_part.hasNext() ) {
					adaptor.addChild(root_1, stream_pointer_part.nextTree());
				}
				stream_pointer_part.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "pointer"


	public static class pointer_part_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "pointer_part"
	// CivlCParser.g:1144:1: pointer_part : STAR typeQualifierList_opt -> ^( STAR typeQualifierList_opt ) ;
	public final CivlCParser.pointer_part_return pointer_part() throws RecognitionException {
		CivlCParser.pointer_part_return retval = new CivlCParser.pointer_part_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STAR346=null;
		ParserRuleReturnScope typeQualifierList_opt347 =null;

		Object STAR346_tree=null;
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleSubtreeStream stream_typeQualifierList_opt=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList_opt");

		try {
			// CivlCParser.g:1145:2: ( STAR typeQualifierList_opt -> ^( STAR typeQualifierList_opt ) )
			// CivlCParser.g:1145:4: STAR typeQualifierList_opt
			{
			STAR346=(Token)match(input,STAR,FOLLOW_STAR_in_pointer_part7760); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STAR.add(STAR346);

			pushFollow(FOLLOW_typeQualifierList_opt_in_pointer_part7762);
			typeQualifierList_opt347=typeQualifierList_opt();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt347.getTree());
			// AST REWRITE
			// elements: typeQualifierList_opt, STAR
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1146:2: -> ^( STAR typeQualifierList_opt )
			{
				// CivlCParser.g:1146:5: ^( STAR typeQualifierList_opt )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_STAR.nextNode(), root_1);
				adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "pointer_part"


	public static class typeQualifierList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeQualifierList"
	// CivlCParser.g:1153:1: typeQualifierList : ( typeQualifier )+ -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ ) ;
	public final CivlCParser.typeQualifierList_return typeQualifierList() throws RecognitionException {
		CivlCParser.typeQualifierList_return retval = new CivlCParser.typeQualifierList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope typeQualifier348 =null;

		RewriteRuleSubtreeStream stream_typeQualifier=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifier");

		try {
			// CivlCParser.g:1154:5: ( ( typeQualifier )+ -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ ) )
			// CivlCParser.g:1154:7: ( typeQualifier )+
			{
			// CivlCParser.g:1154:7: ( typeQualifier )+
			int cnt89=0;
			loop89:
			while (true) {
				int alt89=2;
				int LA89_0 = input.LA(1);
				if ( (LA89_0==ATOMIC||LA89_0==CONST||LA89_0==INPUT||LA89_0==OUTPUT||LA89_0==RESTRICT||LA89_0==VOLATILE) ) {
					alt89=1;
				}

				switch (alt89) {
				case 1 :
					// CivlCParser.g:1154:7: typeQualifier
					{
					pushFollow(FOLLOW_typeQualifier_in_typeQualifierList7787);
					typeQualifier348=typeQualifier();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeQualifier.add(typeQualifier348.getTree());
					}
					break;

				default :
					if ( cnt89 >= 1 ) break loop89;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(89, input);
					throw eee;
				}
				cnt89++;
			}

			// AST REWRITE
			// elements: typeQualifier
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1154:22: -> ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ )
			{
				// CivlCParser.g:1154:25: ^( TYPE_QUALIFIER_LIST ( typeQualifier )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPE_QUALIFIER_LIST, "TYPE_QUALIFIER_LIST"), root_1);
				if ( !(stream_typeQualifier.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_typeQualifier.hasNext() ) {
					adaptor.addChild(root_1, stream_typeQualifier.nextTree());
				}
				stream_typeQualifier.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeQualifierList"


	public static class parameterTypeList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "parameterTypeList"
	// CivlCParser.g:1168:1: parameterTypeList : ({...}? parameterTypeListWithoutScope | parameterTypeListWithScope );
	public final CivlCParser.parameterTypeList_return parameterTypeList() throws RecognitionException {
		CivlCParser.parameterTypeList_return retval = new CivlCParser.parameterTypeList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope parameterTypeListWithoutScope349 =null;
		ParserRuleReturnScope parameterTypeListWithScope350 =null;


		try {
			// CivlCParser.g:1169:2: ({...}? parameterTypeListWithoutScope | parameterTypeListWithScope )
			int alt90=2;
			switch ( input.LA(1) ) {
			case TYPEDEF:
				{
				int LA90_1 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case AUTO:
			case EXTERN:
			case REGISTER:
			case SHARED:
			case STATIC:
			case THREADLOCAL:
				{
				int LA90_2 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case VOID:
				{
				int LA90_3 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case CHAR:
				{
				int LA90_4 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case SHORT:
				{
				int LA90_5 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case INT:
				{
				int LA90_6 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case LONG:
				{
				int LA90_7 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case FLOAT:
				{
				int LA90_8 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case DOUBLE:
				{
				int LA90_9 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case SIGNED:
				{
				int LA90_10 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case UNSIGNED:
				{
				int LA90_11 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case BOOL:
				{
				int LA90_12 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case COMPLEX:
				{
				int LA90_13 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case REAL:
				{
				int LA90_14 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case RANGE:
				{
				int LA90_15 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case ATOMIC:
				{
				int LA90_16 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case STRUCT:
			case UNION:
				{
				int LA90_17 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case ENUM:
				{
				int LA90_18 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case IDENTIFIER:
				{
				int LA90_19 = input.LA(2);
				if ( ((((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {
					alt90=2;
				}

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

				}
				break;
			case DOMAIN:
				{
				int LA90_20 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case TYPEOF:
				{
				int LA90_21 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case MEM_TYPE:
				{
				int LA90_22 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case CONST:
			case INPUT:
			case OUTPUT:
			case RESTRICT:
			case VOLATILE:
				{
				int LA90_23 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case INLINE:
				{
				int LA90_24 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case NORETURN:
				{
				int LA90_25 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case ABSTRACT:
				{
				int LA90_26 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case PURE:
				{
				int LA90_27 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case STATE_F:
				{
				int LA90_28 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case SYSTEM:
				{
				int LA90_29 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case FATOMIC:
				{
				int LA90_30 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case DEVICE:
				{
				int LA90_31 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case GLOBAL:
				{
				int LA90_32 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case DIFFERENTIABLE:
				{
				int LA90_33 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			case ALIGNAS:
				{
				int LA90_34 = input.LA(2);
				if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(Symbols_stack.peek().isFunctionDefinition))) ) {
					alt90=1;
				}
				else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {
					alt90=2;
				}

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

				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 90, 0, input);
				throw nvae;
			}
			switch (alt90) {
				case 1 :
					// CivlCParser.g:1169:4: {...}? parameterTypeListWithoutScope
					{
					root_0 = (Object)adaptor.nil();


					if ( !((Symbols_stack.peek().isFunctionDefinition)) ) {
						if (state.backtracking>0) {state.failed=true; return retval;}
						throw new FailedPredicateException(input, "parameterTypeList", "$Symbols::isFunctionDefinition");
					}
					pushFollow(FOLLOW_parameterTypeListWithoutScope_in_parameterTypeList7816);
					parameterTypeListWithoutScope349=parameterTypeListWithoutScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithoutScope349.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1170:4: parameterTypeListWithScope
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_parameterTypeListWithScope_in_parameterTypeList7821);
					parameterTypeListWithScope350=parameterTypeListWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithScope350.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "parameterTypeList"


	public static class parameterTypeListWithScope_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "parameterTypeListWithScope"
	// CivlCParser.g:1173:1: parameterTypeListWithScope : parameterTypeListWithoutScope ;
	public final CivlCParser.parameterTypeListWithScope_return parameterTypeListWithScope() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());

		CivlCParser.parameterTypeListWithScope_return retval = new CivlCParser.parameterTypeListWithScope_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope parameterTypeListWithoutScope351 =null;



			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
			Symbols_stack.peek().isFunctionDefinition = false;

		try {
			// CivlCParser.g:1180:2: ( parameterTypeListWithoutScope )
			// CivlCParser.g:1180:4: parameterTypeListWithoutScope
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7842);
			parameterTypeListWithoutScope351=parameterTypeListWithoutScope();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, parameterTypeListWithoutScope351.getTree());

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "parameterTypeListWithScope"


	public static class parameterTypeListWithoutScope_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "parameterTypeListWithoutScope"
	// CivlCParser.g:1183:1: parameterTypeListWithoutScope : parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) ) ;
	public final CivlCParser.parameterTypeListWithoutScope_return parameterTypeListWithoutScope() throws RecognitionException {
		CivlCParser.parameterTypeListWithoutScope_return retval = new CivlCParser.parameterTypeListWithoutScope_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA353=null;
		Token ELLIPSIS354=null;
		ParserRuleReturnScope parameterList352 =null;

		Object COMMA353_tree=null;
		Object ELLIPSIS354_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_ELLIPSIS=new RewriteRuleTokenStream(adaptor,"token ELLIPSIS");
		RewriteRuleSubtreeStream stream_parameterList=new RewriteRuleSubtreeStream(adaptor,"rule parameterList");

		try {
			// CivlCParser.g:1184:5: ( parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) ) )
			// CivlCParser.g:1184:7: parameterList ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			{
			pushFollow(FOLLOW_parameterList_in_parameterTypeListWithoutScope7856);
			parameterList352=parameterList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_parameterList.add(parameterList352.getTree());
			// CivlCParser.g:1185:7: ( -> ^( PARAMETER_TYPE_LIST parameterList ABSENT ) | COMMA ELLIPSIS -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS ) )
			int alt91=2;
			int LA91_0 = input.LA(1);
			if ( (LA91_0==RPAREN) ) {
				alt91=1;
			}
			else if ( (LA91_0==COMMA) ) {
				alt91=2;
			}

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

			switch (alt91) {
				case 1 :
					// CivlCParser.g:1185:9: 
					{
					// AST REWRITE
					// elements: parameterList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1185:9: -> ^( PARAMETER_TYPE_LIST parameterList ABSENT )
					{
						// CivlCParser.g:1185:12: ^( PARAMETER_TYPE_LIST parameterList ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER_TYPE_LIST, "PARAMETER_TYPE_LIST"), root_1);
						adaptor.addChild(root_1, stream_parameterList.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1186:9: COMMA ELLIPSIS
					{
					COMMA353=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameterTypeListWithoutScope7884); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA353);

					ELLIPSIS354=(Token)match(input,ELLIPSIS,FOLLOW_ELLIPSIS_in_parameterTypeListWithoutScope7886); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ELLIPSIS.add(ELLIPSIS354);

					// AST REWRITE
					// elements: parameterList, ELLIPSIS
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1187:9: -> ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS )
					{
						// CivlCParser.g:1187:12: ^( PARAMETER_TYPE_LIST parameterList ELLIPSIS )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER_TYPE_LIST, "PARAMETER_TYPE_LIST"), root_1);
						adaptor.addChild(root_1, stream_parameterList.nextTree());
						adaptor.addChild(root_1, stream_ELLIPSIS.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "parameterTypeListWithoutScope"


	public static class parameterList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "parameterList"
	// CivlCParser.g:1195:1: parameterList : parameterDeclaration ( COMMA parameterDeclaration )* -> ^( PARAMETER_LIST ( parameterDeclaration )+ ) ;
	public final CivlCParser.parameterList_return parameterList() throws RecognitionException {
		CivlCParser.parameterList_return retval = new CivlCParser.parameterList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA356=null;
		ParserRuleReturnScope parameterDeclaration355 =null;
		ParserRuleReturnScope parameterDeclaration357 =null;

		Object COMMA356_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_parameterDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule parameterDeclaration");

		try {
			// CivlCParser.g:1196:5: ( parameterDeclaration ( COMMA parameterDeclaration )* -> ^( PARAMETER_LIST ( parameterDeclaration )+ ) )
			// CivlCParser.g:1196:7: parameterDeclaration ( COMMA parameterDeclaration )*
			{
			pushFollow(FOLLOW_parameterDeclaration_in_parameterList7931);
			parameterDeclaration355=parameterDeclaration();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_parameterDeclaration.add(parameterDeclaration355.getTree());
			// CivlCParser.g:1196:28: ( COMMA parameterDeclaration )*
			loop92:
			while (true) {
				int alt92=2;
				int LA92_0 = input.LA(1);
				if ( (LA92_0==COMMA) ) {
					int LA92_2 = input.LA(2);
					if ( (LA92_2==IDENTIFIER||(LA92_2 >= ABSTRACT && LA92_2 <= ALIGNAS)||(LA92_2 >= ATOMIC && LA92_2 <= AUTO)||LA92_2==BOOL||LA92_2==CHAR||(LA92_2 >= COMPLEX && LA92_2 <= CONST)||(LA92_2 >= DEVICE && LA92_2 <= DIFFERENTIABLE)||(LA92_2 >= DOMAIN && LA92_2 <= DOUBLE)||LA92_2==ENUM||(LA92_2 >= EXTERN && LA92_2 <= FATOMIC)||LA92_2==FLOAT||LA92_2==GLOBAL||(LA92_2 >= INLINE && LA92_2 <= INT)||(LA92_2 >= LONG && LA92_2 <= NORETURN)||LA92_2==OUTPUT||(LA92_2 >= PURE && LA92_2 <= RANGE)||(LA92_2 >= REAL && LA92_2 <= REGISTER)||LA92_2==RESTRICT||(LA92_2 >= SHARED && LA92_2 <= SIGNED)||LA92_2==STATE_F||LA92_2==STATIC||LA92_2==STRUCT||LA92_2==SYSTEM||(LA92_2 >= THREADLOCAL && LA92_2 <= TYPEOF)||(LA92_2 >= UNION && LA92_2 <= UNSIGNED)||(LA92_2 >= VOID && LA92_2 <= VOLATILE)) ) {
						alt92=1;
					}

				}

				switch (alt92) {
				case 1 :
					// CivlCParser.g:1196:29: COMMA parameterDeclaration
					{
					COMMA356=(Token)match(input,COMMA,FOLLOW_COMMA_in_parameterList7934); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA356);

					pushFollow(FOLLOW_parameterDeclaration_in_parameterList7936);
					parameterDeclaration357=parameterDeclaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_parameterDeclaration.add(parameterDeclaration357.getTree());
					}
					break;

				default :
					break loop92;
				}
			}

			// AST REWRITE
			// elements: parameterDeclaration
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1197:7: -> ^( PARAMETER_LIST ( parameterDeclaration )+ )
			{
				// CivlCParser.g:1197:10: ^( PARAMETER_LIST ( parameterDeclaration )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER_LIST, "PARAMETER_LIST"), root_1);
				if ( !(stream_parameterDeclaration.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_parameterDeclaration.hasNext() ) {
					adaptor.addChild(root_1, stream_parameterDeclaration.nextTree());
				}
				stream_parameterDeclaration.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "parameterList"


	public static class parameterDeclaration_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "parameterDeclaration"
	// CivlCParser.g:1205:1: parameterDeclaration : declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) ) ;
	public final CivlCParser.parameterDeclaration_return parameterDeclaration() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.parameterDeclaration_return retval = new CivlCParser.parameterDeclaration_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope declarationSpecifiers358 =null;
		ParserRuleReturnScope declaratorOrAbstractDeclarator359 =null;

		RewriteRuleSubtreeStream stream_declarationSpecifiers=new RewriteRuleSubtreeStream(adaptor,"rule declarationSpecifiers");
		RewriteRuleSubtreeStream stream_declaratorOrAbstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule declaratorOrAbstractDeclarator");


		    DeclarationScope_stack.peek().isTypedef = false;
		    DeclarationScope_stack.peek().typedefNameUsed = false;
		    //System.err.println("parameter declaration start");

		try {
			// CivlCParser.g:1212:5: ( declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) ) )
			// CivlCParser.g:1212:7: declarationSpecifiers ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			{
			pushFollow(FOLLOW_declarationSpecifiers_in_parameterDeclaration7982);
			declarationSpecifiers358=declarationSpecifiers();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers358.getTree());
			// CivlCParser.g:1213:7: ( -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT ) | declaratorOrAbstractDeclarator -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator ) )
			int alt93=2;
			int LA93_0 = input.LA(1);
			if ( (LA93_0==COMMA||LA93_0==RPAREN) ) {
				alt93=1;
			}
			else if ( (LA93_0==IDENTIFIER||LA93_0==LPAREN||LA93_0==LSQUARE||LA93_0==STAR) ) {
				alt93=2;
			}

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

			switch (alt93) {
				case 1 :
					// CivlCParser.g:1213:9: 
					{
					// AST REWRITE
					// elements: declarationSpecifiers
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1213:9: -> ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT )
					{
						// CivlCParser.g:1213:12: ^( PARAMETER_DECLARATION declarationSpecifiers ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER_DECLARATION, "PARAMETER_DECLARATION"), root_1);
						adaptor.addChild(root_1, stream_declarationSpecifiers.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1214:9: declaratorOrAbstractDeclarator
					{
					pushFollow(FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration8010);
					declaratorOrAbstractDeclarator359=declaratorOrAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaratorOrAbstractDeclarator.add(declaratorOrAbstractDeclarator359.getTree());
					// AST REWRITE
					// elements: declaratorOrAbstractDeclarator, declarationSpecifiers
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1215:9: -> ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator )
					{
						// CivlCParser.g:1215:12: ^( PARAMETER_DECLARATION declarationSpecifiers declaratorOrAbstractDeclarator )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER_DECLARATION, "PARAMETER_DECLARATION"), root_1);
						adaptor.addChild(root_1, stream_declarationSpecifiers.nextTree());
						adaptor.addChild(root_1, stream_declaratorOrAbstractDeclarator.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "parameterDeclaration"


	public static class declaratorOrAbstractDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declaratorOrAbstractDeclarator"
	// CivlCParser.g:1223:1: declaratorOrAbstractDeclarator : ( ( declarator )=> declarator | abstractDeclarator );
	public final CivlCParser.declaratorOrAbstractDeclarator_return declaratorOrAbstractDeclarator() throws RecognitionException {
		CivlCParser.declaratorOrAbstractDeclarator_return retval = new CivlCParser.declaratorOrAbstractDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope declarator360 =null;
		ParserRuleReturnScope abstractDeclarator361 =null;


		try {
			// CivlCParser.g:1224:2: ( ( declarator )=> declarator | abstractDeclarator )
			int alt94=2;
			int LA94_0 = input.LA(1);
			if ( (LA94_0==IDENTIFIER) && (synpred29_CivlCParser())) {
				alt94=1;
			}
			else if ( (LA94_0==LPAREN) ) {
				int LA94_2 = input.LA(2);
				if ( (synpred29_CivlCParser()) ) {
					alt94=1;
				}
				else if ( (true) ) {
					alt94=2;
				}

			}
			else if ( (LA94_0==STAR) ) {
				int LA94_3 = input.LA(2);
				if ( (synpred29_CivlCParser()) ) {
					alt94=1;
				}
				else if ( (true) ) {
					alt94=2;
				}

			}
			else if ( (LA94_0==LSQUARE) ) {
				alt94=2;
			}

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

			switch (alt94) {
				case 1 :
					// CivlCParser.g:1224:4: ( declarator )=> declarator
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_declarator_in_declaratorOrAbstractDeclarator8071);
					declarator360=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declarator360.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1225:4: abstractDeclarator
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator8076);
					abstractDeclarator361=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, abstractDeclarator361.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declaratorOrAbstractDeclarator"


	public static class identifierList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "identifierList"
	// CivlCParser.g:1233:1: identifierList : IDENTIFIER ( COMMA IDENTIFIER )* -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ ) ;
	public final CivlCParser.identifierList_return identifierList() throws RecognitionException {
		CivlCParser.identifierList_return retval = new CivlCParser.identifierList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER362=null;
		Token COMMA363=null;
		Token IDENTIFIER364=null;

		Object IDENTIFIER362_tree=null;
		Object COMMA363_tree=null;
		Object IDENTIFIER364_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

		try {
			// CivlCParser.g:1234:5: ( IDENTIFIER ( COMMA IDENTIFIER )* -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ ) )
			// CivlCParser.g:1234:7: IDENTIFIER ( COMMA IDENTIFIER )*
			{
			IDENTIFIER362=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifierList8093); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER362);

			// CivlCParser.g:1234:18: ( COMMA IDENTIFIER )*
			loop95:
			while (true) {
				int alt95=2;
				int LA95_0 = input.LA(1);
				if ( (LA95_0==COMMA) ) {
					alt95=1;
				}

				switch (alt95) {
				case 1 :
					// CivlCParser.g:1234:20: COMMA IDENTIFIER
					{
					COMMA363=(Token)match(input,COMMA,FOLLOW_COMMA_in_identifierList8097); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA363);

					IDENTIFIER364=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifierList8099); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER364);

					}
					break;

				default :
					break loop95;
				}
			}

			// AST REWRITE
			// elements: IDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1235:7: -> ^( IDENTIFIER_LIST ( IDENTIFIER )+ )
			{
				// CivlCParser.g:1235:10: ^( IDENTIFIER_LIST ( IDENTIFIER )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(IDENTIFIER_LIST, "IDENTIFIER_LIST"), root_1);
				if ( !(stream_IDENTIFIER.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_IDENTIFIER.hasNext() ) {
					adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				}
				stream_IDENTIFIER.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "identifierList"


	public static class typeName_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeName"
	// CivlCParser.g:1244:1: typeName : specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) ) ;
	public final CivlCParser.typeName_return typeName() throws RecognitionException {
		CivlCParser.typeName_return retval = new CivlCParser.typeName_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope specifierQualifierList365 =null;
		ParserRuleReturnScope abstractDeclarator366 =null;

		RewriteRuleSubtreeStream stream_specifierQualifierList=new RewriteRuleSubtreeStream(adaptor,"rule specifierQualifierList");
		RewriteRuleSubtreeStream stream_abstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule abstractDeclarator");

		try {
			// CivlCParser.g:1245:5: ( specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) ) )
			// CivlCParser.g:1245:7: specifierQualifierList ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			{
			pushFollow(FOLLOW_specifierQualifierList_in_typeName8136);
			specifierQualifierList365=specifierQualifierList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_specifierQualifierList.add(specifierQualifierList365.getTree());
			// CivlCParser.g:1246:7: ( -> ^( TYPE_NAME specifierQualifierList ABSENT ) | abstractDeclarator -> ^( TYPE_NAME specifierQualifierList abstractDeclarator ) )
			int alt96=2;
			int LA96_0 = input.LA(1);
			if ( (LA96_0==EOF||LA96_0==COLON||LA96_0==IDENTIFIER||LA96_0==RPAREN) ) {
				alt96=1;
			}
			else if ( (LA96_0==LPAREN||LA96_0==LSQUARE||LA96_0==STAR) ) {
				alt96=2;
			}

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

			switch (alt96) {
				case 1 :
					// CivlCParser.g:1246:9: 
					{
					// AST REWRITE
					// elements: specifierQualifierList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1246:9: -> ^( TYPE_NAME specifierQualifierList ABSENT )
					{
						// CivlCParser.g:1246:12: ^( TYPE_NAME specifierQualifierList ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPE_NAME, "TYPE_NAME"), root_1);
						adaptor.addChild(root_1, stream_specifierQualifierList.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1247:9: abstractDeclarator
					{
					pushFollow(FOLLOW_abstractDeclarator_in_typeName8164);
					abstractDeclarator366=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator366.getTree());
					// AST REWRITE
					// elements: abstractDeclarator, specifierQualifierList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1248:9: -> ^( TYPE_NAME specifierQualifierList abstractDeclarator )
					{
						// CivlCParser.g:1248:12: ^( TYPE_NAME specifierQualifierList abstractDeclarator )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPE_NAME, "TYPE_NAME"), root_1);
						adaptor.addChild(root_1, stream_specifierQualifierList.nextTree());
						adaptor.addChild(root_1, stream_abstractDeclarator.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeName"


	public static class abstractDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "abstractDeclarator"
	// CivlCParser.g:1260:1: abstractDeclarator : ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) );
	public final CivlCParser.abstractDeclarator_return abstractDeclarator() throws RecognitionException {
		CivlCParser.abstractDeclarator_return retval = new CivlCParser.abstractDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope pointer367 =null;
		ParserRuleReturnScope directAbstractDeclarator368 =null;
		ParserRuleReturnScope pointer369 =null;
		ParserRuleReturnScope directAbstractDeclarator370 =null;

		RewriteRuleSubtreeStream stream_pointer=new RewriteRuleSubtreeStream(adaptor,"rule pointer");
		RewriteRuleSubtreeStream stream_directAbstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule directAbstractDeclarator");

		try {
			// CivlCParser.g:1261:5: ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) )
			int alt97=3;
			alt97 = dfa97.predict(input);
			switch (alt97) {
				case 1 :
					// CivlCParser.g:1261:7: pointer
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator8209);
					pointer367=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer367.getTree());
					// AST REWRITE
					// elements: pointer
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1262:7: -> ^( ABSTRACT_DECLARATOR pointer ABSENT )
					{
						// CivlCParser.g:1262:10: ^( ABSTRACT_DECLARATOR pointer ABSENT )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ABSTRACT_DECLARATOR, "ABSTRACT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_pointer.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1263:7: directAbstractDeclarator
					{
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator8233);
					directAbstractDeclarator368=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator368.getTree());
					// AST REWRITE
					// elements: directAbstractDeclarator
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1264:7: -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator )
					{
						// CivlCParser.g:1264:10: ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ABSTRACT_DECLARATOR, "ABSTRACT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_directAbstractDeclarator.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1265:7: pointer directAbstractDeclarator
					{
					pushFollow(FOLLOW_pointer_in_abstractDeclarator8257);
					pointer369=pointer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_pointer.add(pointer369.getTree());
					pushFollow(FOLLOW_directAbstractDeclarator_in_abstractDeclarator8259);
					directAbstractDeclarator370=directAbstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_directAbstractDeclarator.add(directAbstractDeclarator370.getTree());
					// AST REWRITE
					// elements: directAbstractDeclarator, pointer
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1266:7: -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator )
					{
						// CivlCParser.g:1266:10: ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ABSTRACT_DECLARATOR, "ABSTRACT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_pointer.nextTree());
						adaptor.addChild(root_1, stream_directAbstractDeclarator.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "abstractDeclarator"


	public static class directAbstractDeclarator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directAbstractDeclarator"
	// CivlCParser.g:1279:1: directAbstractDeclarator : ( LPAREN abstractDeclarator RPAREN ( directAbstractDeclaratorSuffix )* -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* ) | ( directAbstractDeclaratorSuffix )+ -> ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ ) );
	public final CivlCParser.directAbstractDeclarator_return directAbstractDeclarator() throws RecognitionException {
		CivlCParser.directAbstractDeclarator_return retval = new CivlCParser.directAbstractDeclarator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LPAREN371=null;
		Token RPAREN373=null;
		ParserRuleReturnScope abstractDeclarator372 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix374 =null;
		ParserRuleReturnScope directAbstractDeclaratorSuffix375 =null;

		Object LPAREN371_tree=null;
		Object RPAREN373_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_abstractDeclarator=new RewriteRuleSubtreeStream(adaptor,"rule abstractDeclarator");
		RewriteRuleSubtreeStream stream_directAbstractDeclaratorSuffix=new RewriteRuleSubtreeStream(adaptor,"rule directAbstractDeclaratorSuffix");

		try {
			// CivlCParser.g:1280:5: ( LPAREN abstractDeclarator RPAREN ( directAbstractDeclaratorSuffix )* -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* ) | ( directAbstractDeclaratorSuffix )+ -> ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ ) )
			int alt100=2;
			int LA100_0 = input.LA(1);
			if ( (LA100_0==LPAREN) ) {
				int LA100_1 = input.LA(2);
				if ( (LA100_1==LPAREN||LA100_1==LSQUARE||LA100_1==STAR) ) {
					alt100=1;
				}
				else if ( (LA100_1==IDENTIFIER||LA100_1==RPAREN||(LA100_1 >= ABSTRACT && LA100_1 <= ALIGNAS)||(LA100_1 >= ATOMIC && LA100_1 <= AUTO)||LA100_1==BOOL||LA100_1==CHAR||(LA100_1 >= COMPLEX && LA100_1 <= CONST)||(LA100_1 >= DEVICE && LA100_1 <= DIFFERENTIABLE)||(LA100_1 >= DOMAIN && LA100_1 <= DOUBLE)||LA100_1==ENUM||(LA100_1 >= EXTERN && LA100_1 <= FATOMIC)||LA100_1==FLOAT||LA100_1==GLOBAL||(LA100_1 >= INLINE && LA100_1 <= INT)||(LA100_1 >= LONG && LA100_1 <= NORETURN)||LA100_1==OUTPUT||(LA100_1 >= PURE && LA100_1 <= RANGE)||(LA100_1 >= REAL && LA100_1 <= REGISTER)||LA100_1==RESTRICT||(LA100_1 >= SHARED && LA100_1 <= SIGNED)||LA100_1==STATE_F||LA100_1==STATIC||LA100_1==STRUCT||LA100_1==SYSTEM||(LA100_1 >= THREADLOCAL && LA100_1 <= TYPEOF)||(LA100_1 >= UNION && LA100_1 <= UNSIGNED)||(LA100_1 >= VOID && LA100_1 <= VOLATILE)) ) {
					alt100=2;
				}

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

			}
			else if ( (LA100_0==LSQUARE) ) {
				alt100=2;
			}

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

			switch (alt100) {
				case 1 :
					// CivlCParser.g:1280:7: LPAREN abstractDeclarator RPAREN ( directAbstractDeclaratorSuffix )*
					{
					LPAREN371=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directAbstractDeclarator8294); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN371);

					pushFollow(FOLLOW_abstractDeclarator_in_directAbstractDeclarator8296);
					abstractDeclarator372=abstractDeclarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_abstractDeclarator.add(abstractDeclarator372.getTree());
					RPAREN373=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclarator8298); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN373);

					// CivlCParser.g:1280:40: ( directAbstractDeclaratorSuffix )*
					loop98:
					while (true) {
						int alt98=2;
						int LA98_0 = input.LA(1);
						if ( (LA98_0==LPAREN||LA98_0==LSQUARE) ) {
							alt98=1;
						}

						switch (alt98) {
						case 1 :
							// CivlCParser.g:1280:40: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8300);
							directAbstractDeclaratorSuffix374=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix374.getTree());
							}
							break;

						default :
							break loop98;
						}
					}

					// AST REWRITE
					// elements: directAbstractDeclaratorSuffix, abstractDeclarator
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1281:7: -> ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* )
					{
						// CivlCParser.g:1281:10: ^( DIRECT_ABSTRACT_DECLARATOR abstractDeclarator ( directAbstractDeclaratorSuffix )* )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DIRECT_ABSTRACT_DECLARATOR, "DIRECT_ABSTRACT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, stream_abstractDeclarator.nextTree());
						// CivlCParser.g:1282:12: ( directAbstractDeclaratorSuffix )*
						while ( stream_directAbstractDeclaratorSuffix.hasNext() ) {
							adaptor.addChild(root_1, stream_directAbstractDeclaratorSuffix.nextTree());
						}
						stream_directAbstractDeclaratorSuffix.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1283:7: ( directAbstractDeclaratorSuffix )+
					{
					// CivlCParser.g:1283:7: ( directAbstractDeclaratorSuffix )+
					int cnt99=0;
					loop99:
					while (true) {
						int alt99=2;
						int LA99_0 = input.LA(1);
						if ( (LA99_0==LPAREN||LA99_0==LSQUARE) ) {
							alt99=1;
						}

						switch (alt99) {
						case 1 :
							// CivlCParser.g:1283:7: directAbstractDeclaratorSuffix
							{
							pushFollow(FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8337);
							directAbstractDeclaratorSuffix375=directAbstractDeclaratorSuffix();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_directAbstractDeclaratorSuffix.add(directAbstractDeclaratorSuffix375.getTree());
							}
							break;

						default :
							if ( cnt99 >= 1 ) break loop99;
							if (state.backtracking>0) {state.failed=true; return retval;}
							EarlyExitException eee = new EarlyExitException(99, input);
							throw eee;
						}
						cnt99++;
					}

					// AST REWRITE
					// elements: directAbstractDeclaratorSuffix
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1284:7: -> ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ )
					{
						// CivlCParser.g:1284:10: ^( DIRECT_ABSTRACT_DECLARATOR ABSENT ( directAbstractDeclaratorSuffix )+ )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DIRECT_ABSTRACT_DECLARATOR, "DIRECT_ABSTRACT_DECLARATOR"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						if ( !(stream_directAbstractDeclaratorSuffix.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_directAbstractDeclaratorSuffix.hasNext() ) {
							adaptor.addChild(root_1, stream_directAbstractDeclaratorSuffix.nextTree());
						}
						stream_directAbstractDeclaratorSuffix.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directAbstractDeclarator"


	public static class typedefName_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typedefName"
	// CivlCParser.g:1308:1: typedefName :{...}? IDENTIFIER -> ^( TYPEDEF_NAME IDENTIFIER ) ;
	public final CivlCParser.typedefName_return typedefName() throws RecognitionException {
		CivlCParser.typedefName_return retval = new CivlCParser.typedefName_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER376=null;

		Object IDENTIFIER376_tree=null;
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

		try {
			// CivlCParser.g:1313:5: ({...}? IDENTIFIER -> ^( TYPEDEF_NAME IDENTIFIER ) )
			// CivlCParser.g:1313:7: {...}? IDENTIFIER
			{
			if ( !((!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText()))) ) {
				if (state.backtracking>0) {state.failed=true; return retval;}
				throw new FailedPredicateException(input, "typedefName", "!$DeclarationScope::typedefNameUsed && isTypeName(input.LT(1).getText())");
			}
			IDENTIFIER376=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_typedefName8387); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER376);

			// AST REWRITE
			// elements: IDENTIFIER
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1315:7: -> ^( TYPEDEF_NAME IDENTIFIER )
			{
				// CivlCParser.g:1315:10: ^( TYPEDEF_NAME IDENTIFIER )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TYPEDEF_NAME, "TYPEDEF_NAME"), root_1);
				adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
			if ( state.backtracking==0 ) {
			    if(!DeclarationScope_stack.peek().typedefNameUsed)
			    	DeclarationScope_stack.peek().typedefNameUsed =true;
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typedefName"


	public static class directAbstractDeclaratorSuffix_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "directAbstractDeclaratorSuffix"
	// CivlCParser.g:1329:1: directAbstractDeclaratorSuffix : ( LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression ) | STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR ) ) | LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) );
	public final CivlCParser.directAbstractDeclaratorSuffix_return directAbstractDeclaratorSuffix() throws RecognitionException {
		CivlCParser.directAbstractDeclaratorSuffix_return retval = new CivlCParser.directAbstractDeclaratorSuffix_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LSQUARE377=null;
		Token RSQUARE380=null;
		Token STATIC381=null;
		Token RSQUARE384=null;
		Token STATIC386=null;
		Token RSQUARE388=null;
		Token STAR389=null;
		Token RSQUARE390=null;
		Token LPAREN391=null;
		Token RPAREN393=null;
		Token RPAREN394=null;
		ParserRuleReturnScope typeQualifierList_opt378 =null;
		ParserRuleReturnScope assignmentExpression_opt379 =null;
		ParserRuleReturnScope typeQualifierList_opt382 =null;
		ParserRuleReturnScope assignmentExpression383 =null;
		ParserRuleReturnScope typeQualifierList385 =null;
		ParserRuleReturnScope assignmentExpression387 =null;
		ParserRuleReturnScope parameterTypeList392 =null;

		Object LSQUARE377_tree=null;
		Object RSQUARE380_tree=null;
		Object STATIC381_tree=null;
		Object RSQUARE384_tree=null;
		Object STATIC386_tree=null;
		Object RSQUARE388_tree=null;
		Object STAR389_tree=null;
		Object RSQUARE390_tree=null;
		Object LPAREN391_tree=null;
		Object RPAREN393_tree=null;
		Object RPAREN394_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_STATIC=new RewriteRuleTokenStream(adaptor,"token STATIC");
		RewriteRuleSubtreeStream stream_typeQualifierList=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList");
		RewriteRuleSubtreeStream stream_assignmentExpression_opt=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression_opt");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_typeQualifierList_opt=new RewriteRuleSubtreeStream(adaptor,"rule typeQualifierList_opt");
		RewriteRuleSubtreeStream stream_parameterTypeList=new RewriteRuleSubtreeStream(adaptor,"rule parameterTypeList");

		try {
			// CivlCParser.g:1330:5: ( LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression ) | STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR ) ) | LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) ) )
			int alt103=2;
			int LA103_0 = input.LA(1);
			if ( (LA103_0==LSQUARE) ) {
				alt103=1;
			}
			else if ( (LA103_0==LPAREN) ) {
				alt103=2;
			}

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

			switch (alt103) {
				case 1 :
					// CivlCParser.g:1330:7: LSQUARE ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression ) | STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR ) )
					{
					LSQUARE377=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix8420); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE377);

					// CivlCParser.g:1331:7: ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression ) | STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR ) )
					int alt101=4;
					alt101 = dfa101.predict(input);
					switch (alt101) {
						case 1 :
							// CivlCParser.g:1331:9: typeQualifierList_opt assignmentExpression_opt RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8430);
							typeQualifierList_opt378=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt378.getTree());
							pushFollow(FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix8432);
							assignmentExpression_opt379=assignmentExpression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression_opt.add(assignmentExpression_opt379.getTree());
							RSQUARE380=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8434); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE380);

							// AST REWRITE
							// elements: assignmentExpression_opt, LSQUARE, typeQualifierList_opt
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1332:9: -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt )
							{
								// CivlCParser.g:1332:12: ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LSQUARE.nextNode());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
								adaptor.addChild(root_1, stream_assignmentExpression_opt.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:1334:9: STATIC typeQualifierList_opt assignmentExpression RSQUARE
							{
							STATIC381=(Token)match(input,STATIC,FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8479); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STATIC.add(STATIC381);

							pushFollow(FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8481);
							typeQualifierList_opt382=typeQualifierList_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList_opt.add(typeQualifierList_opt382.getTree());
							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8483);
							assignmentExpression383=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression383.getTree());
							RSQUARE384=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8485); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE384);

							// AST REWRITE
							// elements: STATIC, typeQualifierList_opt, LSQUARE, assignmentExpression
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1335:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression )
							{
								// CivlCParser.g:1335:12: ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LSQUARE.nextNode());
								adaptor.addChild(root_1, stream_STATIC.nextNode());
								adaptor.addChild(root_1, stream_typeQualifierList_opt.nextTree());
								adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 3 :
							// CivlCParser.g:1337:9: typeQualifierList STATIC assignmentExpression RSQUARE
							{
							pushFollow(FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8530);
							typeQualifierList385=typeQualifierList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_typeQualifierList.add(typeQualifierList385.getTree());
							STATIC386=(Token)match(input,STATIC,FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8532); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STATIC.add(STATIC386);

							pushFollow(FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8534);
							assignmentExpression387=assignmentExpression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression387.getTree());
							RSQUARE388=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8536); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE388);

							// AST REWRITE
							// elements: typeQualifierList, LSQUARE, STATIC, assignmentExpression
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1338:9: -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression )
							{
								// CivlCParser.g:1338:12: ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LSQUARE.nextNode());
								adaptor.addChild(root_1, stream_STATIC.nextNode());
								adaptor.addChild(root_1, stream_typeQualifierList.nextTree());
								adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 4 :
							// CivlCParser.g:1339:9: STAR RSQUARE
							{
							STAR389=(Token)match(input,STAR,FOLLOW_STAR_in_directAbstractDeclaratorSuffix8568); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_STAR.add(STAR389);

							RSQUARE390=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8570); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE390);

							// AST REWRITE
							// elements: STAR, LSQUARE
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1340:9: -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR )
							{
								// CivlCParser.g:1340:12: ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_SUFFIX, "ARRAY_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LSQUARE.nextNode());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_1, stream_STAR.nextNode());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// CivlCParser.g:1342:7: LPAREN ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
					{
					LPAREN391=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8608); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN391);

					// CivlCParser.g:1343:7: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )
					int alt102=2;
					int LA102_0 = input.LA(1);
					if ( (LA102_0==IDENTIFIER||(LA102_0 >= ABSTRACT && LA102_0 <= ALIGNAS)||(LA102_0 >= ATOMIC && LA102_0 <= AUTO)||LA102_0==BOOL||LA102_0==CHAR||(LA102_0 >= COMPLEX && LA102_0 <= CONST)||(LA102_0 >= DEVICE && LA102_0 <= DIFFERENTIABLE)||(LA102_0 >= DOMAIN && LA102_0 <= DOUBLE)||LA102_0==ENUM||(LA102_0 >= EXTERN && LA102_0 <= FATOMIC)||LA102_0==FLOAT||LA102_0==GLOBAL||(LA102_0 >= INLINE && LA102_0 <= INT)||(LA102_0 >= LONG && LA102_0 <= NORETURN)||LA102_0==OUTPUT||(LA102_0 >= PURE && LA102_0 <= RANGE)||(LA102_0 >= REAL && LA102_0 <= REGISTER)||LA102_0==RESTRICT||(LA102_0 >= SHARED && LA102_0 <= SIGNED)||LA102_0==STATE_F||LA102_0==STATIC||LA102_0==STRUCT||LA102_0==SYSTEM||(LA102_0 >= THREADLOCAL && LA102_0 <= TYPEOF)||(LA102_0 >= UNION && LA102_0 <= UNSIGNED)||(LA102_0 >= VOID && LA102_0 <= VOLATILE)) ) {
						alt102=1;
					}
					else if ( (LA102_0==RPAREN) ) {
						alt102=2;
					}

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

					switch (alt102) {
						case 1 :
							// CivlCParser.g:1343:9: parameterTypeList RPAREN
							{
							pushFollow(FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8618);
							parameterTypeList392=parameterTypeList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_parameterTypeList.add(parameterTypeList392.getTree());
							RPAREN393=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8620); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN393);

							// AST REWRITE
							// elements: LPAREN, RPAREN, parameterTypeList
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1344:9: -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
							{
								// CivlCParser.g:1344:12: ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_SUFFIX, "FUNCTION_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LPAREN.nextNode());
								adaptor.addChild(root_1, stream_parameterTypeList.nextTree());
								adaptor.addChild(root_1, stream_RPAREN.nextNode());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:1345:9: RPAREN
							{
							RPAREN394=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8650); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN394);

							// AST REWRITE
							// elements: LPAREN, RPAREN
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1346:9: -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
							{
								// CivlCParser.g:1346:12: ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_SUFFIX, "FUNCTION_SUFFIX"), root_1);
								adaptor.addChild(root_1, stream_LPAREN.nextNode());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_1, stream_RPAREN.nextNode());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "directAbstractDeclaratorSuffix"


	public static class initializer_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "initializer"
	// CivlCParser.g:1351:1: initializer : ( assignmentExpression -> ^( SCALAR_INITIALIZER assignmentExpression ) | LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> initializerList );
	public final CivlCParser.initializer_return initializer() throws RecognitionException {
		CivlCParser.initializer_return retval = new CivlCParser.initializer_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LCURLY396=null;
		Token RCURLY398=null;
		Token COMMA399=null;
		Token RCURLY400=null;
		ParserRuleReturnScope assignmentExpression395 =null;
		ParserRuleReturnScope initializerList397 =null;

		Object LCURLY396_tree=null;
		Object RCURLY398_tree=null;
		Object COMMA399_tree=null;
		Object RCURLY400_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_initializerList=new RewriteRuleSubtreeStream(adaptor,"rule initializerList");

		try {
			// CivlCParser.g:1352:5: ( assignmentExpression -> ^( SCALAR_INITIALIZER assignmentExpression ) | LCURLY initializerList ( RCURLY | COMMA RCURLY ) -> initializerList )
			int alt105=2;
			int LA105_0 = input.LA(1);
			if ( (LA105_0==AMPERSAND||LA105_0==CHARACTER_CONSTANT||LA105_0==ELLIPSIS||LA105_0==FLOATING_CONSTANT||LA105_0==IDENTIFIER||LA105_0==INTEGER_CONSTANT||LA105_0==LPAREN||LA105_0==MINUSMINUS||LA105_0==NOT||LA105_0==PLUS||LA105_0==PLUSPLUS||LA105_0==STAR||(LA105_0 >= STRING_LITERAL && LA105_0 <= SUB)||LA105_0==TILDE||LA105_0==ALIGNOF||LA105_0==BIG_O||LA105_0==CALLS||LA105_0==DERIV||LA105_0==GENERIC||LA105_0==HERE||LA105_0==PROCNULL||LA105_0==RESULT||(LA105_0 >= SCOPEOF && LA105_0 <= SELF)||(LA105_0 >= SIZEOF && LA105_0 <= SPAWN)||LA105_0==STATE_NULL||LA105_0==VALUE_AT) ) {
				alt105=1;
			}
			else if ( (LA105_0==LCURLY) ) {
				alt105=2;
			}

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

			switch (alt105) {
				case 1 :
					// CivlCParser.g:1352:7: assignmentExpression
					{
					pushFollow(FOLLOW_assignmentExpression_in_initializer8697);
					assignmentExpression395=assignmentExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression395.getTree());
					// AST REWRITE
					// elements: assignmentExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1352:28: -> ^( SCALAR_INITIALIZER assignmentExpression )
					{
						// CivlCParser.g:1352:31: ^( SCALAR_INITIALIZER assignmentExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SCALAR_INITIALIZER, "SCALAR_INITIALIZER"), root_1);
						adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1353:7: LCURLY initializerList ( RCURLY | COMMA RCURLY )
					{
					LCURLY396=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_initializer8713); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY396);

					pushFollow(FOLLOW_initializerList_in_initializer8715);
					initializerList397=initializerList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializerList.add(initializerList397.getTree());
					// CivlCParser.g:1354:9: ( RCURLY | COMMA RCURLY )
					int alt104=2;
					int LA104_0 = input.LA(1);
					if ( (LA104_0==RCURLY) ) {
						alt104=1;
					}
					else if ( (LA104_0==COMMA) ) {
						alt104=2;
					}

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

					switch (alt104) {
						case 1 :
							// CivlCParser.g:1354:13: RCURLY
							{
							RCURLY398=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_initializer8729); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY398);

							}
							break;
						case 2 :
							// CivlCParser.g:1355:13: COMMA RCURLY
							{
							COMMA399=(Token)match(input,COMMA,FOLLOW_COMMA_in_initializer8743); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_COMMA.add(COMMA399);

							RCURLY400=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_initializer8745); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY400);

							}
							break;

					}

					// AST REWRITE
					// elements: initializerList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1357:7: -> initializerList
					{
						adaptor.addChild(root_0, stream_initializerList.nextTree());
					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "initializer"


	public static class initializerList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "initializerList"
	// CivlCParser.g:1361:1: initializerList : designatedInitializer ( COMMA designatedInitializer )* -> ^( INITIALIZER_LIST ( designatedInitializer )+ ) ;
	public final CivlCParser.initializerList_return initializerList() throws RecognitionException {
		CivlCParser.initializerList_return retval = new CivlCParser.initializerList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token COMMA402=null;
		ParserRuleReturnScope designatedInitializer401 =null;
		ParserRuleReturnScope designatedInitializer403 =null;

		Object COMMA402_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleSubtreeStream stream_designatedInitializer=new RewriteRuleSubtreeStream(adaptor,"rule designatedInitializer");

		try {
			// CivlCParser.g:1362:5: ( designatedInitializer ( COMMA designatedInitializer )* -> ^( INITIALIZER_LIST ( designatedInitializer )+ ) )
			// CivlCParser.g:1362:7: designatedInitializer ( COMMA designatedInitializer )*
			{
			pushFollow(FOLLOW_designatedInitializer_in_initializerList8784);
			designatedInitializer401=designatedInitializer();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_designatedInitializer.add(designatedInitializer401.getTree());
			// CivlCParser.g:1362:29: ( COMMA designatedInitializer )*
			loop106:
			while (true) {
				int alt106=2;
				int LA106_0 = input.LA(1);
				if ( (LA106_0==COMMA) ) {
					int LA106_2 = input.LA(2);
					if ( (LA106_2==AMPERSAND||LA106_2==CHARACTER_CONSTANT||LA106_2==DOT||LA106_2==ELLIPSIS||LA106_2==FLOATING_CONSTANT||LA106_2==IDENTIFIER||LA106_2==INTEGER_CONSTANT||LA106_2==LCURLY||LA106_2==LPAREN||LA106_2==LSQUARE||LA106_2==MINUSMINUS||LA106_2==NOT||LA106_2==PLUS||LA106_2==PLUSPLUS||LA106_2==STAR||(LA106_2 >= STRING_LITERAL && LA106_2 <= SUB)||LA106_2==TILDE||LA106_2==ALIGNOF||LA106_2==BIG_O||LA106_2==CALLS||LA106_2==DERIV||LA106_2==GENERIC||LA106_2==HERE||LA106_2==PROCNULL||LA106_2==RESULT||(LA106_2 >= SCOPEOF && LA106_2 <= SELF)||(LA106_2 >= SIZEOF && LA106_2 <= SPAWN)||LA106_2==STATE_NULL||LA106_2==VALUE_AT) ) {
						alt106=1;
					}

				}

				switch (alt106) {
				case 1 :
					// CivlCParser.g:1362:30: COMMA designatedInitializer
					{
					COMMA402=(Token)match(input,COMMA,FOLLOW_COMMA_in_initializerList8787); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COMMA.add(COMMA402);

					pushFollow(FOLLOW_designatedInitializer_in_initializerList8789);
					designatedInitializer403=designatedInitializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_designatedInitializer.add(designatedInitializer403.getTree());
					}
					break;

				default :
					break loop106;
				}
			}

			// AST REWRITE
			// elements: designatedInitializer
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1363:7: -> ^( INITIALIZER_LIST ( designatedInitializer )+ )
			{
				// CivlCParser.g:1363:10: ^( INITIALIZER_LIST ( designatedInitializer )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INITIALIZER_LIST, "INITIALIZER_LIST"), root_1);
				if ( !(stream_designatedInitializer.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_designatedInitializer.hasNext() ) {
					adaptor.addChild(root_1, stream_designatedInitializer.nextTree());
				}
				stream_designatedInitializer.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "initializerList"


	public static class designatedInitializer_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "designatedInitializer"
	// CivlCParser.g:1366:1: designatedInitializer : ( initializer -> ^( DESIGNATED_INITIALIZER ABSENT initializer ) | designation initializer -> ^( DESIGNATED_INITIALIZER designation initializer ) );
	public final CivlCParser.designatedInitializer_return designatedInitializer() throws RecognitionException {
		CivlCParser.designatedInitializer_return retval = new CivlCParser.designatedInitializer_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope initializer404 =null;
		ParserRuleReturnScope designation405 =null;
		ParserRuleReturnScope initializer406 =null;

		RewriteRuleSubtreeStream stream_designation=new RewriteRuleSubtreeStream(adaptor,"rule designation");
		RewriteRuleSubtreeStream stream_initializer=new RewriteRuleSubtreeStream(adaptor,"rule initializer");

		try {
			// CivlCParser.g:1367:2: ( initializer -> ^( DESIGNATED_INITIALIZER ABSENT initializer ) | designation initializer -> ^( DESIGNATED_INITIALIZER designation initializer ) )
			int alt107=2;
			int LA107_0 = input.LA(1);
			if ( (LA107_0==AMPERSAND||LA107_0==CHARACTER_CONSTANT||LA107_0==ELLIPSIS||LA107_0==FLOATING_CONSTANT||LA107_0==IDENTIFIER||LA107_0==INTEGER_CONSTANT||LA107_0==LCURLY||LA107_0==LPAREN||LA107_0==MINUSMINUS||LA107_0==NOT||LA107_0==PLUS||LA107_0==PLUSPLUS||LA107_0==STAR||(LA107_0 >= STRING_LITERAL && LA107_0 <= SUB)||LA107_0==TILDE||LA107_0==ALIGNOF||LA107_0==BIG_O||LA107_0==CALLS||LA107_0==DERIV||LA107_0==GENERIC||LA107_0==HERE||LA107_0==PROCNULL||LA107_0==RESULT||(LA107_0 >= SCOPEOF && LA107_0 <= SELF)||(LA107_0 >= SIZEOF && LA107_0 <= SPAWN)||LA107_0==STATE_NULL||LA107_0==VALUE_AT) ) {
				alt107=1;
			}
			else if ( (LA107_0==DOT||LA107_0==LSQUARE) ) {
				alt107=2;
			}

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

			switch (alt107) {
				case 1 :
					// CivlCParser.g:1367:4: initializer
					{
					pushFollow(FOLLOW_initializer_in_designatedInitializer8820);
					initializer404=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer404.getTree());
					// AST REWRITE
					// elements: initializer
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1368:4: -> ^( DESIGNATED_INITIALIZER ABSENT initializer )
					{
						// CivlCParser.g:1368:7: ^( DESIGNATED_INITIALIZER ABSENT initializer )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DESIGNATED_INITIALIZER, "DESIGNATED_INITIALIZER"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_initializer.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1369:4: designation initializer
					{
					pushFollow(FOLLOW_designation_in_designatedInitializer8838);
					designation405=designation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_designation.add(designation405.getTree());
					pushFollow(FOLLOW_initializer_in_designatedInitializer8840);
					initializer406=initializer();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_initializer.add(initializer406.getTree());
					// AST REWRITE
					// elements: initializer, designation
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1370:4: -> ^( DESIGNATED_INITIALIZER designation initializer )
					{
						// CivlCParser.g:1370:7: ^( DESIGNATED_INITIALIZER designation initializer )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DESIGNATED_INITIALIZER, "DESIGNATED_INITIALIZER"), root_1);
						adaptor.addChild(root_1, stream_designation.nextTree());
						adaptor.addChild(root_1, stream_initializer.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "designatedInitializer"


	public static class designation_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "designation"
	// CivlCParser.g:1374:1: designation : designatorList ASSIGN -> ^( DESIGNATION designatorList ) ;
	public final CivlCParser.designation_return designation() throws RecognitionException {
		CivlCParser.designation_return retval = new CivlCParser.designation_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ASSIGN408=null;
		ParserRuleReturnScope designatorList407 =null;

		Object ASSIGN408_tree=null;
		RewriteRuleTokenStream stream_ASSIGN=new RewriteRuleTokenStream(adaptor,"token ASSIGN");
		RewriteRuleSubtreeStream stream_designatorList=new RewriteRuleSubtreeStream(adaptor,"rule designatorList");

		try {
			// CivlCParser.g:1375:5: ( designatorList ASSIGN -> ^( DESIGNATION designatorList ) )
			// CivlCParser.g:1375:7: designatorList ASSIGN
			{
			pushFollow(FOLLOW_designatorList_in_designation8869);
			designatorList407=designatorList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_designatorList.add(designatorList407.getTree());
			ASSIGN408=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_designation8871); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASSIGN.add(ASSIGN408);

			// AST REWRITE
			// elements: designatorList
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1375:29: -> ^( DESIGNATION designatorList )
			{
				// CivlCParser.g:1375:32: ^( DESIGNATION designatorList )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DESIGNATION, "DESIGNATION"), root_1);
				adaptor.addChild(root_1, stream_designatorList.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "designation"


	public static class designatorList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "designatorList"
	// CivlCParser.g:1379:1: designatorList : ( designator )+ ;
	public final CivlCParser.designatorList_return designatorList() throws RecognitionException {
		CivlCParser.designatorList_return retval = new CivlCParser.designatorList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope designator409 =null;


		try {
			// CivlCParser.g:1380:5: ( ( designator )+ )
			// CivlCParser.g:1380:7: ( designator )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1380:7: ( designator )+
			int cnt108=0;
			loop108:
			while (true) {
				int alt108=2;
				int LA108_0 = input.LA(1);
				if ( (LA108_0==DOT||LA108_0==LSQUARE) ) {
					alt108=1;
				}

				switch (alt108) {
				case 1 :
					// CivlCParser.g:1380:7: designator
					{
					pushFollow(FOLLOW_designator_in_designatorList8898);
					designator409=designator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, designator409.getTree());

					}
					break;

				default :
					if ( cnt108 >= 1 ) break loop108;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(108, input);
					throw eee;
				}
				cnt108++;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "designatorList"


	public static class designator_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "designator"
	// CivlCParser.g:1384:1: designator : ( LSQUARE constantExpression RSQUARE -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression ) | DOT IDENTIFIER -> ^( FIELD_DESIGNATOR IDENTIFIER ) );
	public final CivlCParser.designator_return designator() throws RecognitionException {
		CivlCParser.designator_return retval = new CivlCParser.designator_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LSQUARE410=null;
		Token RSQUARE412=null;
		Token DOT413=null;
		Token IDENTIFIER414=null;
		ParserRuleReturnScope constantExpression411 =null;

		Object LSQUARE410_tree=null;
		Object RSQUARE412_tree=null;
		Object DOT413_tree=null;
		Object IDENTIFIER414_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");

		try {
			// CivlCParser.g:1385:5: ( LSQUARE constantExpression RSQUARE -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression ) | DOT IDENTIFIER -> ^( FIELD_DESIGNATOR IDENTIFIER ) )
			int alt109=2;
			int LA109_0 = input.LA(1);
			if ( (LA109_0==LSQUARE) ) {
				alt109=1;
			}
			else if ( (LA109_0==DOT) ) {
				alt109=2;
			}

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

			switch (alt109) {
				case 1 :
					// CivlCParser.g:1385:7: LSQUARE constantExpression RSQUARE
					{
					LSQUARE410=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_designator8918); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE410);

					pushFollow(FOLLOW_constantExpression_in_designator8920);
					constantExpression411=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression411.getTree());
					RSQUARE412=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_designator8922); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE412);

					// AST REWRITE
					// elements: constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1386:7: -> ^( ARRAY_ELEMENT_DESIGNATOR constantExpression )
					{
						// CivlCParser.g:1386:10: ^( ARRAY_ELEMENT_DESIGNATOR constantExpression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ARRAY_ELEMENT_DESIGNATOR, "ARRAY_ELEMENT_DESIGNATOR"), root_1);
						adaptor.addChild(root_1, stream_constantExpression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1387:7: DOT IDENTIFIER
					{
					DOT413=(Token)match(input,DOT,FOLLOW_DOT_in_designator8944); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DOT.add(DOT413);

					IDENTIFIER414=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_designator8946); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER414);

					// AST REWRITE
					// elements: IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1388:7: -> ^( FIELD_DESIGNATOR IDENTIFIER )
					{
						// CivlCParser.g:1388:10: ^( FIELD_DESIGNATOR IDENTIFIER )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DESIGNATOR, "FIELD_DESIGNATOR"), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "designator"


	public static class staticAssertDeclaration_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "staticAssertDeclaration"
	// CivlCParser.g:1392:1: staticAssertDeclaration : STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI -> ^( STATICASSERT constantExpression STRING_LITERAL ) ;
	public final CivlCParser.staticAssertDeclaration_return staticAssertDeclaration() throws RecognitionException {
		CivlCParser.staticAssertDeclaration_return retval = new CivlCParser.staticAssertDeclaration_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STATICASSERT415=null;
		Token LPAREN416=null;
		Token COMMA418=null;
		Token STRING_LITERAL419=null;
		Token RPAREN420=null;
		Token SEMI421=null;
		ParserRuleReturnScope constantExpression417 =null;

		Object STATICASSERT415_tree=null;
		Object LPAREN416_tree=null;
		Object COMMA418_tree=null;
		Object STRING_LITERAL419_tree=null;
		Object RPAREN420_tree=null;
		Object SEMI421_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_STATICASSERT=new RewriteRuleTokenStream(adaptor,"token STATICASSERT");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");

		try {
			// CivlCParser.g:1393:5: ( STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI -> ^( STATICASSERT constantExpression STRING_LITERAL ) )
			// CivlCParser.g:1393:7: STATICASSERT LPAREN constantExpression COMMA STRING_LITERAL RPAREN SEMI
			{
			STATICASSERT415=(Token)match(input,STATICASSERT,FOLLOW_STATICASSERT_in_staticAssertDeclaration8979); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STATICASSERT.add(STATICASSERT415);

			LPAREN416=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_staticAssertDeclaration8981); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN416);

			pushFollow(FOLLOW_constantExpression_in_staticAssertDeclaration8983);
			constantExpression417=constantExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression417.getTree());
			COMMA418=(Token)match(input,COMMA,FOLLOW_COMMA_in_staticAssertDeclaration8985); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_COMMA.add(COMMA418);

			STRING_LITERAL419=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_staticAssertDeclaration8987); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL419);

			RPAREN420=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_staticAssertDeclaration8995); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN420);

			SEMI421=(Token)match(input,SEMI,FOLLOW_SEMI_in_staticAssertDeclaration8997); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI421);

			// AST REWRITE
			// elements: STRING_LITERAL, STATICASSERT, constantExpression
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1395:7: -> ^( STATICASSERT constantExpression STRING_LITERAL )
			{
				// CivlCParser.g:1395:10: ^( STATICASSERT constantExpression STRING_LITERAL )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_STATICASSERT.nextNode(), root_1);
				adaptor.addChild(root_1, stream_constantExpression.nextTree());
				adaptor.addChild(root_1, stream_STRING_LITERAL.nextNode());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "staticAssertDeclaration"


	public static class domainSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "domainSpecifier"
	// CivlCParser.g:1399:1: domainSpecifier : DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) ) ;
	public final CivlCParser.domainSpecifier_return domainSpecifier() throws RecognitionException {
		CivlCParser.domainSpecifier_return retval = new CivlCParser.domainSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DOMAIN422=null;
		Token LPAREN423=null;
		Token INTEGER_CONSTANT424=null;
		Token RPAREN425=null;

		Object DOMAIN422_tree=null;
		Object LPAREN423_tree=null;
		Object INTEGER_CONSTANT424_tree=null;
		Object RPAREN425_tree=null;
		RewriteRuleTokenStream stream_DOMAIN=new RewriteRuleTokenStream(adaptor,"token DOMAIN");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_INTEGER_CONSTANT=new RewriteRuleTokenStream(adaptor,"token INTEGER_CONSTANT");

		try {
			// CivlCParser.g:1400:2: ( DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) ) )
			// CivlCParser.g:1400:4: DOMAIN ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) )
			{
			DOMAIN422=(Token)match(input,DOMAIN,FOLLOW_DOMAIN_in_domainSpecifier9029); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_DOMAIN.add(DOMAIN422);

			// CivlCParser.g:1401:4: ( -> ^( DOMAIN ) | LPAREN INTEGER_CONSTANT RPAREN -> ^( DOMAIN INTEGER_CONSTANT RPAREN ) )
			int alt110=2;
			int LA110_0 = input.LA(1);
			if ( (LA110_0==EOF||(LA110_0 >= COLON && LA110_0 <= COMMA)||LA110_0==IDENTIFIER||LA110_0==LSQUARE||LA110_0==RPAREN||LA110_0==SEMI||LA110_0==STAR||(LA110_0 >= ABSTRACT && LA110_0 <= ALIGNAS)||(LA110_0 >= ATOMIC && LA110_0 <= AUTO)||LA110_0==BOOL||LA110_0==CHAR||(LA110_0 >= COMPLEX && LA110_0 <= CONST)||(LA110_0 >= DEVICE && LA110_0 <= DIFFERENTIABLE)||(LA110_0 >= DOMAIN && LA110_0 <= DOUBLE)||LA110_0==ENUM||(LA110_0 >= EXTERN && LA110_0 <= FATOMIC)||LA110_0==FLOAT||LA110_0==GLOBAL||(LA110_0 >= INLINE && LA110_0 <= INT)||(LA110_0 >= LONG && LA110_0 <= NORETURN)||LA110_0==OUTPUT||(LA110_0 >= PURE && LA110_0 <= RANGE)||(LA110_0 >= REAL && LA110_0 <= REGISTER)||LA110_0==RESTRICT||(LA110_0 >= SHARED && LA110_0 <= SIGNED)||LA110_0==STATE_F||LA110_0==STATIC||LA110_0==STRUCT||LA110_0==SYSTEM||(LA110_0 >= THREADLOCAL && LA110_0 <= TYPEOF)||(LA110_0 >= UNION && LA110_0 <= UNSIGNED)||(LA110_0 >= VOID && LA110_0 <= VOLATILE)) ) {
				alt110=1;
			}
			else if ( (LA110_0==LPAREN) ) {
				int LA110_2 = input.LA(2);
				if ( (LA110_2==INTEGER_CONSTANT) ) {
					alt110=2;
				}
				else if ( (LA110_2==IDENTIFIER||LA110_2==LPAREN||LA110_2==LSQUARE||LA110_2==RPAREN||LA110_2==STAR||(LA110_2 >= ABSTRACT && LA110_2 <= ALIGNAS)||(LA110_2 >= ATOMIC && LA110_2 <= AUTO)||LA110_2==BOOL||LA110_2==CHAR||(LA110_2 >= COMPLEX && LA110_2 <= CONST)||(LA110_2 >= DEVICE && LA110_2 <= DIFFERENTIABLE)||(LA110_2 >= DOMAIN && LA110_2 <= DOUBLE)||LA110_2==ENUM||(LA110_2 >= EXTERN && LA110_2 <= FATOMIC)||LA110_2==FLOAT||LA110_2==GLOBAL||(LA110_2 >= INLINE && LA110_2 <= INT)||(LA110_2 >= LONG && LA110_2 <= NORETURN)||LA110_2==OUTPUT||(LA110_2 >= PURE && LA110_2 <= RANGE)||(LA110_2 >= REAL && LA110_2 <= REGISTER)||LA110_2==RESTRICT||(LA110_2 >= SHARED && LA110_2 <= SIGNED)||LA110_2==STATE_F||LA110_2==STATIC||LA110_2==STRUCT||LA110_2==SYSTEM||(LA110_2 >= THREADLOCAL && LA110_2 <= TYPEOF)||(LA110_2 >= UNION && LA110_2 <= UNSIGNED)||(LA110_2 >= VOID && LA110_2 <= VOLATILE)) ) {
					alt110=1;
				}

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

			}

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

			switch (alt110) {
				case 1 :
					// CivlCParser.g:1401:6: 
					{
					// AST REWRITE
					// elements: DOMAIN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1401:6: -> ^( DOMAIN )
					{
						// CivlCParser.g:1401:9: ^( DOMAIN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DOMAIN.nextNode(), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1402:6: LPAREN INTEGER_CONSTANT RPAREN
					{
					LPAREN423=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_domainSpecifier9047); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN423);

					INTEGER_CONSTANT424=(Token)match(input,INTEGER_CONSTANT,FOLLOW_INTEGER_CONSTANT_in_domainSpecifier9049); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INTEGER_CONSTANT.add(INTEGER_CONSTANT424);

					RPAREN425=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_domainSpecifier9051); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN425);

					// AST REWRITE
					// elements: INTEGER_CONSTANT, RPAREN, DOMAIN
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1402:37: -> ^( DOMAIN INTEGER_CONSTANT RPAREN )
					{
						// CivlCParser.g:1402:40: ^( DOMAIN INTEGER_CONSTANT RPAREN )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DOMAIN.nextNode(), root_1);
						adaptor.addChild(root_1, stream_INTEGER_CONSTANT.nextNode());
						adaptor.addChild(root_1, stream_RPAREN.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "domainSpecifier"


	public static class memSpecifier_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "memSpecifier"
	// CivlCParser.g:1407:1: memSpecifier : MEM_TYPE -> ^( MEM_TYPE ) ;
	public final CivlCParser.memSpecifier_return memSpecifier() throws RecognitionException {
		CivlCParser.memSpecifier_return retval = new CivlCParser.memSpecifier_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token MEM_TYPE426=null;

		Object MEM_TYPE426_tree=null;
		RewriteRuleTokenStream stream_MEM_TYPE=new RewriteRuleTokenStream(adaptor,"token MEM_TYPE");

		try {
			// CivlCParser.g:1408:5: ( MEM_TYPE -> ^( MEM_TYPE ) )
			// CivlCParser.g:1408:7: MEM_TYPE
			{
			MEM_TYPE426=(Token)match(input,MEM_TYPE,FOLLOW_MEM_TYPE_in_memSpecifier9082); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_MEM_TYPE.add(MEM_TYPE426);

			// AST REWRITE
			// elements: MEM_TYPE
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1408:16: -> ^( MEM_TYPE )
			{
				// CivlCParser.g:1408:19: ^( MEM_TYPE )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_MEM_TYPE.nextNode(), root_1);
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "memSpecifier"


	public static class statement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "statement"
	// CivlCParser.g:1414:1: statement : ( labeledStatement -> ^( STATEMENT labeledStatement ) | compoundStatement -> ^( STATEMENT compoundStatement ) | expressionStatement -> ^( STATEMENT expressionStatement ) | selectionStatement -> ^( STATEMENT selectionStatement ) | iterationStatement -> ^( STATEMENT iterationStatement ) | jumpStatement -> ^( STATEMENT jumpStatement ) | whenStatement -> ^( STATEMENT whenStatement ) | chooseStatement -> ^( STATEMENT chooseStatement ) | atomicStatement -> ^( STATEMENT atomicStatement ) | runStatement -> ^( STATEMENT runStatement ) | withStatement -> ^( STATEMENT withStatement ) | updateStatement -> ^( STATEMENT updateStatement ) | asmStatement -> ^( STATEMENT asmStatement ) );
	public final CivlCParser.statement_return statement() throws RecognitionException {
		CivlCParser.statement_return retval = new CivlCParser.statement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope labeledStatement427 =null;
		ParserRuleReturnScope compoundStatement428 =null;
		ParserRuleReturnScope expressionStatement429 =null;
		ParserRuleReturnScope selectionStatement430 =null;
		ParserRuleReturnScope iterationStatement431 =null;
		ParserRuleReturnScope jumpStatement432 =null;
		ParserRuleReturnScope whenStatement433 =null;
		ParserRuleReturnScope chooseStatement434 =null;
		ParserRuleReturnScope atomicStatement435 =null;
		ParserRuleReturnScope runStatement436 =null;
		ParserRuleReturnScope withStatement437 =null;
		ParserRuleReturnScope updateStatement438 =null;
		ParserRuleReturnScope asmStatement439 =null;

		RewriteRuleSubtreeStream stream_iterationStatement=new RewriteRuleSubtreeStream(adaptor,"rule iterationStatement");
		RewriteRuleSubtreeStream stream_compoundStatement=new RewriteRuleSubtreeStream(adaptor,"rule compoundStatement");
		RewriteRuleSubtreeStream stream_selectionStatement=new RewriteRuleSubtreeStream(adaptor,"rule selectionStatement");
		RewriteRuleSubtreeStream stream_withStatement=new RewriteRuleSubtreeStream(adaptor,"rule withStatement");
		RewriteRuleSubtreeStream stream_asmStatement=new RewriteRuleSubtreeStream(adaptor,"rule asmStatement");
		RewriteRuleSubtreeStream stream_whenStatement=new RewriteRuleSubtreeStream(adaptor,"rule whenStatement");
		RewriteRuleSubtreeStream stream_chooseStatement=new RewriteRuleSubtreeStream(adaptor,"rule chooseStatement");
		RewriteRuleSubtreeStream stream_labeledStatement=new RewriteRuleSubtreeStream(adaptor,"rule labeledStatement");
		RewriteRuleSubtreeStream stream_atomicStatement=new RewriteRuleSubtreeStream(adaptor,"rule atomicStatement");
		RewriteRuleSubtreeStream stream_updateStatement=new RewriteRuleSubtreeStream(adaptor,"rule updateStatement");
		RewriteRuleSubtreeStream stream_expressionStatement=new RewriteRuleSubtreeStream(adaptor,"rule expressionStatement");
		RewriteRuleSubtreeStream stream_jumpStatement=new RewriteRuleSubtreeStream(adaptor,"rule jumpStatement");
		RewriteRuleSubtreeStream stream_runStatement=new RewriteRuleSubtreeStream(adaptor,"rule runStatement");

		try {
			// CivlCParser.g:1415:5: ( labeledStatement -> ^( STATEMENT labeledStatement ) | compoundStatement -> ^( STATEMENT compoundStatement ) | expressionStatement -> ^( STATEMENT expressionStatement ) | selectionStatement -> ^( STATEMENT selectionStatement ) | iterationStatement -> ^( STATEMENT iterationStatement ) | jumpStatement -> ^( STATEMENT jumpStatement ) | whenStatement -> ^( STATEMENT whenStatement ) | chooseStatement -> ^( STATEMENT chooseStatement ) | atomicStatement -> ^( STATEMENT atomicStatement ) | runStatement -> ^( STATEMENT runStatement ) | withStatement -> ^( STATEMENT withStatement ) | updateStatement -> ^( STATEMENT updateStatement ) | asmStatement -> ^( STATEMENT asmStatement ) )
			int alt111=13;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA111_1 = input.LA(2);
				if ( (LA111_1==COLON) ) {
					alt111=1;
				}
				else if ( ((LA111_1 >= AMPERSAND && LA111_1 <= AND)||(LA111_1 >= ARROW && LA111_1 <= BITXOREQ)||LA111_1==COMMA||(LA111_1 >= DIV && LA111_1 <= DOTDOT)||LA111_1==EQUALS||(LA111_1 >= GT && LA111_1 <= GTE)||LA111_1==IMPLIES||LA111_1==LEXCON||LA111_1==LPAREN||(LA111_1 >= LSQUARE && LA111_1 <= LTE)||(LA111_1 >= MINUSMINUS && LA111_1 <= NEQ)||LA111_1==OR||(LA111_1 >= PLUS && LA111_1 <= PLUSPLUS)||LA111_1==QMARK||(LA111_1 >= SEMI && LA111_1 <= STAREQ)||(LA111_1 >= SUB && LA111_1 <= SUBEQ)) ) {
					alt111=3;
				}

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

				}
				break;
			case CASE:
			case DEFAULT:
				{
				alt111=1;
				}
				break;
			case LCURLY:
				{
				alt111=2;
				}
				break;
			case AMPERSAND:
			case CHARACTER_CONSTANT:
			case ELLIPSIS:
			case FLOATING_CONSTANT:
			case INTEGER_CONSTANT:
			case LPAREN:
			case MINUSMINUS:
			case NOT:
			case PLUS:
			case PLUSPLUS:
			case SEMI:
			case STAR:
			case STRING_LITERAL:
			case SUB:
			case TILDE:
			case ALIGNOF:
			case BIG_O:
			case CALLS:
			case DERIV:
			case EXISTS:
			case FORALL:
			case GENERIC:
			case HERE:
			case PROCNULL:
			case RESULT:
			case SCOPEOF:
			case SELF:
			case SIZEOF:
			case SPAWN:
			case STATE_NULL:
			case UNIFORM:
			case VALUE_AT:
				{
				alt111=3;
				}
				break;
			case IF:
			case SWITCH:
				{
				alt111=4;
				}
				break;
			case CIVLFOR:
			case DO:
			case FOR:
			case PARFOR:
			case WHILE:
				{
				alt111=5;
				}
				break;
			case BREAK:
			case CONTINUE:
			case GOTO:
			case RETURN:
				{
				alt111=6;
				}
				break;
			case WHEN:
				{
				alt111=7;
				}
				break;
			case CHOOSE:
				{
				alt111=8;
				}
				break;
			case CIVLATOMIC:
				{
				alt111=9;
				}
				break;
			case RUN:
				{
				alt111=10;
				}
				break;
			case WITH:
				{
				alt111=11;
				}
				break;
			case UPDATE:
				{
				alt111=12;
				}
				break;
			case ASM:
				{
				alt111=13;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 111, 0, input);
				throw nvae;
			}
			switch (alt111) {
				case 1 :
					// CivlCParser.g:1415:7: labeledStatement
					{
					pushFollow(FOLLOW_labeledStatement_in_statement9106);
					labeledStatement427=labeledStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_labeledStatement.add(labeledStatement427.getTree());
					// AST REWRITE
					// elements: labeledStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1415:24: -> ^( STATEMENT labeledStatement )
					{
						// CivlCParser.g:1415:27: ^( STATEMENT labeledStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_labeledStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1416:7: compoundStatement
					{
					pushFollow(FOLLOW_compoundStatement_in_statement9122);
					compoundStatement428=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement428.getTree());
					// AST REWRITE
					// elements: compoundStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1416:25: -> ^( STATEMENT compoundStatement )
					{
						// CivlCParser.g:1416:28: ^( STATEMENT compoundStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_compoundStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1417:7: expressionStatement
					{
					pushFollow(FOLLOW_expressionStatement_in_statement9138);
					expressionStatement429=expressionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expressionStatement.add(expressionStatement429.getTree());
					// AST REWRITE
					// elements: expressionStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1417:27: -> ^( STATEMENT expressionStatement )
					{
						// CivlCParser.g:1417:30: ^( STATEMENT expressionStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_expressionStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:1418:7: selectionStatement
					{
					pushFollow(FOLLOW_selectionStatement_in_statement9154);
					selectionStatement430=selectionStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_selectionStatement.add(selectionStatement430.getTree());
					// AST REWRITE
					// elements: selectionStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1418:26: -> ^( STATEMENT selectionStatement )
					{
						// CivlCParser.g:1418:29: ^( STATEMENT selectionStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_selectionStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 5 :
					// CivlCParser.g:1419:7: iterationStatement
					{
					pushFollow(FOLLOW_iterationStatement_in_statement9170);
					iterationStatement431=iterationStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_iterationStatement.add(iterationStatement431.getTree());
					// AST REWRITE
					// elements: iterationStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1419:26: -> ^( STATEMENT iterationStatement )
					{
						// CivlCParser.g:1419:29: ^( STATEMENT iterationStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_iterationStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 6 :
					// CivlCParser.g:1420:7: jumpStatement
					{
					pushFollow(FOLLOW_jumpStatement_in_statement9186);
					jumpStatement432=jumpStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_jumpStatement.add(jumpStatement432.getTree());
					// AST REWRITE
					// elements: jumpStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1420:21: -> ^( STATEMENT jumpStatement )
					{
						// CivlCParser.g:1420:24: ^( STATEMENT jumpStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_jumpStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 7 :
					// CivlCParser.g:1421:7: whenStatement
					{
					pushFollow(FOLLOW_whenStatement_in_statement9202);
					whenStatement433=whenStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_whenStatement.add(whenStatement433.getTree());
					// AST REWRITE
					// elements: whenStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1421:21: -> ^( STATEMENT whenStatement )
					{
						// CivlCParser.g:1421:24: ^( STATEMENT whenStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_whenStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 8 :
					// CivlCParser.g:1422:7: chooseStatement
					{
					pushFollow(FOLLOW_chooseStatement_in_statement9218);
					chooseStatement434=chooseStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_chooseStatement.add(chooseStatement434.getTree());
					// AST REWRITE
					// elements: chooseStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1422:23: -> ^( STATEMENT chooseStatement )
					{
						// CivlCParser.g:1422:26: ^( STATEMENT chooseStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_chooseStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 9 :
					// CivlCParser.g:1423:7: atomicStatement
					{
					pushFollow(FOLLOW_atomicStatement_in_statement9234);
					atomicStatement435=atomicStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_atomicStatement.add(atomicStatement435.getTree());
					// AST REWRITE
					// elements: atomicStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1423:23: -> ^( STATEMENT atomicStatement )
					{
						// CivlCParser.g:1423:26: ^( STATEMENT atomicStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_atomicStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 10 :
					// CivlCParser.g:1424:7: runStatement
					{
					pushFollow(FOLLOW_runStatement_in_statement9250);
					runStatement436=runStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_runStatement.add(runStatement436.getTree());
					// AST REWRITE
					// elements: runStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1424:20: -> ^( STATEMENT runStatement )
					{
						// CivlCParser.g:1424:23: ^( STATEMENT runStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_runStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 11 :
					// CivlCParser.g:1425:7: withStatement
					{
					pushFollow(FOLLOW_withStatement_in_statement9266);
					withStatement437=withStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_withStatement.add(withStatement437.getTree());
					// AST REWRITE
					// elements: withStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1425:21: -> ^( STATEMENT withStatement )
					{
						// CivlCParser.g:1425:24: ^( STATEMENT withStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_withStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 12 :
					// CivlCParser.g:1426:7: updateStatement
					{
					pushFollow(FOLLOW_updateStatement_in_statement9282);
					updateStatement438=updateStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_updateStatement.add(updateStatement438.getTree());
					// AST REWRITE
					// elements: updateStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1426:23: -> ^( STATEMENT updateStatement )
					{
						// CivlCParser.g:1426:26: ^( STATEMENT updateStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_updateStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 13 :
					// CivlCParser.g:1427:7: asmStatement
					{
					pushFollow(FOLLOW_asmStatement_in_statement9298);
					asmStatement439=asmStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_asmStatement.add(asmStatement439.getTree());
					// AST REWRITE
					// elements: asmStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1427:20: -> ^( STATEMENT asmStatement )
					{
						// CivlCParser.g:1427:23: ^( STATEMENT asmStatement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_asmStatement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "statement"


	public static class statementWithScope_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "statementWithScope"
	// CivlCParser.g:1430:1: statementWithScope : ( statement | ( pragma )+ statement -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) ) );
	public final CivlCParser.statementWithScope_return statementWithScope() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());

		CivlCParser.statementWithScope_return retval = new CivlCParser.statementWithScope_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope statement440 =null;
		ParserRuleReturnScope pragma441 =null;
		ParserRuleReturnScope statement442 =null;

		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
		RewriteRuleSubtreeStream stream_pragma=new RewriteRuleSubtreeStream(adaptor,"rule pragma");


			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		        Symbols_stack.peek().isFunctionDefinition = false;

		try {
			// CivlCParser.g:1437:2: ( statement | ( pragma )+ statement -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) ) )
			int alt113=2;
			int LA113_0 = input.LA(1);
			if ( (LA113_0==AMPERSAND||LA113_0==CHARACTER_CONSTANT||LA113_0==ELLIPSIS||LA113_0==FLOATING_CONSTANT||(LA113_0 >= IDENTIFIER && LA113_0 <= IF)||LA113_0==INTEGER_CONSTANT||LA113_0==LCURLY||LA113_0==LPAREN||LA113_0==MINUSMINUS||LA113_0==NOT||LA113_0==PLUS||LA113_0==PLUSPLUS||LA113_0==SEMI||LA113_0==STAR||(LA113_0 >= STRING_LITERAL && LA113_0 <= SUB)||LA113_0==TILDE||(LA113_0 >= ALIGNOF && LA113_0 <= ASM)||LA113_0==BIG_O||(LA113_0 >= BREAK && LA113_0 <= CASE)||(LA113_0 >= CHOOSE && LA113_0 <= CIVLFOR)||(LA113_0 >= CONTINUE && LA113_0 <= DEFAULT)||LA113_0==DERIV||LA113_0==DO||LA113_0==EXISTS||(LA113_0 >= FOR && LA113_0 <= GENERIC)||LA113_0==GOTO||LA113_0==HERE||LA113_0==PARFOR||LA113_0==PROCNULL||(LA113_0 >= RESULT && LA113_0 <= SELF)||(LA113_0 >= SIZEOF && LA113_0 <= SPAWN)||LA113_0==STATE_NULL||LA113_0==SWITCH||LA113_0==UNIFORM||(LA113_0 >= UPDATE && LA113_0 <= VALUE_AT)||(LA113_0 >= WHEN && LA113_0 <= WITH)) ) {
				alt113=1;
			}
			else if ( (LA113_0==PPRAGMA) ) {
				alt113=2;
			}

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

			switch (alt113) {
				case 1 :
					// CivlCParser.g:1437:4: statement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_statement_in_statementWithScope9330);
					statement440=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, statement440.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1438:4: ( pragma )+ statement
					{
					// CivlCParser.g:1438:4: ( pragma )+
					int cnt112=0;
					loop112:
					while (true) {
						int alt112=2;
						int LA112_0 = input.LA(1);
						if ( (LA112_0==PPRAGMA) ) {
							alt112=1;
						}

						switch (alt112) {
						case 1 :
							// CivlCParser.g:1438:4: pragma
							{
							pushFollow(FOLLOW_pragma_in_statementWithScope9335);
							pragma441=pragma();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_pragma.add(pragma441.getTree());
							}
							break;

						default :
							if ( cnt112 >= 1 ) break loop112;
							if (state.backtracking>0) {state.failed=true; return retval;}
							EarlyExitException eee = new EarlyExitException(112, input);
							throw eee;
						}
						cnt112++;
					}

					pushFollow(FOLLOW_statement_in_statementWithScope9338);
					statement442=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement442.getTree());
					// AST REWRITE
					// elements: pragma, statement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1438:22: -> ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) )
					{
						// CivlCParser.g:1438:25: ^( STATEMENT ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT ) )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STATEMENT, "STATEMENT"), root_1);
						// CivlCParser.g:1438:37: ^( COMPOUND_STATEMENT ABSENT ^( BLOCK_ITEM_LIST ( pragma )+ statement ) ABSENT )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(COMPOUND_STATEMENT, "COMPOUND_STATEMENT"), root_2);
						adaptor.addChild(root_2, (Object)adaptor.create(ABSENT, "ABSENT"));
						// CivlCParser.g:1438:65: ^( BLOCK_ITEM_LIST ( pragma )+ statement )
						{
						Object root_3 = (Object)adaptor.nil();
						root_3 = (Object)adaptor.becomeRoot((Object)adaptor.create(BLOCK_ITEM_LIST, "BLOCK_ITEM_LIST"), root_3);
						if ( !(stream_pragma.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_pragma.hasNext() ) {
							adaptor.addChild(root_3, stream_pragma.nextTree());
						}
						stream_pragma.reset();

						adaptor.addChild(root_3, stream_statement.nextTree());
						adaptor.addChild(root_2, root_3);
						}

						adaptor.addChild(root_2, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "statementWithScope"


	public static class labeledStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "labeledStatement"
	// CivlCParser.g:1457:1: labeledStatement : ( IDENTIFIER COLON statement -> ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement ) | CASE constantExpression COLON statement -> ^( CASE_LABELED_STATEMENT CASE constantExpression statement ) | DEFAULT COLON statement -> ^( DEFAULT_LABELED_STATEMENT DEFAULT statement ) );
	public final CivlCParser.labeledStatement_return labeledStatement() throws RecognitionException {
		CivlCParser.labeledStatement_return retval = new CivlCParser.labeledStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IDENTIFIER443=null;
		Token COLON444=null;
		Token CASE446=null;
		Token COLON448=null;
		Token DEFAULT450=null;
		Token COLON451=null;
		ParserRuleReturnScope statement445 =null;
		ParserRuleReturnScope constantExpression447 =null;
		ParserRuleReturnScope statement449 =null;
		ParserRuleReturnScope statement452 =null;

		Object IDENTIFIER443_tree=null;
		Object COLON444_tree=null;
		Object CASE446_tree=null;
		Object COLON448_tree=null;
		Object DEFAULT450_tree=null;
		Object COLON451_tree=null;
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleTokenStream stream_DEFAULT=new RewriteRuleTokenStream(adaptor,"token DEFAULT");
		RewriteRuleTokenStream stream_CASE=new RewriteRuleTokenStream(adaptor,"token CASE");
		RewriteRuleSubtreeStream stream_constantExpression=new RewriteRuleSubtreeStream(adaptor,"rule constantExpression");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1458:5: ( IDENTIFIER COLON statement -> ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement ) | CASE constantExpression COLON statement -> ^( CASE_LABELED_STATEMENT CASE constantExpression statement ) | DEFAULT COLON statement -> ^( DEFAULT_LABELED_STATEMENT DEFAULT statement ) )
			int alt114=3;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				alt114=1;
				}
				break;
			case CASE:
				{
				alt114=2;
				}
				break;
			case DEFAULT:
				{
				alt114=3;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 114, 0, input);
				throw nvae;
			}
			switch (alt114) {
				case 1 :
					// CivlCParser.g:1458:7: IDENTIFIER COLON statement
					{
					IDENTIFIER443=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_labeledStatement9377); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER443);

					COLON444=(Token)match(input,COLON,FOLLOW_COLON_in_labeledStatement9379); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON444);

					pushFollow(FOLLOW_statement_in_labeledStatement9381);
					statement445=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement445.getTree());
					// AST REWRITE
					// elements: statement, IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1459:7: -> ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement )
					{
						// CivlCParser.g:1459:10: ^( IDENTIFIER_LABELED_STATEMENT IDENTIFIER statement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(IDENTIFIER_LABELED_STATEMENT, "IDENTIFIER_LABELED_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, stream_statement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1460:7: CASE constantExpression COLON statement
					{
					CASE446=(Token)match(input,CASE,FOLLOW_CASE_in_labeledStatement9405); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CASE.add(CASE446);

					pushFollow(FOLLOW_constantExpression_in_labeledStatement9407);
					constantExpression447=constantExpression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_constantExpression.add(constantExpression447.getTree());
					COLON448=(Token)match(input,COLON,FOLLOW_COLON_in_labeledStatement9409); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON448);

					pushFollow(FOLLOW_statement_in_labeledStatement9411);
					statement449=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement449.getTree());
					// AST REWRITE
					// elements: statement, CASE, constantExpression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1461:7: -> ^( CASE_LABELED_STATEMENT CASE constantExpression statement )
					{
						// CivlCParser.g:1461:10: ^( CASE_LABELED_STATEMENT CASE constantExpression statement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CASE_LABELED_STATEMENT, "CASE_LABELED_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_CASE.nextNode());
						adaptor.addChild(root_1, stream_constantExpression.nextTree());
						adaptor.addChild(root_1, stream_statement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1462:7: DEFAULT COLON statement
					{
					DEFAULT450=(Token)match(input,DEFAULT,FOLLOW_DEFAULT_in_labeledStatement9437); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEFAULT.add(DEFAULT450);

					COLON451=(Token)match(input,COLON,FOLLOW_COLON_in_labeledStatement9439); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON451);

					pushFollow(FOLLOW_statement_in_labeledStatement9441);
					statement452=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement452.getTree());
					// AST REWRITE
					// elements: statement, DEFAULT
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1463:7: -> ^( DEFAULT_LABELED_STATEMENT DEFAULT statement )
					{
						// CivlCParser.g:1463:10: ^( DEFAULT_LABELED_STATEMENT DEFAULT statement )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DEFAULT_LABELED_STATEMENT, "DEFAULT_LABELED_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_DEFAULT.nextNode());
						adaptor.addChild(root_1, stream_statement.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "labeledStatement"


	public static class compoundStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "compoundStatement"
	// CivlCParser.g:1472:1: compoundStatement : LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) ) ;
	public final CivlCParser.compoundStatement_return compoundStatement() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.compoundStatement_return retval = new CivlCParser.compoundStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token LCURLY453=null;
		Token RCURLY454=null;
		Token RCURLY456=null;
		ParserRuleReturnScope blockItemList455 =null;

		Object LCURLY453_tree=null;
		Object RCURLY454_tree=null;
		Object RCURLY456_tree=null;
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_blockItemList=new RewriteRuleSubtreeStream(adaptor,"rule blockItemList");


			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		        Symbols_stack.peek().isFunctionDefinition = false;
		        DeclarationScope_stack.peek().isTypedef = false;
		        DeclarationScope_stack.peek().typedefNameUsed = false;

		try {
			// CivlCParser.g:1482:5: ( LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) ) )
			// CivlCParser.g:1482:7: LCURLY ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			{
			LCURLY453=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_compoundStatement9491); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY453);

			// CivlCParser.g:1483:7: ( RCURLY -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY ) | blockItemList RCURLY -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY ) )
			int alt115=2;
			int LA115_0 = input.LA(1);
			if ( (LA115_0==RCURLY) ) {
				alt115=1;
			}
			else if ( (LA115_0==AMPERSAND||LA115_0==ANNOTATION_START||LA115_0==CHARACTER_CONSTANT||LA115_0==ELLIPSIS||LA115_0==FLOATING_CONSTANT||(LA115_0 >= IDENTIFIER && LA115_0 <= IF)||LA115_0==INLINE_ANNOTATION_START||LA115_0==INTEGER_CONSTANT||LA115_0==LCURLY||LA115_0==LPAREN||LA115_0==MINUSMINUS||LA115_0==NOT||LA115_0==PLUS||LA115_0==PLUSPLUS||LA115_0==SEMI||LA115_0==STAR||(LA115_0 >= STRING_LITERAL && LA115_0 <= SUB)||LA115_0==TILDE||(LA115_0 >= ABSTRACT && LA115_0 <= ASM)||(LA115_0 >= ATOMIC && LA115_0 <= BIG_O)||(LA115_0 >= BOOL && LA115_0 <= CASE)||(LA115_0 >= CHAR && LA115_0 <= CIVLFOR)||(LA115_0 >= COMPLEX && LA115_0 <= CONST)||(LA115_0 >= CONTINUE && LA115_0 <= DEFAULT)||(LA115_0 >= DERIV && LA115_0 <= DOUBLE)||(LA115_0 >= ENUM && LA115_0 <= EXISTS)||(LA115_0 >= EXTERN && LA115_0 <= FATOMIC)||(LA115_0 >= FLOAT && LA115_0 <= GOTO)||LA115_0==HERE||(LA115_0 >= INLINE && LA115_0 <= INT)||(LA115_0 >= LONG && LA115_0 <= NORETURN)||LA115_0==OUTPUT||LA115_0==PARFOR||(LA115_0 >= PPRAGMA && LA115_0 <= RANGE)||(LA115_0 >= REAL && LA115_0 <= REGISTER)||(LA115_0 >= RESTRICT && LA115_0 <= SELF)||(LA115_0 >= SHARED && LA115_0 <= SYSTEM)||(LA115_0 >= THREADLOCAL && LA115_0 <= WITH)) ) {
				alt115=2;
			}

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

			switch (alt115) {
				case 1 :
					// CivlCParser.g:1483:9: RCURLY
					{
					RCURLY454=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement9501); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY454);

					// AST REWRITE
					// elements: RCURLY, LCURLY
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1484:9: -> ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY )
					{
						// CivlCParser.g:1484:12: ^( COMPOUND_STATEMENT LCURLY ABSENT RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COMPOUND_STATEMENT, "COMPOUND_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_LCURLY.nextNode());
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1485:9: blockItemList RCURLY
					{
					pushFollow(FOLLOW_blockItemList_in_compoundStatement9531);
					blockItemList455=blockItemList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItemList.add(blockItemList455.getTree());
					RCURLY456=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_compoundStatement9533); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY456);

					// AST REWRITE
					// elements: RCURLY, LCURLY, blockItemList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1486:9: -> ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY )
					{
						// CivlCParser.g:1486:12: ^( COMPOUND_STATEMENT LCURLY blockItemList RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COMPOUND_STATEMENT, "COMPOUND_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_LCURLY.nextNode());
						adaptor.addChild(root_1, stream_blockItemList.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "compoundStatement"


	public static class blockItemList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "blockItemList"
	// CivlCParser.g:1491:1: blockItemList : ( blockItem )+ -> ^( BLOCK_ITEM_LIST ( blockItem )+ ) ;
	public final CivlCParser.blockItemList_return blockItemList() throws RecognitionException {
		CivlCParser.blockItemList_return retval = new CivlCParser.blockItemList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope blockItem457 =null;

		RewriteRuleSubtreeStream stream_blockItem=new RewriteRuleSubtreeStream(adaptor,"rule blockItem");

		try {
			// CivlCParser.g:1492:5: ( ( blockItem )+ -> ^( BLOCK_ITEM_LIST ( blockItem )+ ) )
			// CivlCParser.g:1492:7: ( blockItem )+
			{
			// CivlCParser.g:1492:7: ( blockItem )+
			int cnt116=0;
			loop116:
			while (true) {
				int alt116=2;
				int LA116_0 = input.LA(1);
				if ( (LA116_0==AMPERSAND||LA116_0==ANNOTATION_START||LA116_0==CHARACTER_CONSTANT||LA116_0==ELLIPSIS||LA116_0==FLOATING_CONSTANT||(LA116_0 >= IDENTIFIER && LA116_0 <= IF)||LA116_0==INLINE_ANNOTATION_START||LA116_0==INTEGER_CONSTANT||LA116_0==LCURLY||LA116_0==LPAREN||LA116_0==MINUSMINUS||LA116_0==NOT||LA116_0==PLUS||LA116_0==PLUSPLUS||LA116_0==SEMI||LA116_0==STAR||(LA116_0 >= STRING_LITERAL && LA116_0 <= SUB)||LA116_0==TILDE||(LA116_0 >= ABSTRACT && LA116_0 <= ASM)||(LA116_0 >= ATOMIC && LA116_0 <= BIG_O)||(LA116_0 >= BOOL && LA116_0 <= CASE)||(LA116_0 >= CHAR && LA116_0 <= CIVLFOR)||(LA116_0 >= COMPLEX && LA116_0 <= CONST)||(LA116_0 >= CONTINUE && LA116_0 <= DEFAULT)||(LA116_0 >= DERIV && LA116_0 <= DOUBLE)||(LA116_0 >= ENUM && LA116_0 <= EXISTS)||(LA116_0 >= EXTERN && LA116_0 <= FATOMIC)||(LA116_0 >= FLOAT && LA116_0 <= GOTO)||LA116_0==HERE||(LA116_0 >= INLINE && LA116_0 <= INT)||(LA116_0 >= LONG && LA116_0 <= NORETURN)||LA116_0==OUTPUT||LA116_0==PARFOR||(LA116_0 >= PPRAGMA && LA116_0 <= RANGE)||(LA116_0 >= REAL && LA116_0 <= REGISTER)||(LA116_0 >= RESTRICT && LA116_0 <= SELF)||(LA116_0 >= SHARED && LA116_0 <= SYSTEM)||(LA116_0 >= THREADLOCAL && LA116_0 <= WITH)) ) {
					alt116=1;
				}

				switch (alt116) {
				case 1 :
					// CivlCParser.g:1492:7: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_blockItemList9580);
					blockItem457=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem457.getTree());
					}
					break;

				default :
					if ( cnt116 >= 1 ) break loop116;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(116, input);
					throw eee;
				}
				cnt116++;
			}

			// AST REWRITE
			// elements: blockItem
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1492:18: -> ^( BLOCK_ITEM_LIST ( blockItem )+ )
			{
				// CivlCParser.g:1492:21: ^( BLOCK_ITEM_LIST ( blockItem )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BLOCK_ITEM_LIST, "BLOCK_ITEM_LIST"), root_1);
				if ( !(stream_blockItem.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_blockItem.hasNext() ) {
					adaptor.addChild(root_1, stream_blockItem.nextTree());
				}
				stream_blockItem.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "blockItemList"


	public static class expressionStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "expressionStatement"
	// CivlCParser.g:1502:1: expressionStatement : ( expression SEMI -> ^( EXPRESSION_STATEMENT expression SEMI ) | SEMI -> ^( EXPRESSION_STATEMENT ABSENT SEMI ) );
	public final CivlCParser.expressionStatement_return expressionStatement() throws RecognitionException {
		CivlCParser.expressionStatement_return retval = new CivlCParser.expressionStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEMI459=null;
		Token SEMI460=null;
		ParserRuleReturnScope expression458 =null;

		Object SEMI459_tree=null;
		Object SEMI460_tree=null;
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// CivlCParser.g:1503:5: ( expression SEMI -> ^( EXPRESSION_STATEMENT expression SEMI ) | SEMI -> ^( EXPRESSION_STATEMENT ABSENT SEMI ) )
			int alt117=2;
			int LA117_0 = input.LA(1);
			if ( (LA117_0==AMPERSAND||LA117_0==CHARACTER_CONSTANT||LA117_0==ELLIPSIS||LA117_0==FLOATING_CONSTANT||LA117_0==IDENTIFIER||LA117_0==INTEGER_CONSTANT||LA117_0==LPAREN||LA117_0==MINUSMINUS||LA117_0==NOT||LA117_0==PLUS||LA117_0==PLUSPLUS||LA117_0==STAR||(LA117_0 >= STRING_LITERAL && LA117_0 <= SUB)||LA117_0==TILDE||LA117_0==ALIGNOF||LA117_0==BIG_O||LA117_0==CALLS||LA117_0==DERIV||LA117_0==EXISTS||(LA117_0 >= FORALL && LA117_0 <= GENERIC)||LA117_0==HERE||LA117_0==PROCNULL||LA117_0==RESULT||(LA117_0 >= SCOPEOF && LA117_0 <= SELF)||(LA117_0 >= SIZEOF && LA117_0 <= SPAWN)||LA117_0==STATE_NULL||LA117_0==UNIFORM||LA117_0==VALUE_AT) ) {
				alt117=1;
			}
			else if ( (LA117_0==SEMI) ) {
				alt117=2;
			}

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

			switch (alt117) {
				case 1 :
					// CivlCParser.g:1503:7: expression SEMI
					{
					pushFollow(FOLLOW_expression_in_expressionStatement9611);
					expression458=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression458.getTree());
					SEMI459=(Token)match(input,SEMI,FOLLOW_SEMI_in_expressionStatement9613); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI459);

					// AST REWRITE
					// elements: expression, SEMI
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1503:23: -> ^( EXPRESSION_STATEMENT expression SEMI )
					{
						// CivlCParser.g:1503:26: ^( EXPRESSION_STATEMENT expression SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXPRESSION_STATEMENT, "EXPRESSION_STATEMENT"), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1504:7: SEMI
					{
					SEMI460=(Token)match(input,SEMI,FOLLOW_SEMI_in_expressionStatement9631); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI460);

					// AST REWRITE
					// elements: SEMI
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1504:12: -> ^( EXPRESSION_STATEMENT ABSENT SEMI )
					{
						// CivlCParser.g:1504:15: ^( EXPRESSION_STATEMENT ABSENT SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXPRESSION_STATEMENT, "EXPRESSION_STATEMENT"), root_1);
						adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "expressionStatement"


	public static class selectionStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "selectionStatement"
	// CivlCParser.g:1519:1: selectionStatement : ( IF LPAREN expression RPAREN s1= statementWithScope ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) ) | SWITCH LPAREN expression RPAREN s= statementWithScope -> ^( SWITCH expression $s) );
	public final CivlCParser.selectionStatement_return selectionStatement() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());

		CivlCParser.selectionStatement_return retval = new CivlCParser.selectionStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IF461=null;
		Token LPAREN462=null;
		Token RPAREN464=null;
		Token ELSE465=null;
		Token SWITCH466=null;
		Token LPAREN467=null;
		Token RPAREN469=null;
		ParserRuleReturnScope s1 =null;
		ParserRuleReturnScope s2 =null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope expression463 =null;
		ParserRuleReturnScope expression468 =null;

		Object IF461_tree=null;
		Object LPAREN462_tree=null;
		Object RPAREN464_tree=null;
		Object ELSE465_tree=null;
		Object SWITCH466_tree=null;
		Object LPAREN467_tree=null;
		Object RPAREN469_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_ELSE=new RewriteRuleTokenStream(adaptor,"token ELSE");
		RewriteRuleTokenStream stream_SWITCH=new RewriteRuleTokenStream(adaptor,"token SWITCH");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_IF=new RewriteRuleTokenStream(adaptor,"token IF");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_statementWithScope=new RewriteRuleSubtreeStream(adaptor,"rule statementWithScope");


			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		        Symbols_stack.peek().isFunctionDefinition = false;

		try {
			// CivlCParser.g:1526:5: ( IF LPAREN expression RPAREN s1= statementWithScope ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) ) | SWITCH LPAREN expression RPAREN s= statementWithScope -> ^( SWITCH expression $s) )
			int alt119=2;
			int LA119_0 = input.LA(1);
			if ( (LA119_0==IF) ) {
				alt119=1;
			}
			else if ( (LA119_0==SWITCH) ) {
				alt119=2;
			}

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

			switch (alt119) {
				case 1 :
					// CivlCParser.g:1526:7: IF LPAREN expression RPAREN s1= statementWithScope ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) )
					{
					IF461=(Token)match(input,IF,FOLLOW_IF_in_selectionStatement9670); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IF.add(IF461);

					LPAREN462=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_selectionStatement9672); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN462);

					pushFollow(FOLLOW_expression_in_selectionStatement9674);
					expression463=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression463.getTree());
					RPAREN464=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectionStatement9676); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN464);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9680);
					s1=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s1.getTree());
					// CivlCParser.g:1527:9: ( ( ELSE )=> ELSE s2= statementWithScope -> ^( IF expression $s1 $s2) | -> ^( IF expression $s1 ABSENT ) )
					int alt118=2;
					int LA118_0 = input.LA(1);
					if ( (LA118_0==ELSE) ) {
						int LA118_1 = input.LA(2);
						if ( (synpred30_CivlCParser()) ) {
							alt118=1;
						}
						else if ( (true) ) {
							alt118=2;
						}

					}
					else if ( (LA118_0==EOF||LA118_0==AMPERSAND||LA118_0==ANNOTATION_START||LA118_0==CHARACTER_CONSTANT||LA118_0==ELLIPSIS||LA118_0==FLOATING_CONSTANT||(LA118_0 >= IDENTIFIER && LA118_0 <= IF)||LA118_0==INLINE_ANNOTATION_START||LA118_0==INTEGER_CONSTANT||LA118_0==LCURLY||LA118_0==LPAREN||LA118_0==MINUSMINUS||LA118_0==NOT||LA118_0==PLUS||LA118_0==PLUSPLUS||LA118_0==RCURLY||LA118_0==SEMI||LA118_0==STAR||(LA118_0 >= STRING_LITERAL && LA118_0 <= SUB)||LA118_0==TILDE||(LA118_0 >= ABSTRACT && LA118_0 <= ASM)||(LA118_0 >= ATOMIC && LA118_0 <= BIG_O)||(LA118_0 >= BOOL && LA118_0 <= CASE)||(LA118_0 >= CHAR && LA118_0 <= CIVLFOR)||(LA118_0 >= COMPLEX && LA118_0 <= CONST)||(LA118_0 >= CONTINUE && LA118_0 <= DEFAULT)||(LA118_0 >= DERIV && LA118_0 <= DOUBLE)||(LA118_0 >= ENUM && LA118_0 <= EXISTS)||(LA118_0 >= EXTERN && LA118_0 <= FATOMIC)||(LA118_0 >= FLOAT && LA118_0 <= GOTO)||LA118_0==HERE||(LA118_0 >= INLINE && LA118_0 <= INT)||(LA118_0 >= LONG && LA118_0 <= NORETURN)||LA118_0==OUTPUT||LA118_0==PARFOR||(LA118_0 >= PPRAGMA && LA118_0 <= RANGE)||(LA118_0 >= REAL && LA118_0 <= REGISTER)||(LA118_0 >= RESTRICT && LA118_0 <= SELF)||(LA118_0 >= SHARED && LA118_0 <= SYSTEM)||(LA118_0 >= THREADLOCAL && LA118_0 <= WITH)) ) {
						alt118=2;
					}

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

					switch (alt118) {
						case 1 :
							// CivlCParser.g:1527:11: ( ELSE )=> ELSE s2= statementWithScope
							{
							ELSE465=(Token)match(input,ELSE,FOLLOW_ELSE_in_selectionStatement9697); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_ELSE.add(ELSE465);

							pushFollow(FOLLOW_statementWithScope_in_selectionStatement9701);
							s2=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s2.getTree());
							// AST REWRITE
							// elements: s2, s1, IF, expression
							// token labels: 
							// rule labels: s1, retval, s2
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s1=new RewriteRuleSubtreeStream(adaptor,"rule s1",s1!=null?s1.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
							RewriteRuleSubtreeStream stream_s2=new RewriteRuleSubtreeStream(adaptor,"rule s2",s2!=null?s2.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1528:11: -> ^( IF expression $s1 $s2)
							{
								// CivlCParser.g:1528:14: ^( IF expression $s1 $s2)
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot(stream_IF.nextNode(), root_1);
								adaptor.addChild(root_1, stream_expression.nextTree());
								adaptor.addChild(root_1, stream_s1.nextTree());
								adaptor.addChild(root_1, stream_s2.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:1529:11: 
							{
							// AST REWRITE
							// elements: expression, s1, IF
							// token labels: 
							// rule labels: s1, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s1=new RewriteRuleSubtreeStream(adaptor,"rule s1",s1!=null?s1.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1529:11: -> ^( IF expression $s1 ABSENT )
							{
								// CivlCParser.g:1529:14: ^( IF expression $s1 ABSENT )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot(stream_IF.nextNode(), root_1);
								adaptor.addChild(root_1, stream_expression.nextTree());
								adaptor.addChild(root_1, stream_s1.nextTree());
								adaptor.addChild(root_1, (Object)adaptor.create(ABSENT, "ABSENT"));
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// CivlCParser.g:1531:7: SWITCH LPAREN expression RPAREN s= statementWithScope
					{
					SWITCH466=(Token)match(input,SWITCH,FOLLOW_SWITCH_in_selectionStatement9766); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SWITCH.add(SWITCH466);

					LPAREN467=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_selectionStatement9768); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN467);

					pushFollow(FOLLOW_expression_in_selectionStatement9770);
					expression468=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression468.getTree());
					RPAREN469=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_selectionStatement9772); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN469);

					pushFollow(FOLLOW_statementWithScope_in_selectionStatement9776);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: SWITCH, expression, s
					// token labels: 
					// rule labels: s, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1532:7: -> ^( SWITCH expression $s)
					{
						// CivlCParser.g:1532:10: ^( SWITCH expression $s)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_SWITCH.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_s.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "selectionStatement"


	public static class iterationStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "iterationStatement"
	// CivlCParser.g:1554:1: iterationStatement : ( WHILE LPAREN expression RPAREN invariant_opt s= statementWithScope -> ^( WHILE expression $s invariant_opt ) | DO s= statementWithScope WHILE LPAREN expression RPAREN invariant_opt SEMI -> ^( DO $s expression invariant_opt ) | FOR LPAREN (d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $d $e1 $e2 $s $i) |e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $e0 $e1 $e2 $s $i) ) | (f= CIVLFOR |f= PARFOR ) LPAREN t= typeName_opt v= identifierList COLON e= expression RPAREN i= invariant_opt s= statementWithScope -> ^( $f $t $v $e $s $i) );
	public final CivlCParser.iterationStatement_return iterationStatement() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());

		CivlCParser.iterationStatement_return retval = new CivlCParser.iterationStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token f=null;
		Token WHILE470=null;
		Token LPAREN471=null;
		Token RPAREN473=null;
		Token DO475=null;
		Token WHILE476=null;
		Token LPAREN477=null;
		Token RPAREN479=null;
		Token SEMI481=null;
		Token FOR482=null;
		Token LPAREN483=null;
		Token SEMI484=null;
		Token RPAREN485=null;
		Token SEMI486=null;
		Token SEMI487=null;
		Token RPAREN488=null;
		Token LPAREN489=null;
		Token COLON490=null;
		Token RPAREN491=null;
		ParserRuleReturnScope s =null;
		ParserRuleReturnScope d =null;
		ParserRuleReturnScope e1 =null;
		ParserRuleReturnScope e2 =null;
		ParserRuleReturnScope i =null;
		ParserRuleReturnScope e0 =null;
		ParserRuleReturnScope t =null;
		ParserRuleReturnScope v =null;
		ParserRuleReturnScope e =null;
		ParserRuleReturnScope expression472 =null;
		ParserRuleReturnScope invariant_opt474 =null;
		ParserRuleReturnScope expression478 =null;
		ParserRuleReturnScope invariant_opt480 =null;

		Object f_tree=null;
		Object WHILE470_tree=null;
		Object LPAREN471_tree=null;
		Object RPAREN473_tree=null;
		Object DO475_tree=null;
		Object WHILE476_tree=null;
		Object LPAREN477_tree=null;
		Object RPAREN479_tree=null;
		Object SEMI481_tree=null;
		Object FOR482_tree=null;
		Object LPAREN483_tree=null;
		Object SEMI484_tree=null;
		Object RPAREN485_tree=null;
		Object SEMI486_tree=null;
		Object SEMI487_tree=null;
		Object RPAREN488_tree=null;
		Object LPAREN489_tree=null;
		Object COLON490_tree=null;
		Object RPAREN491_tree=null;
		RewriteRuleTokenStream stream_PARFOR=new RewriteRuleTokenStream(adaptor,"token PARFOR");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleTokenStream stream_FOR=new RewriteRuleTokenStream(adaptor,"token FOR");
		RewriteRuleTokenStream stream_WHILE=new RewriteRuleTokenStream(adaptor,"token WHILE");
		RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_DO=new RewriteRuleTokenStream(adaptor,"token DO");
		RewriteRuleTokenStream stream_CIVLFOR=new RewriteRuleTokenStream(adaptor,"token CIVLFOR");
		RewriteRuleSubtreeStream stream_expression_opt=new RewriteRuleSubtreeStream(adaptor,"rule expression_opt");
		RewriteRuleSubtreeStream stream_invariant_opt=new RewriteRuleSubtreeStream(adaptor,"rule invariant_opt");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_identifierList=new RewriteRuleSubtreeStream(adaptor,"rule identifierList");
		RewriteRuleSubtreeStream stream_typeName_opt=new RewriteRuleSubtreeStream(adaptor,"rule typeName_opt");
		RewriteRuleSubtreeStream stream_statementWithScope=new RewriteRuleSubtreeStream(adaptor,"rule statementWithScope");
		RewriteRuleSubtreeStream stream_declaration=new RewriteRuleSubtreeStream(adaptor,"rule declaration");


			Symbols_stack.peek().types = new HashSet<String>();
			Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		        Symbols_stack.peek().isFunctionDefinition = false;

		try {
			// CivlCParser.g:1561:2: ( WHILE LPAREN expression RPAREN invariant_opt s= statementWithScope -> ^( WHILE expression $s invariant_opt ) | DO s= statementWithScope WHILE LPAREN expression RPAREN invariant_opt SEMI -> ^( DO $s expression invariant_opt ) | FOR LPAREN (d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $d $e1 $e2 $s $i) |e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $e0 $e1 $e2 $s $i) ) | (f= CIVLFOR |f= PARFOR ) LPAREN t= typeName_opt v= identifierList COLON e= expression RPAREN i= invariant_opt s= statementWithScope -> ^( $f $t $v $e $s $i) )
			int alt122=4;
			switch ( input.LA(1) ) {
			case WHILE:
				{
				alt122=1;
				}
				break;
			case DO:
				{
				alt122=2;
				}
				break;
			case FOR:
				{
				alt122=3;
				}
				break;
			case CIVLFOR:
			case PARFOR:
				{
				alt122=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 122, 0, input);
				throw nvae;
			}
			switch (alt122) {
				case 1 :
					// CivlCParser.g:1561:4: WHILE LPAREN expression RPAREN invariant_opt s= statementWithScope
					{
					WHILE470=(Token)match(input,WHILE,FOLLOW_WHILE_in_iterationStatement9819); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_WHILE.add(WHILE470);

					LPAREN471=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_iterationStatement9821); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN471);

					pushFollow(FOLLOW_expression_in_iterationStatement9823);
					expression472=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression472.getTree());
					RPAREN473=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9825); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN473);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9827);
					invariant_opt474=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt474.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9834);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: expression, invariant_opt, WHILE, s
					// token labels: 
					// rule labels: s, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1563:4: -> ^( WHILE expression $s invariant_opt )
					{
						// CivlCParser.g:1563:7: ^( WHILE expression $s invariant_opt )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_WHILE.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_s.nextTree());
						adaptor.addChild(root_1, stream_invariant_opt.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1564:4: DO s= statementWithScope WHILE LPAREN expression RPAREN invariant_opt SEMI
					{
					DO475=(Token)match(input,DO,FOLLOW_DO_in_iterationStatement9855); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DO.add(DO475);

					pushFollow(FOLLOW_statementWithScope_in_iterationStatement9859);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					WHILE476=(Token)match(input,WHILE,FOLLOW_WHILE_in_iterationStatement9861); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_WHILE.add(WHILE476);

					LPAREN477=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_iterationStatement9863); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN477);

					pushFollow(FOLLOW_expression_in_iterationStatement9865);
					expression478=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression478.getTree());
					RPAREN479=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9867); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN479);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement9872);
					invariant_opt480=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(invariant_opt480.getTree());
					SEMI481=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9874); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI481);

					// AST REWRITE
					// elements: s, invariant_opt, DO, expression
					// token labels: 
					// rule labels: s, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1566:4: -> ^( DO $s expression invariant_opt )
					{
						// CivlCParser.g:1566:7: ^( DO $s expression invariant_opt )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DO.nextNode(), root_1);
						adaptor.addChild(root_1, stream_s.nextTree());
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_invariant_opt.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1567:4: FOR LPAREN (d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $d $e1 $e2 $s $i) |e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $e0 $e1 $e2 $s $i) )
					{
					FOR482=(Token)match(input,FOR,FOLLOW_FOR_in_iterationStatement9895); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_FOR.add(FOR482);

					LPAREN483=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_iterationStatement9897); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN483);

					// CivlCParser.g:1568:4: (d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $d $e1 $e2 $s $i) |e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $e0 $e1 $e2 $s $i) )
					int alt120=2;
					alt120 = dfa120.predict(input);
					switch (alt120) {
						case 1 :
							// CivlCParser.g:1569:6: d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_declaration_in_iterationStatement9911);
							d=declaration();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_declaration.add(d.getTree());
							pushFollow(FOLLOW_expression_opt_in_iterationStatement9915);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI484=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9917); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI484);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9921);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN485=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9928); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN485);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement9932);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement9936);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: e2, FOR, s, e1, d, i
							// token labels: 
							// rule labels: s, d, i, e1, e2, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
							RewriteRuleSubtreeStream stream_d=new RewriteRuleSubtreeStream(adaptor,"rule d",d!=null?d.getTree():null);
							RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"rule i",i!=null?i.getTree():null);
							RewriteRuleSubtreeStream stream_e1=new RewriteRuleSubtreeStream(adaptor,"rule e1",e1!=null?e1.getTree():null);
							RewriteRuleSubtreeStream stream_e2=new RewriteRuleSubtreeStream(adaptor,"rule e2",e2!=null?e2.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1571:6: -> ^( FOR $d $e1 $e2 $s $i)
							{
								// CivlCParser.g:1571:9: ^( FOR $d $e1 $e2 $s $i)
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot(stream_FOR.nextNode(), root_1);
								adaptor.addChild(root_1, stream_d.nextTree());
								adaptor.addChild(root_1, stream_e1.nextTree());
								adaptor.addChild(root_1, stream_e2.nextTree());
								adaptor.addChild(root_1, stream_s.nextTree());
								adaptor.addChild(root_1, stream_i.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:1572:6: e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope
							{
							pushFollow(FOLLOW_expression_opt_in_iterationStatement9971);
							e0=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e0.getTree());
							SEMI486=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9973); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI486);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9977);
							e1=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e1.getTree());
							SEMI487=(Token)match(input,SEMI,FOLLOW_SEMI_in_iterationStatement9979); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_SEMI.add(SEMI487);

							pushFollow(FOLLOW_expression_opt_in_iterationStatement9988);
							e2=expression_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression_opt.add(e2.getTree());
							RPAREN488=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement9990); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN488);

							pushFollow(FOLLOW_invariant_opt_in_iterationStatement9994);
							i=invariant_opt();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
							pushFollow(FOLLOW_statementWithScope_in_iterationStatement10003);
							s=statementWithScope();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
							// AST REWRITE
							// elements: i, e0, s, e1, e2, FOR
							// token labels: 
							// rule labels: s, i, e0, e1, e2, retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
							RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"rule i",i!=null?i.getTree():null);
							RewriteRuleSubtreeStream stream_e0=new RewriteRuleSubtreeStream(adaptor,"rule e0",e0!=null?e0.getTree():null);
							RewriteRuleSubtreeStream stream_e1=new RewriteRuleSubtreeStream(adaptor,"rule e1",e1!=null?e1.getTree():null);
							RewriteRuleSubtreeStream stream_e2=new RewriteRuleSubtreeStream(adaptor,"rule e2",e2!=null?e2.getTree():null);
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1575:6: -> ^( FOR $e0 $e1 $e2 $s $i)
							{
								// CivlCParser.g:1575:9: ^( FOR $e0 $e1 $e2 $s $i)
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot(stream_FOR.nextNode(), root_1);
								adaptor.addChild(root_1, stream_e0.nextTree());
								adaptor.addChild(root_1, stream_e1.nextTree());
								adaptor.addChild(root_1, stream_e2.nextTree());
								adaptor.addChild(root_1, stream_s.nextTree());
								adaptor.addChild(root_1, stream_i.nextTree());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 4 :
					// CivlCParser.g:1577:4: (f= CIVLFOR |f= PARFOR ) LPAREN t= typeName_opt v= identifierList COLON e= expression RPAREN i= invariant_opt s= statementWithScope
					{
					// CivlCParser.g:1577:4: (f= CIVLFOR |f= PARFOR )
					int alt121=2;
					int LA121_0 = input.LA(1);
					if ( (LA121_0==CIVLFOR) ) {
						alt121=1;
					}
					else if ( (LA121_0==PARFOR) ) {
						alt121=2;
					}

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

					switch (alt121) {
						case 1 :
							// CivlCParser.g:1577:5: f= CIVLFOR
							{
							f=(Token)match(input,CIVLFOR,FOLLOW_CIVLFOR_in_iterationStatement10042); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_CIVLFOR.add(f);

							}
							break;
						case 2 :
							// CivlCParser.g:1577:17: f= PARFOR
							{
							f=(Token)match(input,PARFOR,FOLLOW_PARFOR_in_iterationStatement10048); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_PARFOR.add(f);

							}
							break;

					}

					LPAREN489=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_iterationStatement10051); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN489);

					pushFollow(FOLLOW_typeName_opt_in_iterationStatement10060);
					t=typeName_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_typeName_opt.add(t.getTree());
					pushFollow(FOLLOW_identifierList_in_iterationStatement10064);
					v=identifierList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_identifierList.add(v.getTree());
					COLON490=(Token)match(input,COLON,FOLLOW_COLON_in_iterationStatement10066); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_COLON.add(COLON490);

					pushFollow(FOLLOW_expression_in_iterationStatement10070);
					e=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(e.getTree());
					RPAREN491=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_iterationStatement10072); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN491);

					pushFollow(FOLLOW_invariant_opt_in_iterationStatement10081);
					i=invariant_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_invariant_opt.add(i.getTree());
					pushFollow(FOLLOW_statementWithScope_in_iterationStatement10085);
					s=statementWithScope();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
					// AST REWRITE
					// elements: e, i, t, f, s, v
					// token labels: f
					// rule labels: s, t, e, v, i, retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleTokenStream stream_f=new RewriteRuleTokenStream(adaptor,"token f",f);
					RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
					RewriteRuleSubtreeStream stream_t=new RewriteRuleSubtreeStream(adaptor,"rule t",t!=null?t.getTree():null);
					RewriteRuleSubtreeStream stream_e=new RewriteRuleSubtreeStream(adaptor,"rule e",e!=null?e.getTree():null);
					RewriteRuleSubtreeStream stream_v=new RewriteRuleSubtreeStream(adaptor,"rule v",v!=null?v.getTree():null);
					RewriteRuleSubtreeStream stream_i=new RewriteRuleSubtreeStream(adaptor,"rule i",i!=null?i.getTree():null);
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1580:6: -> ^( $f $t $v $e $s $i)
					{
						// CivlCParser.g:1580:9: ^( $f $t $v $e $s $i)
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_f.nextNode(), root_1);
						adaptor.addChild(root_1, stream_t.nextTree());
						adaptor.addChild(root_1, stream_v.nextTree());
						adaptor.addChild(root_1, stream_e.nextTree());
						adaptor.addChild(root_1, stream_s.nextTree());
						adaptor.addChild(root_1, stream_i.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "iterationStatement"


	public static class expression_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "expression_opt"
	// CivlCParser.g:1583:1: expression_opt : ( expression | -> ABSENT );
	public final CivlCParser.expression_opt_return expression_opt() throws RecognitionException {
		CivlCParser.expression_opt_return retval = new CivlCParser.expression_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope expression492 =null;


		try {
			// CivlCParser.g:1584:2: ( expression | -> ABSENT )
			int alt123=2;
			int LA123_0 = input.LA(1);
			if ( (LA123_0==AMPERSAND||LA123_0==CHARACTER_CONSTANT||LA123_0==ELLIPSIS||LA123_0==FLOATING_CONSTANT||LA123_0==IDENTIFIER||LA123_0==INTEGER_CONSTANT||LA123_0==LPAREN||LA123_0==MINUSMINUS||LA123_0==NOT||LA123_0==PLUS||LA123_0==PLUSPLUS||LA123_0==STAR||(LA123_0 >= STRING_LITERAL && LA123_0 <= SUB)||LA123_0==TILDE||LA123_0==ALIGNOF||LA123_0==BIG_O||LA123_0==CALLS||LA123_0==DERIV||LA123_0==EXISTS||(LA123_0 >= FORALL && LA123_0 <= GENERIC)||LA123_0==HERE||LA123_0==PROCNULL||LA123_0==RESULT||(LA123_0 >= SCOPEOF && LA123_0 <= SELF)||(LA123_0 >= SIZEOF && LA123_0 <= SPAWN)||LA123_0==STATE_NULL||LA123_0==UNIFORM||LA123_0==VALUE_AT) ) {
				alt123=1;
			}
			else if ( (LA123_0==RPAREN||LA123_0==SEMI) ) {
				alt123=2;
			}

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

			switch (alt123) {
				case 1 :
					// CivlCParser.g:1584:4: expression
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_expression_in_expression_opt10123);
					expression492=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, expression492.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1585:4: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1585:4: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "expression_opt"


	public static class invariant_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "invariant_opt"
	// CivlCParser.g:1588:1: invariant_opt : ( -> ABSENT | INVARIANT LPAREN expression RPAREN -> ^( INVARIANT expression ) );
	public final CivlCParser.invariant_opt_return invariant_opt() throws RecognitionException {
		CivlCParser.invariant_opt_return retval = new CivlCParser.invariant_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token INVARIANT493=null;
		Token LPAREN494=null;
		Token RPAREN496=null;
		ParserRuleReturnScope expression495 =null;

		Object INVARIANT493_tree=null;
		Object LPAREN494_tree=null;
		Object RPAREN496_tree=null;
		RewriteRuleTokenStream stream_INVARIANT=new RewriteRuleTokenStream(adaptor,"token INVARIANT");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// CivlCParser.g:1589:2: ( -> ABSENT | INVARIANT LPAREN expression RPAREN -> ^( INVARIANT expression ) )
			int alt124=2;
			int LA124_0 = input.LA(1);
			if ( (LA124_0==AMPERSAND||LA124_0==CHARACTER_CONSTANT||LA124_0==ELLIPSIS||LA124_0==FLOATING_CONSTANT||(LA124_0 >= IDENTIFIER && LA124_0 <= IF)||LA124_0==INTEGER_CONSTANT||LA124_0==LCURLY||LA124_0==LPAREN||LA124_0==MINUSMINUS||LA124_0==NOT||LA124_0==PLUS||LA124_0==PLUSPLUS||LA124_0==SEMI||LA124_0==STAR||(LA124_0 >= STRING_LITERAL && LA124_0 <= SUB)||LA124_0==TILDE||(LA124_0 >= ALIGNOF && LA124_0 <= ASM)||LA124_0==BIG_O||(LA124_0 >= BREAK && LA124_0 <= CASE)||(LA124_0 >= CHOOSE && LA124_0 <= CIVLFOR)||(LA124_0 >= CONTINUE && LA124_0 <= DEFAULT)||LA124_0==DERIV||LA124_0==DO||LA124_0==EXISTS||(LA124_0 >= FOR && LA124_0 <= GENERIC)||LA124_0==GOTO||LA124_0==HERE||LA124_0==PARFOR||(LA124_0 >= PPRAGMA && LA124_0 <= PROCNULL)||(LA124_0 >= RESULT && LA124_0 <= SELF)||(LA124_0 >= SIZEOF && LA124_0 <= SPAWN)||LA124_0==STATE_NULL||LA124_0==SWITCH||LA124_0==UNIFORM||(LA124_0 >= UPDATE && LA124_0 <= VALUE_AT)||(LA124_0 >= WHEN && LA124_0 <= WITH)) ) {
				alt124=1;
			}
			else if ( (LA124_0==INVARIANT) ) {
				alt124=2;
			}

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

			switch (alt124) {
				case 1 :
					// CivlCParser.g:1589:4: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1589:4: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1590:4: INVARIANT LPAREN expression RPAREN
					{
					INVARIANT493=(Token)match(input,INVARIANT,FOLLOW_INVARIANT_in_invariant_opt10148); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INVARIANT.add(INVARIANT493);

					LPAREN494=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_invariant_opt10150); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN494);

					pushFollow(FOLLOW_expression_in_invariant_opt10152);
					expression495=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression495.getTree());
					RPAREN496=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_invariant_opt10154); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN496);

					// AST REWRITE
					// elements: INVARIANT, expression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1591:3: -> ^( INVARIANT expression )
					{
						// CivlCParser.g:1591:6: ^( INVARIANT expression )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_INVARIANT.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "invariant_opt"


	public static class typeName_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "typeName_opt"
	// CivlCParser.g:1594:1: typeName_opt : ( typeName | -> ABSENT );
	public final CivlCParser.typeName_opt_return typeName_opt() throws RecognitionException {
		CivlCParser.typeName_opt_return retval = new CivlCParser.typeName_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope typeName497 =null;


		try {
			// CivlCParser.g:1595:2: ( typeName | -> ABSENT )
			int alt125=2;
			int LA125_0 = input.LA(1);
			if ( (LA125_0==ATOMIC||LA125_0==BOOL||LA125_0==CHAR||(LA125_0 >= COMPLEX && LA125_0 <= CONST)||(LA125_0 >= DOMAIN && LA125_0 <= DOUBLE)||LA125_0==ENUM||LA125_0==FLOAT||(LA125_0 >= INPUT && LA125_0 <= INT)||(LA125_0 >= LONG && LA125_0 <= MEM_TYPE)||LA125_0==OUTPUT||LA125_0==RANGE||LA125_0==REAL||LA125_0==RESTRICT||(LA125_0 >= SHORT && LA125_0 <= SIGNED)||LA125_0==STRUCT||LA125_0==TYPEOF||(LA125_0 >= UNION && LA125_0 <= UNSIGNED)||(LA125_0 >= VOID && LA125_0 <= VOLATILE)) ) {
				alt125=1;
			}
			else if ( (LA125_0==IDENTIFIER) ) {
				int LA125_2 = input.LA(2);
				if ( (LA125_2==IDENTIFIER||LA125_2==LPAREN||LA125_2==LSQUARE||LA125_2==STAR||LA125_2==ATOMIC||LA125_2==BOOL||LA125_2==CHAR||(LA125_2 >= COMPLEX && LA125_2 <= CONST)||(LA125_2 >= DOMAIN && LA125_2 <= DOUBLE)||LA125_2==ENUM||LA125_2==FLOAT||(LA125_2 >= INPUT && LA125_2 <= INT)||(LA125_2 >= LONG && LA125_2 <= MEM_TYPE)||LA125_2==OUTPUT||LA125_2==RANGE||LA125_2==REAL||LA125_2==RESTRICT||(LA125_2 >= SHORT && LA125_2 <= SIGNED)||LA125_2==STRUCT||LA125_2==TYPEOF||(LA125_2 >= UNION && LA125_2 <= UNSIGNED)||(LA125_2 >= VOID && LA125_2 <= VOLATILE)) ) {
					alt125=1;
				}
				else if ( ((LA125_2 >= COLON && LA125_2 <= COMMA)) ) {
					alt125=2;
				}

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

			}

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

			switch (alt125) {
				case 1 :
					// CivlCParser.g:1595:4: typeName
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_typeName_in_typeName_opt10175);
					typeName497=typeName();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, typeName497.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1596:4: 
					{
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1596:4: -> ABSENT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(ABSENT, "ABSENT"));
					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "typeName_opt"


	public static class jumpStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "jumpStatement"
	// CivlCParser.g:1616:1: jumpStatement : ( GOTO IDENTIFIER SEMI -> ^( GOTO IDENTIFIER SEMI ) | CONTINUE SEMI -> ^( CONTINUE SEMI ) | BREAK SEMI -> ^( BREAK SEMI ) | RETURN expression_opt SEMI -> ^( RETURN expression_opt SEMI ) );
	public final CivlCParser.jumpStatement_return jumpStatement() throws RecognitionException {
		CivlCParser.jumpStatement_return retval = new CivlCParser.jumpStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token GOTO498=null;
		Token IDENTIFIER499=null;
		Token SEMI500=null;
		Token CONTINUE501=null;
		Token SEMI502=null;
		Token BREAK503=null;
		Token SEMI504=null;
		Token RETURN505=null;
		Token SEMI507=null;
		ParserRuleReturnScope expression_opt506 =null;

		Object GOTO498_tree=null;
		Object IDENTIFIER499_tree=null;
		Object SEMI500_tree=null;
		Object CONTINUE501_tree=null;
		Object SEMI502_tree=null;
		Object BREAK503_tree=null;
		Object SEMI504_tree=null;
		Object RETURN505_tree=null;
		Object SEMI507_tree=null;
		RewriteRuleTokenStream stream_CONTINUE=new RewriteRuleTokenStream(adaptor,"token CONTINUE");
		RewriteRuleTokenStream stream_RETURN=new RewriteRuleTokenStream(adaptor,"token RETURN");
		RewriteRuleTokenStream stream_GOTO=new RewriteRuleTokenStream(adaptor,"token GOTO");
		RewriteRuleTokenStream stream_BREAK=new RewriteRuleTokenStream(adaptor,"token BREAK");
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleSubtreeStream stream_expression_opt=new RewriteRuleSubtreeStream(adaptor,"rule expression_opt");

		try {
			// CivlCParser.g:1617:5: ( GOTO IDENTIFIER SEMI -> ^( GOTO IDENTIFIER SEMI ) | CONTINUE SEMI -> ^( CONTINUE SEMI ) | BREAK SEMI -> ^( BREAK SEMI ) | RETURN expression_opt SEMI -> ^( RETURN expression_opt SEMI ) )
			int alt126=4;
			switch ( input.LA(1) ) {
			case GOTO:
				{
				alt126=1;
				}
				break;
			case CONTINUE:
				{
				alt126=2;
				}
				break;
			case BREAK:
				{
				alt126=3;
				}
				break;
			case RETURN:
				{
				alt126=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 126, 0, input);
				throw nvae;
			}
			switch (alt126) {
				case 1 :
					// CivlCParser.g:1617:7: GOTO IDENTIFIER SEMI
					{
					GOTO498=(Token)match(input,GOTO,FOLLOW_GOTO_in_jumpStatement10198); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO498);

					IDENTIFIER499=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_jumpStatement10200); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER499);

					SEMI500=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10202); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI500);

					// AST REWRITE
					// elements: GOTO, IDENTIFIER, SEMI
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1617:28: -> ^( GOTO IDENTIFIER SEMI )
					{
						// CivlCParser.g:1617:31: ^( GOTO IDENTIFIER SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_GOTO.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1618:7: CONTINUE SEMI
					{
					CONTINUE501=(Token)match(input,CONTINUE,FOLLOW_CONTINUE_in_jumpStatement10220); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_CONTINUE.add(CONTINUE501);

					SEMI502=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10222); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI502);

					// AST REWRITE
					// elements: SEMI, CONTINUE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1618:21: -> ^( CONTINUE SEMI )
					{
						// CivlCParser.g:1618:24: ^( CONTINUE SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_CONTINUE.nextNode(), root_1);
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1619:7: BREAK SEMI
					{
					BREAK503=(Token)match(input,BREAK,FOLLOW_BREAK_in_jumpStatement10238); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_BREAK.add(BREAK503);

					SEMI504=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10240); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI504);

					// AST REWRITE
					// elements: BREAK, SEMI
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1619:18: -> ^( BREAK SEMI )
					{
						// CivlCParser.g:1619:21: ^( BREAK SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_BREAK.nextNode(), root_1);
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:1620:7: RETURN expression_opt SEMI
					{
					RETURN505=(Token)match(input,RETURN,FOLLOW_RETURN_in_jumpStatement10256); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RETURN.add(RETURN505);

					pushFollow(FOLLOW_expression_opt_in_jumpStatement10258);
					expression_opt506=expression_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression_opt.add(expression_opt506.getTree());
					SEMI507=(Token)match(input,SEMI,FOLLOW_SEMI_in_jumpStatement10260); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_SEMI.add(SEMI507);

					// AST REWRITE
					// elements: expression_opt, RETURN, SEMI
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1620:34: -> ^( RETURN expression_opt SEMI )
					{
						// CivlCParser.g:1620:37: ^( RETURN expression_opt SEMI )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_RETURN.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression_opt.nextTree());
						adaptor.addChild(root_1, stream_SEMI.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "jumpStatement"


	public static class pragma_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "pragma"
	// CivlCParser.g:1633:1: pragma : ( PPRAGMA IDENTIFIER NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE ) | PPRAGMA IDENTIFIER inlineList NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE ) );
	public final CivlCParser.pragma_return pragma() throws RecognitionException {
		CivlCParser.pragma_return retval = new CivlCParser.pragma_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token PPRAGMA508=null;
		Token IDENTIFIER509=null;
		Token NEWLINE510=null;
		Token PPRAGMA511=null;
		Token IDENTIFIER512=null;
		Token NEWLINE514=null;
		ParserRuleReturnScope inlineList513 =null;

		Object PPRAGMA508_tree=null;
		Object IDENTIFIER509_tree=null;
		Object NEWLINE510_tree=null;
		Object PPRAGMA511_tree=null;
		Object IDENTIFIER512_tree=null;
		Object NEWLINE514_tree=null;
		RewriteRuleTokenStream stream_PPRAGMA=new RewriteRuleTokenStream(adaptor,"token PPRAGMA");
		RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
		RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
		RewriteRuleSubtreeStream stream_inlineList=new RewriteRuleSubtreeStream(adaptor,"rule inlineList");

		try {
			// CivlCParser.g:1634:5: ( PPRAGMA IDENTIFIER NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE ) | PPRAGMA IDENTIFIER inlineList NEWLINE -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE ) )
			int alt127=2;
			int LA127_0 = input.LA(1);
			if ( (LA127_0==PPRAGMA) ) {
				int LA127_1 = input.LA(2);
				if ( (LA127_1==IDENTIFIER) ) {
					int LA127_2 = input.LA(3);
					if ( (LA127_2==NEWLINE) ) {
						alt127=1;
					}
					else if ( ((LA127_2 >= AMPERSAND && LA127_2 <= NEQ)||(LA127_2 >= NOT && LA127_2 <= TYPE_QUALIFIER_LIST)) ) {
						alt127=2;
					}

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

				}

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

			}

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

			switch (alt127) {
				case 1 :
					// CivlCParser.g:1634:7: PPRAGMA IDENTIFIER NEWLINE
					{
					PPRAGMA508=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma10289); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA508);

					IDENTIFIER509=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_pragma10291); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER509);

					NEWLINE510=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma10293); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE510);

					// AST REWRITE
					// elements: PPRAGMA, NEWLINE, IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1635:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE )
					{
						// CivlCParser.g:1635:12: ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST ) NEWLINE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_PPRAGMA.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						// CivlCParser.g:1635:33: ^( TOKEN_LIST )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_NEWLINE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1636:7: PPRAGMA IDENTIFIER inlineList NEWLINE
					{
					PPRAGMA511=(Token)match(input,PPRAGMA,FOLLOW_PPRAGMA_in_pragma10323); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_PPRAGMA.add(PPRAGMA511);

					IDENTIFIER512=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_pragma10325); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER512);

					pushFollow(FOLLOW_inlineList_in_pragma10327);
					inlineList513=inlineList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_inlineList.add(inlineList513.getTree());
					NEWLINE514=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_pragma10329); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE514);

					// AST REWRITE
					// elements: inlineList, NEWLINE, PPRAGMA, IDENTIFIER
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1637:9: -> ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE )
					{
						// CivlCParser.g:1637:12: ^( PPRAGMA IDENTIFIER ^( TOKEN_LIST inlineList ) NEWLINE )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_PPRAGMA.nextNode(), root_1);
						adaptor.addChild(root_1, stream_IDENTIFIER.nextNode());
						// CivlCParser.g:1637:33: ^( TOKEN_LIST inlineList )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
						adaptor.addChild(root_2, stream_inlineList.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_NEWLINE.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "pragma"


	public static class inlineList_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "inlineList"
	// CivlCParser.g:1641:1: inlineList : (~ NEWLINE )+ ;
	public final CivlCParser.inlineList_return inlineList() throws RecognitionException {
		CivlCParser.inlineList_return retval = new CivlCParser.inlineList_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set515=null;

		Object set515_tree=null;

		try {
			// CivlCParser.g:1641:12: ( (~ NEWLINE )+ )
			// CivlCParser.g:1641:14: (~ NEWLINE )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1641:14: (~ NEWLINE )+
			int cnt128=0;
			loop128:
			while (true) {
				int alt128=2;
				int LA128_0 = input.LA(1);
				if ( ((LA128_0 >= AMPERSAND && LA128_0 <= NEQ)||(LA128_0 >= NOT && LA128_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt128=1;
				}

				switch (alt128) {
				case 1 :
					// CivlCParser.g:
					{
					set515=input.LT(1);
					if ( (input.LA(1) >= AMPERSAND && input.LA(1) <= NEQ)||(input.LA(1) >= NOT && input.LA(1) <= TYPE_QUALIFIER_LIST) ) {
						input.consume();
						if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set515));
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

				default :
					if ( cnt128 >= 1 ) break loop128;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(128, input);
					throw eee;
				}
				cnt128++;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "inlineList"


	public static class annotation_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "annotation"
	// CivlCParser.g:1651:1: annotation : ( INLINE_ANNOTATION_START ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) ) | ANNOTATION_START ANNOTATION_END -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END ) | ANNOTATION_START annotationBody ANNOTATION_END -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END ) );
	public final CivlCParser.annotation_return annotation() throws RecognitionException {
		CivlCParser.annotation_return retval = new CivlCParser.annotation_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token INLINE_ANNOTATION_START516=null;
		Token NEWLINE517=null;
		Token NEWLINE519=null;
		Token ANNOTATION_START520=null;
		Token ANNOTATION_END521=null;
		Token ANNOTATION_START522=null;
		Token ANNOTATION_END524=null;
		ParserRuleReturnScope inlineList518 =null;
		ParserRuleReturnScope annotationBody523 =null;

		Object INLINE_ANNOTATION_START516_tree=null;
		Object NEWLINE517_tree=null;
		Object NEWLINE519_tree=null;
		Object ANNOTATION_START520_tree=null;
		Object ANNOTATION_END521_tree=null;
		Object ANNOTATION_START522_tree=null;
		Object ANNOTATION_END524_tree=null;
		RewriteRuleTokenStream stream_ANNOTATION_END=new RewriteRuleTokenStream(adaptor,"token ANNOTATION_END");
		RewriteRuleTokenStream stream_ANNOTATION_START=new RewriteRuleTokenStream(adaptor,"token ANNOTATION_START");
		RewriteRuleTokenStream stream_INLINE_ANNOTATION_START=new RewriteRuleTokenStream(adaptor,"token INLINE_ANNOTATION_START");
		RewriteRuleTokenStream stream_NEWLINE=new RewriteRuleTokenStream(adaptor,"token NEWLINE");
		RewriteRuleSubtreeStream stream_annotationBody=new RewriteRuleSubtreeStream(adaptor,"rule annotationBody");
		RewriteRuleSubtreeStream stream_inlineList=new RewriteRuleSubtreeStream(adaptor,"rule inlineList");

		try {
			// CivlCParser.g:1652:3: ( INLINE_ANNOTATION_START ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) ) | ANNOTATION_START ANNOTATION_END -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END ) | ANNOTATION_START annotationBody ANNOTATION_END -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END ) )
			int alt130=3;
			int LA130_0 = input.LA(1);
			if ( (LA130_0==INLINE_ANNOTATION_START) ) {
				alt130=1;
			}
			else if ( (LA130_0==ANNOTATION_START) ) {
				int LA130_2 = input.LA(2);
				if ( (LA130_2==ANNOTATION_END) ) {
					alt130=2;
				}
				else if ( ((LA130_2 >= AMPERSAND && LA130_2 <= AND)||(LA130_2 >= ANNOTATION_START && LA130_2 <= TYPE_QUALIFIER_LIST)) ) {
					alt130=3;
				}

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

			}

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

			switch (alt130) {
				case 1 :
					// CivlCParser.g:1652:6: INLINE_ANNOTATION_START ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					{
					INLINE_ANNOTATION_START516=(Token)match(input,INLINE_ANNOTATION_START,FOLLOW_INLINE_ANNOTATION_START_in_annotation10386); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_INLINE_ANNOTATION_START.add(INLINE_ANNOTATION_START516);

					// CivlCParser.g:1653:6: ( NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE ) | inlineList NEWLINE -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE ) )
					int alt129=2;
					int LA129_0 = input.LA(1);
					if ( (LA129_0==NEWLINE) ) {
						alt129=1;
					}
					else if ( ((LA129_0 >= AMPERSAND && LA129_0 <= NEQ)||(LA129_0 >= NOT && LA129_0 <= TYPE_QUALIFIER_LIST)) ) {
						alt129=2;
					}

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

					switch (alt129) {
						case 1 :
							// CivlCParser.g:1653:8: NEWLINE
							{
							NEWLINE517=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation10395); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE517);

							// AST REWRITE
							// elements: NEWLINE, INLINE_ANNOTATION_START
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1654:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE )
							{
								// CivlCParser.g:1654:11: ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST ) NEWLINE )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ANNOTATION, "ANNOTATION"), root_1);
								adaptor.addChild(root_1, stream_INLINE_ANNOTATION_START.nextNode());
								// CivlCParser.g:1654:48: ^( TOKEN_LIST )
								{
								Object root_2 = (Object)adaptor.nil();
								root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
								adaptor.addChild(root_1, root_2);
								}

								adaptor.addChild(root_1, stream_NEWLINE.nextNode());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;
						case 2 :
							// CivlCParser.g:1655:8: inlineList NEWLINE
							{
							pushFollow(FOLLOW_inlineList_in_annotation10425);
							inlineList518=inlineList();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_inlineList.add(inlineList518.getTree());
							NEWLINE519=(Token)match(input,NEWLINE,FOLLOW_NEWLINE_in_annotation10427); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_NEWLINE.add(NEWLINE519);

							// AST REWRITE
							// elements: NEWLINE, INLINE_ANNOTATION_START, inlineList
							// token labels: 
							// rule labels: retval
							// token list labels: 
							// rule list labels: 
							// wildcard labels: 
							if ( state.backtracking==0 ) {
							retval.tree = root_0;
							RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

							root_0 = (Object)adaptor.nil();
							// 1656:8: -> ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE )
							{
								// CivlCParser.g:1656:11: ^( ANNOTATION INLINE_ANNOTATION_START ^( TOKEN_LIST inlineList ) NEWLINE )
								{
								Object root_1 = (Object)adaptor.nil();
								root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ANNOTATION, "ANNOTATION"), root_1);
								adaptor.addChild(root_1, stream_INLINE_ANNOTATION_START.nextNode());
								// CivlCParser.g:1656:48: ^( TOKEN_LIST inlineList )
								{
								Object root_2 = (Object)adaptor.nil();
								root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
								adaptor.addChild(root_2, stream_inlineList.nextTree());
								adaptor.addChild(root_1, root_2);
								}

								adaptor.addChild(root_1, stream_NEWLINE.nextNode());
								adaptor.addChild(root_0, root_1);
								}

							}


							retval.tree = root_0;
							}

							}
							break;

					}

					}
					break;
				case 2 :
					// CivlCParser.g:1658:6: ANNOTATION_START ANNOTATION_END
					{
					ANNOTATION_START520=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation10464); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START520);

					ANNOTATION_END521=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation10466); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END521);

					// AST REWRITE
					// elements: ANNOTATION_END, ANNOTATION_START
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1659:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END )
					{
						// CivlCParser.g:1659:11: ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST ) ANNOTATION_END )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ANNOTATION, "ANNOTATION"), root_1);
						adaptor.addChild(root_1, stream_ANNOTATION_START.nextNode());
						// CivlCParser.g:1659:41: ^( TOKEN_LIST )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_ANNOTATION_END.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1660:6: ANNOTATION_START annotationBody ANNOTATION_END
					{
					ANNOTATION_START522=(Token)match(input,ANNOTATION_START,FOLLOW_ANNOTATION_START_in_annotation10494); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_START.add(ANNOTATION_START522);

					pushFollow(FOLLOW_annotationBody_in_annotation10496);
					annotationBody523=annotationBody();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_annotationBody.add(annotationBody523.getTree());
					ANNOTATION_END524=(Token)match(input,ANNOTATION_END,FOLLOW_ANNOTATION_END_in_annotation10498); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ANNOTATION_END.add(ANNOTATION_END524);

					// AST REWRITE
					// elements: ANNOTATION_START, ANNOTATION_END, annotationBody
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1661:8: -> ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END )
					{
						// CivlCParser.g:1661:11: ^( ANNOTATION ANNOTATION_START ^( TOKEN_LIST annotationBody ) ANNOTATION_END )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ANNOTATION, "ANNOTATION"), root_1);
						adaptor.addChild(root_1, stream_ANNOTATION_START.nextNode());
						// CivlCParser.g:1661:41: ^( TOKEN_LIST annotationBody )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
						adaptor.addChild(root_2, stream_annotationBody.nextTree());
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_ANNOTATION_END.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "annotation"


	public static class annotationBody_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "annotationBody"
	// CivlCParser.g:1664:1: annotationBody : (~ ANNOTATION_END )+ ;
	public final CivlCParser.annotationBody_return annotationBody() throws RecognitionException {
		CivlCParser.annotationBody_return retval = new CivlCParser.annotationBody_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set525=null;

		Object set525_tree=null;

		try {
			// CivlCParser.g:1664:16: ( (~ ANNOTATION_END )+ )
			// CivlCParser.g:1664:18: (~ ANNOTATION_END )+
			{
			root_0 = (Object)adaptor.nil();


			// CivlCParser.g:1664:18: (~ ANNOTATION_END )+
			int cnt131=0;
			loop131:
			while (true) {
				int alt131=2;
				int LA131_0 = input.LA(1);
				if ( ((LA131_0 >= AMPERSAND && LA131_0 <= AND)||(LA131_0 >= ANNOTATION_START && LA131_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt131=1;
				}

				switch (alt131) {
				case 1 :
					// CivlCParser.g:
					{
					set525=input.LT(1);
					if ( (input.LA(1) >= AMPERSAND && input.LA(1) <= AND)||(input.LA(1) >= ANNOTATION_START && input.LA(1) <= TYPE_QUALIFIER_LIST) ) {
						input.consume();
						if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set525));
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;

				default :
					if ( cnt131 >= 1 ) break loop131;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(131, input);
					throw eee;
				}
				cnt131++;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "annotationBody"


	public static class runStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "runStatement"
	// CivlCParser.g:1674:1: runStatement : RUN statement -> ^( RUN statement ) ;
	public final CivlCParser.runStatement_return runStatement() throws RecognitionException {
		CivlCParser.runStatement_return retval = new CivlCParser.runStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token RUN526=null;
		ParserRuleReturnScope statement527 =null;

		Object RUN526_tree=null;
		RewriteRuleTokenStream stream_RUN=new RewriteRuleTokenStream(adaptor,"token RUN");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1675:6: ( RUN statement -> ^( RUN statement ) )
			// CivlCParser.g:1675:8: RUN statement
			{
			RUN526=(Token)match(input,RUN,FOLLOW_RUN_in_runStatement10554); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RUN.add(RUN526);

			pushFollow(FOLLOW_statement_in_runStatement10556);
			statement527=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement527.getTree());
			// AST REWRITE
			// elements: statement, RUN
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1675:22: -> ^( RUN statement )
			{
				// CivlCParser.g:1675:25: ^( RUN statement )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_RUN.nextNode(), root_1);
				adaptor.addChild(root_1, stream_statement.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "runStatement"


	public static class withStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "withStatement"
	// CivlCParser.g:1681:1: withStatement : WITH LPAREN assignmentExpression RPAREN statement -> ^( WITH assignmentExpression statement ) ;
	public final CivlCParser.withStatement_return withStatement() throws RecognitionException {
		CivlCParser.withStatement_return retval = new CivlCParser.withStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token WITH528=null;
		Token LPAREN529=null;
		Token RPAREN531=null;
		ParserRuleReturnScope assignmentExpression530 =null;
		ParserRuleReturnScope statement532 =null;

		Object WITH528_tree=null;
		Object LPAREN529_tree=null;
		Object RPAREN531_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleTokenStream stream_WITH=new RewriteRuleTokenStream(adaptor,"token WITH");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");

		try {
			// CivlCParser.g:1682:2: ( WITH LPAREN assignmentExpression RPAREN statement -> ^( WITH assignmentExpression statement ) )
			// CivlCParser.g:1682:4: WITH LPAREN assignmentExpression RPAREN statement
			{
			WITH528=(Token)match(input,WITH,FOLLOW_WITH_in_withStatement10580); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_WITH.add(WITH528);

			LPAREN529=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_withStatement10582); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN529);

			pushFollow(FOLLOW_assignmentExpression_in_withStatement10584);
			assignmentExpression530=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression530.getTree());
			RPAREN531=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_withStatement10586); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN531);

			pushFollow(FOLLOW_statement_in_withStatement10588);
			statement532=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement532.getTree());
			// AST REWRITE
			// elements: assignmentExpression, WITH, statement
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1683:13: -> ^( WITH assignmentExpression statement )
			{
				// CivlCParser.g:1683:16: ^( WITH assignmentExpression statement )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_WITH.nextNode(), root_1);
				adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
				adaptor.addChild(root_1, stream_statement.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "withStatement"


	public static class updateStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "updateStatement"
	// CivlCParser.g:1686:1: updateStatement : UPDATE LPAREN assignmentExpression RPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN SEMI -> ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) ) ;
	public final CivlCParser.updateStatement_return updateStatement() throws RecognitionException {
		CivlCParser.updateStatement_return retval = new CivlCParser.updateStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token UPDATE533=null;
		Token LPAREN534=null;
		Token RPAREN536=null;
		Token LPAREN538=null;
		Token RPAREN540=null;
		Token SEMI541=null;
		ParserRuleReturnScope assignmentExpression535 =null;
		ParserRuleReturnScope postfixExpressionRoot537 =null;
		ParserRuleReturnScope argumentExpressionList539 =null;

		Object UPDATE533_tree=null;
		Object LPAREN534_tree=null;
		Object RPAREN536_tree=null;
		Object LPAREN538_tree=null;
		Object RPAREN540_tree=null;
		Object SEMI541_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleTokenStream stream_UPDATE=new RewriteRuleTokenStream(adaptor,"token UPDATE");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");
		RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
		RewriteRuleSubtreeStream stream_postfixExpressionRoot=new RewriteRuleSubtreeStream(adaptor,"rule postfixExpressionRoot");

		try {
			// CivlCParser.g:1687:2: ( UPDATE LPAREN assignmentExpression RPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN SEMI -> ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) ) )
			// CivlCParser.g:1687:4: UPDATE LPAREN assignmentExpression RPAREN postfixExpressionRoot LPAREN argumentExpressionList RPAREN SEMI
			{
			UPDATE533=(Token)match(input,UPDATE,FOLLOW_UPDATE_in_updateStatement10621); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_UPDATE.add(UPDATE533);

			LPAREN534=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_updateStatement10623); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN534);

			pushFollow(FOLLOW_assignmentExpression_in_updateStatement10625);
			assignmentExpression535=assignmentExpression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_assignmentExpression.add(assignmentExpression535.getTree());
			RPAREN536=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_updateStatement10627); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN536);

			pushFollow(FOLLOW_postfixExpressionRoot_in_updateStatement10632);
			postfixExpressionRoot537=postfixExpressionRoot();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_postfixExpressionRoot.add(postfixExpressionRoot537.getTree());
			LPAREN538=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_updateStatement10634); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN538);

			pushFollow(FOLLOW_argumentExpressionList_in_updateStatement10636);
			argumentExpressionList539=argumentExpressionList();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList539.getTree());
			RPAREN540=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_updateStatement10638); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN540);

			SEMI541=(Token)match(input,SEMI,FOLLOW_SEMI_in_updateStatement10640); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI541);

			// AST REWRITE
			// elements: UPDATE, RPAREN, argumentExpressionList, assignmentExpression, postfixExpressionRoot
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1689:4: -> ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
			{
				// CivlCParser.g:1689:7: ^( UPDATE assignmentExpression ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN ) )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_UPDATE.nextNode(), root_1);
				adaptor.addChild(root_1, stream_assignmentExpression.nextTree());
				// CivlCParser.g:1690:5: ^( CALL ABSENT postfixExpressionRoot ABSENT argumentExpressionList RPAREN )
				{
				Object root_2 = (Object)adaptor.nil();
				root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(CALL, "CALL"), root_2);
				adaptor.addChild(root_2, (Object)adaptor.create(ABSENT, "ABSENT"));
				adaptor.addChild(root_2, stream_postfixExpressionRoot.nextTree());
				adaptor.addChild(root_2, (Object)adaptor.create(ABSENT, "ABSENT"));
				adaptor.addChild(root_2, stream_argumentExpressionList.nextTree());
				adaptor.addChild(root_2, stream_RPAREN.nextNode());
				adaptor.addChild(root_1, root_2);
				}

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "updateStatement"


	public static class balancedToken_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "balancedToken"
	// CivlCParser.g:1694:1: balancedToken : (~ ( LPAREN | RPAREN ) | LPAREN ( balancedToken )* RPAREN );
	public final CivlCParser.balancedToken_return balancedToken() throws RecognitionException {
		CivlCParser.balancedToken_return retval = new CivlCParser.balancedToken_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set542=null;
		Token LPAREN543=null;
		Token RPAREN545=null;
		ParserRuleReturnScope balancedToken544 =null;

		Object set542_tree=null;
		Object LPAREN543_tree=null;
		Object RPAREN545_tree=null;

		try {
			// CivlCParser.g:1695:2: (~ ( LPAREN | RPAREN ) | LPAREN ( balancedToken )* RPAREN )
			int alt133=2;
			int LA133_0 = input.LA(1);
			if ( ((LA133_0 >= AMPERSAND && LA133_0 <= LINE)||(LA133_0 >= LSLIST && LA133_0 <= REXCON)||(LA133_0 >= RSLIST && LA133_0 <= TYPE_QUALIFIER_LIST)) ) {
				alt133=1;
			}
			else if ( (LA133_0==LPAREN) ) {
				alt133=2;
			}

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

			switch (alt133) {
				case 1 :
					// CivlCParser.g:1695:4: ~ ( LPAREN | RPAREN )
					{
					root_0 = (Object)adaptor.nil();


					set542=input.LT(1);
					if ( (input.LA(1) >= AMPERSAND && input.LA(1) <= LINE)||(input.LA(1) >= LSLIST && input.LA(1) <= REXCON)||(input.LA(1) >= RSLIST && input.LA(1) <= TYPE_QUALIFIER_LIST) ) {
						input.consume();
						if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set542));
						state.errorRecovery=false;
						state.failed=false;
					}
					else {
						if (state.backtracking>0) {state.failed=true; return retval;}
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					}
					break;
				case 2 :
					// CivlCParser.g:1696:4: LPAREN ( balancedToken )* RPAREN
					{
					root_0 = (Object)adaptor.nil();


					LPAREN543=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_balancedToken10700); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					LPAREN543_tree = (Object)adaptor.create(LPAREN543);
					adaptor.addChild(root_0, LPAREN543_tree);
					}

					// CivlCParser.g:1696:11: ( balancedToken )*
					loop132:
					while (true) {
						int alt132=2;
						int LA132_0 = input.LA(1);
						if ( ((LA132_0 >= AMPERSAND && LA132_0 <= REXCON)||(LA132_0 >= RSLIST && LA132_0 <= TYPE_QUALIFIER_LIST)) ) {
							alt132=1;
						}

						switch (alt132) {
						case 1 :
							// CivlCParser.g:1696:11: balancedToken
							{
							pushFollow(FOLLOW_balancedToken_in_balancedToken10702);
							balancedToken544=balancedToken();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) adaptor.addChild(root_0, balancedToken544.getTree());

							}
							break;

						default :
							break loop132;
						}
					}

					RPAREN545=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_balancedToken10705); if (state.failed) return retval;
					if ( state.backtracking==0 ) {
					RPAREN545_tree = (Object)adaptor.create(RPAREN545);
					adaptor.addChild(root_0, RPAREN545_tree);
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "balancedToken"


	public static class asmStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "asmStatement"
	// CivlCParser.g:1699:1: asmStatement : ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) ) ;
	public final CivlCParser.asmStatement_return asmStatement() throws RecognitionException {
		CivlCParser.asmStatement_return retval = new CivlCParser.asmStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ASM546=null;
		Token VOLATILE547=null;
		Token GOTO548=null;
		Token LPAREN549=null;
		Token RPAREN551=null;
		Token SEMI552=null;
		ParserRuleReturnScope balancedToken550 =null;

		Object ASM546_tree=null;
		Object VOLATILE547_tree=null;
		Object GOTO548_tree=null;
		Object LPAREN549_tree=null;
		Object RPAREN551_tree=null;
		Object SEMI552_tree=null;
		RewriteRuleTokenStream stream_VOLATILE=new RewriteRuleTokenStream(adaptor,"token VOLATILE");
		RewriteRuleTokenStream stream_GOTO=new RewriteRuleTokenStream(adaptor,"token GOTO");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_SEMI=new RewriteRuleTokenStream(adaptor,"token SEMI");
		RewriteRuleTokenStream stream_ASM=new RewriteRuleTokenStream(adaptor,"token ASM");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_balancedToken=new RewriteRuleSubtreeStream(adaptor,"rule balancedToken");

		try {
			// CivlCParser.g:1700:2: ( ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) ) )
			// CivlCParser.g:1700:4: ASM ( VOLATILE )? ( GOTO )? LPAREN ( balancedToken )* RPAREN SEMI
			{
			ASM546=(Token)match(input,ASM,FOLLOW_ASM_in_asmStatement10716); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_ASM.add(ASM546);

			// CivlCParser.g:1700:8: ( VOLATILE )?
			int alt134=2;
			int LA134_0 = input.LA(1);
			if ( (LA134_0==VOLATILE) ) {
				alt134=1;
			}
			switch (alt134) {
				case 1 :
					// CivlCParser.g:1700:8: VOLATILE
					{
					VOLATILE547=(Token)match(input,VOLATILE,FOLLOW_VOLATILE_in_asmStatement10718); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_VOLATILE.add(VOLATILE547);

					}
					break;

			}

			// CivlCParser.g:1700:18: ( GOTO )?
			int alt135=2;
			int LA135_0 = input.LA(1);
			if ( (LA135_0==GOTO) ) {
				alt135=1;
			}
			switch (alt135) {
				case 1 :
					// CivlCParser.g:1700:18: GOTO
					{
					GOTO548=(Token)match(input,GOTO,FOLLOW_GOTO_in_asmStatement10721); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GOTO.add(GOTO548);

					}
					break;

			}

			LPAREN549=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_asmStatement10724); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN549);

			// CivlCParser.g:1701:4: ( balancedToken )*
			loop136:
			while (true) {
				int alt136=2;
				int LA136_0 = input.LA(1);
				if ( ((LA136_0 >= AMPERSAND && LA136_0 <= REXCON)||(LA136_0 >= RSLIST && LA136_0 <= TYPE_QUALIFIER_LIST)) ) {
					alt136=1;
				}

				switch (alt136) {
				case 1 :
					// CivlCParser.g:1701:4: balancedToken
					{
					pushFollow(FOLLOW_balancedToken_in_asmStatement10729);
					balancedToken550=balancedToken();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_balancedToken.add(balancedToken550.getTree());
					}
					break;

				default :
					break loop136;
				}
			}

			RPAREN551=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_asmStatement10735); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN551);

			SEMI552=(Token)match(input,SEMI,FOLLOW_SEMI_in_asmStatement10737); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_SEMI.add(SEMI552);

			// AST REWRITE
			// elements: ASM, GOTO, balancedToken, VOLATILE
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1703:4: -> ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) )
			{
				// CivlCParser.g:1703:7: ^( ASM ( VOLATILE )? ( GOTO )? ^( TOKEN_LIST ( balancedToken )* ) )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_ASM.nextNode(), root_1);
				// CivlCParser.g:1703:13: ( VOLATILE )?
				if ( stream_VOLATILE.hasNext() ) {
					adaptor.addChild(root_1, stream_VOLATILE.nextNode());
				}
				stream_VOLATILE.reset();

				// CivlCParser.g:1703:23: ( GOTO )?
				if ( stream_GOTO.hasNext() ) {
					adaptor.addChild(root_1, stream_GOTO.nextNode());
				}
				stream_GOTO.reset();

				// CivlCParser.g:1703:29: ^( TOKEN_LIST ( balancedToken )* )
				{
				Object root_2 = (Object)adaptor.nil();
				root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(TOKEN_LIST, "TOKEN_LIST"), root_2);
				// CivlCParser.g:1703:42: ( balancedToken )*
				while ( stream_balancedToken.hasNext() ) {
					adaptor.addChild(root_2, stream_balancedToken.nextTree());
				}
				stream_balancedToken.reset();

				adaptor.addChild(root_1, root_2);
				}

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "asmStatement"


	public static class whenStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "whenStatement"
	// CivlCParser.g:1714:1: whenStatement : WHEN LPAREN expression RPAREN statement -> ^( WHEN expression statement ) ;
	public final CivlCParser.whenStatement_return whenStatement() throws RecognitionException {
		CivlCParser.whenStatement_return retval = new CivlCParser.whenStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token WHEN553=null;
		Token LPAREN554=null;
		Token RPAREN556=null;
		ParserRuleReturnScope expression555 =null;
		ParserRuleReturnScope statement557 =null;

		Object WHEN553_tree=null;
		Object LPAREN554_tree=null;
		Object RPAREN556_tree=null;
		RewriteRuleTokenStream stream_WHEN=new RewriteRuleTokenStream(adaptor,"token WHEN");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1715:2: ( WHEN LPAREN expression RPAREN statement -> ^( WHEN expression statement ) )
			// CivlCParser.g:1715:4: WHEN LPAREN expression RPAREN statement
			{
			WHEN553=(Token)match(input,WHEN,FOLLOW_WHEN_in_whenStatement10772); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_WHEN.add(WHEN553);

			LPAREN554=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_whenStatement10774); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN554);

			pushFollow(FOLLOW_expression_in_whenStatement10776);
			expression555=expression();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_expression.add(expression555.getTree());
			RPAREN556=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_whenStatement10778); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN556);

			pushFollow(FOLLOW_statement_in_whenStatement10780);
			statement557=statement();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statement.add(statement557.getTree());
			// AST REWRITE
			// elements: WHEN, expression, statement
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1716:3: -> ^( WHEN expression statement )
			{
				// CivlCParser.g:1716:6: ^( WHEN expression statement )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_WHEN.nextNode(), root_1);
				adaptor.addChild(root_1, stream_expression.nextTree());
				adaptor.addChild(root_1, stream_statement.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "whenStatement"


	public static class chooseStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "chooseStatement"
	// CivlCParser.g:1725:1: chooseStatement : CHOOSE LCURLY ( statement )+ RCURLY -> ^( CHOOSE ( statement )+ ) ;
	public final CivlCParser.chooseStatement_return chooseStatement() throws RecognitionException {
		CivlCParser.chooseStatement_return retval = new CivlCParser.chooseStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token CHOOSE558=null;
		Token LCURLY559=null;
		Token RCURLY561=null;
		ParserRuleReturnScope statement560 =null;

		Object CHOOSE558_tree=null;
		Object LCURLY559_tree=null;
		Object RCURLY561_tree=null;
		RewriteRuleTokenStream stream_CHOOSE=new RewriteRuleTokenStream(adaptor,"token CHOOSE");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");

		try {
			// CivlCParser.g:1726:2: ( CHOOSE LCURLY ( statement )+ RCURLY -> ^( CHOOSE ( statement )+ ) )
			// CivlCParser.g:1726:4: CHOOSE LCURLY ( statement )+ RCURLY
			{
			CHOOSE558=(Token)match(input,CHOOSE,FOLLOW_CHOOSE_in_chooseStatement10805); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CHOOSE.add(CHOOSE558);

			LCURLY559=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_chooseStatement10807); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY559);

			// CivlCParser.g:1726:18: ( statement )+
			int cnt137=0;
			loop137:
			while (true) {
				int alt137=2;
				int LA137_0 = input.LA(1);
				if ( (LA137_0==AMPERSAND||LA137_0==CHARACTER_CONSTANT||LA137_0==ELLIPSIS||LA137_0==FLOATING_CONSTANT||(LA137_0 >= IDENTIFIER && LA137_0 <= IF)||LA137_0==INTEGER_CONSTANT||LA137_0==LCURLY||LA137_0==LPAREN||LA137_0==MINUSMINUS||LA137_0==NOT||LA137_0==PLUS||LA137_0==PLUSPLUS||LA137_0==SEMI||LA137_0==STAR||(LA137_0 >= STRING_LITERAL && LA137_0 <= SUB)||LA137_0==TILDE||(LA137_0 >= ALIGNOF && LA137_0 <= ASM)||LA137_0==BIG_O||(LA137_0 >= BREAK && LA137_0 <= CASE)||(LA137_0 >= CHOOSE && LA137_0 <= CIVLFOR)||(LA137_0 >= CONTINUE && LA137_0 <= DEFAULT)||LA137_0==DERIV||LA137_0==DO||LA137_0==EXISTS||(LA137_0 >= FOR && LA137_0 <= GENERIC)||LA137_0==GOTO||LA137_0==HERE||LA137_0==PARFOR||LA137_0==PROCNULL||(LA137_0 >= RESULT && LA137_0 <= SELF)||(LA137_0 >= SIZEOF && LA137_0 <= SPAWN)||LA137_0==STATE_NULL||LA137_0==SWITCH||LA137_0==UNIFORM||(LA137_0 >= UPDATE && LA137_0 <= VALUE_AT)||(LA137_0 >= WHEN && LA137_0 <= WITH)) ) {
					alt137=1;
				}

				switch (alt137) {
				case 1 :
					// CivlCParser.g:1726:18: statement
					{
					pushFollow(FOLLOW_statement_in_chooseStatement10809);
					statement560=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_statement.add(statement560.getTree());
					}
					break;

				default :
					if ( cnt137 >= 1 ) break loop137;
					if (state.backtracking>0) {state.failed=true; return retval;}
					EarlyExitException eee = new EarlyExitException(137, input);
					throw eee;
				}
				cnt137++;
			}

			RCURLY561=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_chooseStatement10812); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY561);

			// AST REWRITE
			// elements: CHOOSE, statement
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1727:3: -> ^( CHOOSE ( statement )+ )
			{
				// CivlCParser.g:1727:6: ^( CHOOSE ( statement )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_CHOOSE.nextNode(), root_1);
				if ( !(stream_statement.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_statement.hasNext() ) {
					adaptor.addChild(root_1, stream_statement.nextTree());
				}
				stream_statement.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "chooseStatement"


	public static class atomicStatement_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "atomicStatement"
	// CivlCParser.g:1736:1: atomicStatement : CIVLATOMIC s= statementWithScope -> ^( CIVLATOMIC $s) ;
	public final CivlCParser.atomicStatement_return atomicStatement() throws RecognitionException {
		CivlCParser.atomicStatement_return retval = new CivlCParser.atomicStatement_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token CIVLATOMIC562=null;
		ParserRuleReturnScope s =null;

		Object CIVLATOMIC562_tree=null;
		RewriteRuleTokenStream stream_CIVLATOMIC=new RewriteRuleTokenStream(adaptor,"token CIVLATOMIC");
		RewriteRuleSubtreeStream stream_statementWithScope=new RewriteRuleSubtreeStream(adaptor,"rule statementWithScope");

		try {
			// CivlCParser.g:1737:2: ( CIVLATOMIC s= statementWithScope -> ^( CIVLATOMIC $s) )
			// CivlCParser.g:1737:4: CIVLATOMIC s= statementWithScope
			{
			CIVLATOMIC562=(Token)match(input,CIVLATOMIC,FOLLOW_CIVLATOMIC_in_atomicStatement10836); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_CIVLATOMIC.add(CIVLATOMIC562);

			pushFollow(FOLLOW_statementWithScope_in_atomicStatement10840);
			s=statementWithScope();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) stream_statementWithScope.add(s.getTree());
			// AST REWRITE
			// elements: CIVLATOMIC, s
			// token labels: 
			// rule labels: s, retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_s=new RewriteRuleSubtreeStream(adaptor,"rule s",s!=null?s.getTree():null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1738:3: -> ^( CIVLATOMIC $s)
			{
				// CivlCParser.g:1738:6: ^( CIVLATOMIC $s)
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_CIVLATOMIC.nextNode(), root_1);
				adaptor.addChild(root_1, stream_s.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "atomicStatement"


	public static class functionDefinition_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "functionDefinition"
	// CivlCParser.g:1750:1: functionDefinition : ( declarator contract declarationList_opt compoundStatement -> ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract ) | declarationSpecifiers declarator contract declarationList_opt compoundStatement -> ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract ) );
	public final CivlCParser.functionDefinition_return functionDefinition() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.functionDefinition_return retval = new CivlCParser.functionDefinition_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope declarator563 =null;
		ParserRuleReturnScope contract564 =null;
		ParserRuleReturnScope declarationList_opt565 =null;
		ParserRuleReturnScope compoundStatement566 =null;
		ParserRuleReturnScope declarationSpecifiers567 =null;
		ParserRuleReturnScope declarator568 =null;
		ParserRuleReturnScope contract569 =null;
		ParserRuleReturnScope declarationList_opt570 =null;
		ParserRuleReturnScope compoundStatement571 =null;

		RewriteRuleSubtreeStream stream_contract=new RewriteRuleSubtreeStream(adaptor,"rule contract");
		RewriteRuleSubtreeStream stream_compoundStatement=new RewriteRuleSubtreeStream(adaptor,"rule compoundStatement");
		RewriteRuleSubtreeStream stream_declarator=new RewriteRuleSubtreeStream(adaptor,"rule declarator");
		RewriteRuleSubtreeStream stream_declarationSpecifiers=new RewriteRuleSubtreeStream(adaptor,"rule declarationSpecifiers");
		RewriteRuleSubtreeStream stream_declarationList_opt=new RewriteRuleSubtreeStream(adaptor,"rule declarationList_opt");


		    Symbols_stack.peek().types = new HashSet<String>();
		    Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		    Symbols_stack.peek().isFunctionDefinition = true;
		    DeclarationScope_stack.peek().isTypedef = false;
		    DeclarationScope_stack.peek().typedefNameUsed =false;

		try {
			// CivlCParser.g:1760:2: ( declarator contract declarationList_opt compoundStatement -> ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract ) | declarationSpecifiers declarator contract declarationList_opt compoundStatement -> ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract ) )
			int alt138=2;
			switch ( input.LA(1) ) {
			case IDENTIFIER:
				{
				int LA138_1 = input.LA(2);
				if ( (!((((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))))) ) {
					alt138=1;
				}
				else if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {
					alt138=2;
				}

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

				}
				break;
			case LPAREN:
			case STAR:
				{
				alt138=1;
				}
				break;
			case ABSTRACT:
			case ALIGNAS:
			case ATOMIC:
			case AUTO:
			case BOOL:
			case CHAR:
			case COMPLEX:
			case CONST:
			case DEVICE:
			case DIFFERENTIABLE:
			case DOMAIN:
			case DOUBLE:
			case ENUM:
			case EXTERN:
			case FATOMIC:
			case FLOAT:
			case GLOBAL:
			case INLINE:
			case INPUT:
			case INT:
			case LONG:
			case MEM_TYPE:
			case NORETURN:
			case OUTPUT:
			case PURE:
			case RANGE:
			case REAL:
			case REGISTER:
			case RESTRICT:
			case SHARED:
			case SHORT:
			case SIGNED:
			case STATE_F:
			case STATIC:
			case STRUCT:
			case SYSTEM:
			case THREADLOCAL:
			case TYPEDEF:
			case TYPEOF:
			case UNION:
			case UNSIGNED:
			case VOID:
			case VOLATILE:
				{
				alt138=2;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 138, 0, input);
				throw nvae;
			}
			switch (alt138) {
				case 1 :
					// CivlCParser.g:1760:4: declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarator_in_functionDefinition10880);
					declarator563=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator563.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10885);
					contract564=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract564.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition10890);
					declarationList_opt565=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt565.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition10895);
					compoundStatement566=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement566.getTree());
					// AST REWRITE
					// elements: declarationList_opt, declarator, contract, compoundStatement
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1764:4: -> ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1764:7: ^( FUNCTION_DEFINITION ^( DECLARATION_SPECIFIERS ) declarator declarationList_opt compoundStatement contract )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_DEFINITION, "FUNCTION_DEFINITION"), root_1);
						// CivlCParser.g:1764:29: ^( DECLARATION_SPECIFIERS )
						{
						Object root_2 = (Object)adaptor.nil();
						root_2 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATION_SPECIFIERS, "DECLARATION_SPECIFIERS"), root_2);
						adaptor.addChild(root_1, root_2);
						}

						adaptor.addChild(root_1, stream_declarator.nextTree());
						adaptor.addChild(root_1, stream_declarationList_opt.nextTree());
						adaptor.addChild(root_1, stream_compoundStatement.nextTree());
						adaptor.addChild(root_1, stream_contract.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1767:7: declarationSpecifiers declarator contract declarationList_opt compoundStatement
					{
					pushFollow(FOLLOW_declarationSpecifiers_in_functionDefinition10940);
					declarationSpecifiers567=declarationSpecifiers();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationSpecifiers.add(declarationSpecifiers567.getTree());
					pushFollow(FOLLOW_declarator_in_functionDefinition10945);
					declarator568=declarator();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarator.add(declarator568.getTree());
					pushFollow(FOLLOW_contract_in_functionDefinition10950);
					contract569=contract();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contract.add(contract569.getTree());
					pushFollow(FOLLOW_declarationList_opt_in_functionDefinition10955);
					declarationList_opt570=declarationList_opt();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declarationList_opt.add(declarationList_opt570.getTree());
					pushFollow(FOLLOW_compoundStatement_in_functionDefinition10960);
					compoundStatement571=compoundStatement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_compoundStatement.add(compoundStatement571.getTree());
					// AST REWRITE
					// elements: contract, compoundStatement, declarator, declarationSpecifiers, declarationList_opt
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1772:4: -> ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract )
					{
						// CivlCParser.g:1772:7: ^( FUNCTION_DEFINITION declarationSpecifiers declarator declarationList_opt compoundStatement contract )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION_DEFINITION, "FUNCTION_DEFINITION"), root_1);
						adaptor.addChild(root_1, stream_declarationSpecifiers.nextTree());
						adaptor.addChild(root_1, stream_declarator.nextTree());
						adaptor.addChild(root_1, stream_declarationList_opt.nextTree());
						adaptor.addChild(root_1, stream_compoundStatement.nextTree());
						adaptor.addChild(root_1, stream_contract.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "functionDefinition"


	public static class declarationList_opt_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "declarationList_opt"
	// CivlCParser.g:1782:1: declarationList_opt : ( declaration )* -> ^( DECLARATION_LIST ( declaration )* ) ;
	public final CivlCParser.declarationList_opt_return declarationList_opt() throws RecognitionException {
		CivlCParser.declarationList_opt_return retval = new CivlCParser.declarationList_opt_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope declaration572 =null;

		RewriteRuleSubtreeStream stream_declaration=new RewriteRuleSubtreeStream(adaptor,"rule declaration");

		try {
			// CivlCParser.g:1783:2: ( ( declaration )* -> ^( DECLARATION_LIST ( declaration )* ) )
			// CivlCParser.g:1783:4: ( declaration )*
			{
			// CivlCParser.g:1783:4: ( declaration )*
			loop139:
			while (true) {
				int alt139=2;
				int LA139_0 = input.LA(1);
				if ( (LA139_0==IDENTIFIER||(LA139_0 >= ABSTRACT && LA139_0 <= ALIGNAS)||(LA139_0 >= ATOMIC && LA139_0 <= AUTO)||LA139_0==BOOL||LA139_0==CHAR||(LA139_0 >= COMPLEX && LA139_0 <= CONST)||(LA139_0 >= DEVICE && LA139_0 <= DIFFERENTIABLE)||(LA139_0 >= DOMAIN && LA139_0 <= DOUBLE)||LA139_0==ENUM||(LA139_0 >= EXTERN && LA139_0 <= FATOMIC)||LA139_0==FLOAT||LA139_0==GLOBAL||(LA139_0 >= INLINE && LA139_0 <= INT)||(LA139_0 >= LONG && LA139_0 <= NORETURN)||LA139_0==OUTPUT||(LA139_0 >= PURE && LA139_0 <= RANGE)||(LA139_0 >= REAL && LA139_0 <= REGISTER)||LA139_0==RESTRICT||(LA139_0 >= SHARED && LA139_0 <= SIGNED)||LA139_0==STATE_F||(LA139_0 >= STATIC && LA139_0 <= STRUCT)||LA139_0==SYSTEM||(LA139_0 >= THREADLOCAL && LA139_0 <= TYPEOF)||(LA139_0 >= UNION && LA139_0 <= UNSIGNED)||(LA139_0 >= VOID && LA139_0 <= VOLATILE)) ) {
					alt139=1;
				}

				switch (alt139) {
				case 1 :
					// CivlCParser.g:1783:4: declaration
					{
					pushFollow(FOLLOW_declaration_in_declarationList_opt11009);
					declaration572=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_declaration.add(declaration572.getTree());
					}
					break;

				default :
					break loop139;
				}
			}

			// AST REWRITE
			// elements: declaration
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1783:17: -> ^( DECLARATION_LIST ( declaration )* )
			{
				// CivlCParser.g:1783:20: ^( DECLARATION_LIST ( declaration )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DECLARATION_LIST, "DECLARATION_LIST"), root_1);
				// CivlCParser.g:1783:39: ( declaration )*
				while ( stream_declaration.hasNext() ) {
					adaptor.addChild(root_1, stream_declaration.nextTree());
				}
				stream_declaration.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "declarationList_opt"


	public static class contractItem_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "contractItem"
	// CivlCParser.g:1791:1: contractItem : ( separationLogicItem | porItem );
	public final CivlCParser.contractItem_return contractItem() throws RecognitionException {
		CivlCParser.contractItem_return retval = new CivlCParser.contractItem_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope separationLogicItem573 =null;
		ParserRuleReturnScope porItem574 =null;


		try {
			// CivlCParser.g:1792:2: ( separationLogicItem | porItem )
			int alt140=2;
			int LA140_0 = input.LA(1);
			if ( (LA140_0==ENSURES||LA140_0==REQUIRES) ) {
				alt140=1;
			}
			else if ( (LA140_0==ASSIGNS||LA140_0==DEPENDS||LA140_0==GUARD||LA140_0==READS) ) {
				alt140=2;
			}

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

			switch (alt140) {
				case 1 :
					// CivlCParser.g:1792:4: separationLogicItem
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_separationLogicItem_in_contractItem11032);
					separationLogicItem573=separationLogicItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, separationLogicItem573.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1793:7: porItem
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_porItem_in_contractItem11040);
					porItem574=porItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, porItem574.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "contractItem"


	public static class separationLogicItem_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "separationLogicItem"
	// CivlCParser.g:1796:1: separationLogicItem : ( REQUIRES LCURLY expression RCURLY -> ^( REQUIRES expression RCURLY ) | ENSURES LCURLY expression RCURLY -> ^( ENSURES expression RCURLY ) );
	public final CivlCParser.separationLogicItem_return separationLogicItem() throws RecognitionException {
		CivlCParser.separationLogicItem_return retval = new CivlCParser.separationLogicItem_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token REQUIRES575=null;
		Token LCURLY576=null;
		Token RCURLY578=null;
		Token ENSURES579=null;
		Token LCURLY580=null;
		Token RCURLY582=null;
		ParserRuleReturnScope expression577 =null;
		ParserRuleReturnScope expression581 =null;

		Object REQUIRES575_tree=null;
		Object LCURLY576_tree=null;
		Object RCURLY578_tree=null;
		Object ENSURES579_tree=null;
		Object LCURLY580_tree=null;
		Object RCURLY582_tree=null;
		RewriteRuleTokenStream stream_ENSURES=new RewriteRuleTokenStream(adaptor,"token ENSURES");
		RewriteRuleTokenStream stream_REQUIRES=new RewriteRuleTokenStream(adaptor,"token REQUIRES");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");

		try {
			// CivlCParser.g:1797:5: ( REQUIRES LCURLY expression RCURLY -> ^( REQUIRES expression RCURLY ) | ENSURES LCURLY expression RCURLY -> ^( ENSURES expression RCURLY ) )
			int alt141=2;
			int LA141_0 = input.LA(1);
			if ( (LA141_0==REQUIRES) ) {
				alt141=1;
			}
			else if ( (LA141_0==ENSURES) ) {
				alt141=2;
			}

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

			switch (alt141) {
				case 1 :
					// CivlCParser.g:1798:7: REQUIRES LCURLY expression RCURLY
					{
					REQUIRES575=(Token)match(input,REQUIRES,FOLLOW_REQUIRES_in_separationLogicItem11060); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_REQUIRES.add(REQUIRES575);

					LCURLY576=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_separationLogicItem11062); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY576);

					pushFollow(FOLLOW_expression_in_separationLogicItem11064);
					expression577=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression577.getTree());
					RCURLY578=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem11066); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY578);

					// AST REWRITE
					// elements: RCURLY, REQUIRES, expression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1798:41: -> ^( REQUIRES expression RCURLY )
					{
						// CivlCParser.g:1798:44: ^( REQUIRES expression RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_REQUIRES.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1799:4: ENSURES LCURLY expression RCURLY
					{
					ENSURES579=(Token)match(input,ENSURES,FOLLOW_ENSURES_in_separationLogicItem11081); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ENSURES.add(ENSURES579);

					LCURLY580=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_separationLogicItem11083); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY580);

					pushFollow(FOLLOW_expression_in_separationLogicItem11085);
					expression581=expression();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_expression.add(expression581.getTree());
					RCURLY582=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_separationLogicItem11087); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY582);

					// AST REWRITE
					// elements: ENSURES, RCURLY, expression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1799:37: -> ^( ENSURES expression RCURLY )
					{
						// CivlCParser.g:1799:40: ^( ENSURES expression RCURLY )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ENSURES.nextNode(), root_1);
						adaptor.addChild(root_1, stream_expression.nextTree());
						adaptor.addChild(root_1, stream_RCURLY.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "separationLogicItem"


	public static class porItem_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "porItem"
	// CivlCParser.g:1802:1: porItem : ( DEPENDS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( DEPENDS ( expression )? argumentExpressionList ) | GUARD ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( GUARD ( expression )? argumentExpressionList ) | ASSIGNS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( ASSIGNS ( expression )? argumentExpressionList ) | READS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( READS ( expression )? argumentExpressionList ) );
	public final CivlCParser.porItem_return porItem() throws RecognitionException {
		CivlCParser.porItem_return retval = new CivlCParser.porItem_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token DEPENDS583=null;
		Token LSQUARE584=null;
		Token RSQUARE586=null;
		Token LCURLY587=null;
		Token RCURLY589=null;
		Token GUARD590=null;
		Token LSQUARE591=null;
		Token RSQUARE593=null;
		Token LCURLY594=null;
		Token RCURLY596=null;
		Token ASSIGNS597=null;
		Token LSQUARE598=null;
		Token RSQUARE600=null;
		Token LCURLY601=null;
		Token RCURLY603=null;
		Token READS604=null;
		Token LSQUARE605=null;
		Token RSQUARE607=null;
		Token LCURLY608=null;
		Token RCURLY610=null;
		ParserRuleReturnScope expression585 =null;
		ParserRuleReturnScope argumentExpressionList588 =null;
		ParserRuleReturnScope expression592 =null;
		ParserRuleReturnScope argumentExpressionList595 =null;
		ParserRuleReturnScope expression599 =null;
		ParserRuleReturnScope argumentExpressionList602 =null;
		ParserRuleReturnScope expression606 =null;
		ParserRuleReturnScope argumentExpressionList609 =null;

		Object DEPENDS583_tree=null;
		Object LSQUARE584_tree=null;
		Object RSQUARE586_tree=null;
		Object LCURLY587_tree=null;
		Object RCURLY589_tree=null;
		Object GUARD590_tree=null;
		Object LSQUARE591_tree=null;
		Object RSQUARE593_tree=null;
		Object LCURLY594_tree=null;
		Object RCURLY596_tree=null;
		Object ASSIGNS597_tree=null;
		Object LSQUARE598_tree=null;
		Object RSQUARE600_tree=null;
		Object LCURLY601_tree=null;
		Object RCURLY603_tree=null;
		Object READS604_tree=null;
		Object LSQUARE605_tree=null;
		Object RSQUARE607_tree=null;
		Object LCURLY608_tree=null;
		Object RCURLY610_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_GUARD=new RewriteRuleTokenStream(adaptor,"token GUARD");
		RewriteRuleTokenStream stream_DEPENDS=new RewriteRuleTokenStream(adaptor,"token DEPENDS");
		RewriteRuleTokenStream stream_LCURLY=new RewriteRuleTokenStream(adaptor,"token LCURLY");
		RewriteRuleTokenStream stream_RCURLY=new RewriteRuleTokenStream(adaptor,"token RCURLY");
		RewriteRuleTokenStream stream_READS=new RewriteRuleTokenStream(adaptor,"token READS");
		RewriteRuleTokenStream stream_ASSIGNS=new RewriteRuleTokenStream(adaptor,"token ASSIGNS");
		RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
		RewriteRuleSubtreeStream stream_argumentExpressionList=new RewriteRuleSubtreeStream(adaptor,"rule argumentExpressionList");

		try {
			// CivlCParser.g:1803:5: ( DEPENDS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( DEPENDS ( expression )? argumentExpressionList ) | GUARD ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( GUARD ( expression )? argumentExpressionList ) | ASSIGNS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( ASSIGNS ( expression )? argumentExpressionList ) | READS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY -> ^( READS ( expression )? argumentExpressionList ) )
			int alt146=4;
			switch ( input.LA(1) ) {
			case DEPENDS:
				{
				alt146=1;
				}
				break;
			case GUARD:
				{
				alt146=2;
				}
				break;
			case ASSIGNS:
				{
				alt146=3;
				}
				break;
			case READS:
				{
				alt146=4;
				}
				break;
			default:
				if (state.backtracking>0) {state.failed=true; return retval;}
				NoViableAltException nvae =
					new NoViableAltException("", 146, 0, input);
				throw nvae;
			}
			switch (alt146) {
				case 1 :
					// CivlCParser.g:1804:7: DEPENDS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					DEPENDS583=(Token)match(input,DEPENDS,FOLLOW_DEPENDS_in_porItem11120); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_DEPENDS.add(DEPENDS583);

					// CivlCParser.g:1804:15: ( LSQUARE expression RSQUARE )?
					int alt142=2;
					int LA142_0 = input.LA(1);
					if ( (LA142_0==LSQUARE) ) {
						alt142=1;
					}
					switch (alt142) {
						case 1 :
							// CivlCParser.g:1804:16: LSQUARE expression RSQUARE
							{
							LSQUARE584=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11123); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE584);

							pushFollow(FOLLOW_expression_in_porItem11125);
							expression585=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression585.getTree());
							RSQUARE586=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11127); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE586);

							}
							break;

					}

					LCURLY587=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_porItem11131); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY587);

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11133);
					argumentExpressionList588=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList588.getTree());
					RCURLY589=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11135); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY589);

					// AST REWRITE
					// elements: expression, DEPENDS, argumentExpressionList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1804:82: -> ^( DEPENDS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1804:85: ^( DEPENDS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_DEPENDS.nextNode(), root_1);
						// CivlCParser.g:1804:95: ( expression )?
						if ( stream_expression.hasNext() ) {
							adaptor.addChild(root_1, stream_expression.nextTree());
						}
						stream_expression.reset();

						adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 2 :
					// CivlCParser.g:1805:7: GUARD ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					GUARD590=(Token)match(input,GUARD,FOLLOW_GUARD_in_porItem11154); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_GUARD.add(GUARD590);

					// CivlCParser.g:1805:13: ( LSQUARE expression RSQUARE )?
					int alt143=2;
					int LA143_0 = input.LA(1);
					if ( (LA143_0==LSQUARE) ) {
						alt143=1;
					}
					switch (alt143) {
						case 1 :
							// CivlCParser.g:1805:14: LSQUARE expression RSQUARE
							{
							LSQUARE591=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11157); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE591);

							pushFollow(FOLLOW_expression_in_porItem11159);
							expression592=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression592.getTree());
							RSQUARE593=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11161); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE593);

							}
							break;

					}

					LCURLY594=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_porItem11165); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY594);

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11167);
					argumentExpressionList595=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList595.getTree());
					RCURLY596=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11169); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY596);

					// AST REWRITE
					// elements: expression, GUARD, argumentExpressionList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1805:80: -> ^( GUARD ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1805:83: ^( GUARD ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_GUARD.nextNode(), root_1);
						// CivlCParser.g:1805:91: ( expression )?
						if ( stream_expression.hasNext() ) {
							adaptor.addChild(root_1, stream_expression.nextTree());
						}
						stream_expression.reset();

						adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 3 :
					// CivlCParser.g:1806:7: ASSIGNS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					ASSIGNS597=(Token)match(input,ASSIGNS,FOLLOW_ASSIGNS_in_porItem11188); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_ASSIGNS.add(ASSIGNS597);

					// CivlCParser.g:1806:15: ( LSQUARE expression RSQUARE )?
					int alt144=2;
					int LA144_0 = input.LA(1);
					if ( (LA144_0==LSQUARE) ) {
						alt144=1;
					}
					switch (alt144) {
						case 1 :
							// CivlCParser.g:1806:16: LSQUARE expression RSQUARE
							{
							LSQUARE598=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11191); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE598);

							pushFollow(FOLLOW_expression_in_porItem11193);
							expression599=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression599.getTree());
							RSQUARE600=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11195); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE600);

							}
							break;

					}

					LCURLY601=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_porItem11199); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY601);

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11201);
					argumentExpressionList602=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList602.getTree());
					RCURLY603=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11203); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY603);

					// AST REWRITE
					// elements: expression, ASSIGNS, argumentExpressionList
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1806:82: -> ^( ASSIGNS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1806:85: ^( ASSIGNS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ASSIGNS.nextNode(), root_1);
						// CivlCParser.g:1806:95: ( expression )?
						if ( stream_expression.hasNext() ) {
							adaptor.addChild(root_1, stream_expression.nextTree());
						}
						stream_expression.reset();

						adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;
				case 4 :
					// CivlCParser.g:1807:7: READS ( LSQUARE expression RSQUARE )? LCURLY argumentExpressionList RCURLY
					{
					READS604=(Token)match(input,READS,FOLLOW_READS_in_porItem11222); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_READS.add(READS604);

					// CivlCParser.g:1807:13: ( LSQUARE expression RSQUARE )?
					int alt145=2;
					int LA145_0 = input.LA(1);
					if ( (LA145_0==LSQUARE) ) {
						alt145=1;
					}
					switch (alt145) {
						case 1 :
							// CivlCParser.g:1807:14: LSQUARE expression RSQUARE
							{
							LSQUARE605=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_porItem11225); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE605);

							pushFollow(FOLLOW_expression_in_porItem11227);
							expression606=expression();
							state._fsp--;
							if (state.failed) return retval;
							if ( state.backtracking==0 ) stream_expression.add(expression606.getTree());
							RSQUARE607=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_porItem11229); if (state.failed) return retval; 
							if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE607);

							}
							break;

					}

					LCURLY608=(Token)match(input,LCURLY,FOLLOW_LCURLY_in_porItem11233); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_LCURLY.add(LCURLY608);

					pushFollow(FOLLOW_argumentExpressionList_in_porItem11235);
					argumentExpressionList609=argumentExpressionList();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_argumentExpressionList.add(argumentExpressionList609.getTree());
					RCURLY610=(Token)match(input,RCURLY,FOLLOW_RCURLY_in_porItem11237); if (state.failed) return retval; 
					if ( state.backtracking==0 ) stream_RCURLY.add(RCURLY610);

					// AST REWRITE
					// elements: argumentExpressionList, READS, expression
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					if ( state.backtracking==0 ) {
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 1807:80: -> ^( READS ( expression )? argumentExpressionList )
					{
						// CivlCParser.g:1807:83: ^( READS ( expression )? argumentExpressionList )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_READS.nextNode(), root_1);
						// CivlCParser.g:1807:91: ( expression )?
						if ( stream_expression.hasNext() ) {
							adaptor.addChild(root_1, stream_expression.nextTree());
						}
						stream_expression.reset();

						adaptor.addChild(root_1, stream_argumentExpressionList.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;
					}

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "porItem"


	public static class contract_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "contract"
	// CivlCParser.g:1816:1: contract : ( contractItem )* -> ^( CONTRACT ( contractItem )* ) ;
	public final CivlCParser.contract_return contract() throws RecognitionException {
		CivlCParser.contract_return retval = new CivlCParser.contract_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope contractItem611 =null;

		RewriteRuleSubtreeStream stream_contractItem=new RewriteRuleSubtreeStream(adaptor,"rule contractItem");

		try {
			// CivlCParser.g:1817:2: ( ( contractItem )* -> ^( CONTRACT ( contractItem )* ) )
			// CivlCParser.g:1817:4: ( contractItem )*
			{
			// CivlCParser.g:1817:4: ( contractItem )*
			loop147:
			while (true) {
				int alt147=2;
				int LA147_0 = input.LA(1);
				if ( (LA147_0==ASSIGNS||LA147_0==DEPENDS||LA147_0==ENSURES||LA147_0==GUARD||LA147_0==READS||LA147_0==REQUIRES) ) {
					alt147=1;
				}

				switch (alt147) {
				case 1 :
					// CivlCParser.g:1817:4: contractItem
					{
					pushFollow(FOLLOW_contractItem_in_contract11265);
					contractItem611=contractItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_contractItem.add(contractItem611.getTree());
					}
					break;

				default :
					break loop147;
				}
			}

			// AST REWRITE
			// elements: contractItem
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1817:18: -> ^( CONTRACT ( contractItem )* )
			{
				// CivlCParser.g:1817:21: ^( CONTRACT ( contractItem )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONTRACT, "CONTRACT"), root_1);
				// CivlCParser.g:1817:32: ( contractItem )*
				while ( stream_contractItem.hasNext() ) {
					adaptor.addChild(root_1, stream_contractItem.nextTree());
				}
				stream_contractItem.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "contract"


	public static class blockItemWithScope_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "blockItemWithScope"
	// CivlCParser.g:1824:1: blockItemWithScope : blockItem ;
	public final CivlCParser.blockItemWithScope_return blockItemWithScope() throws RecognitionException {
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.blockItemWithScope_return retval = new CivlCParser.blockItemWithScope_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope blockItem612 =null;



		  DeclarationScope_stack.peek().isTypedef = false;
		  DeclarationScope_stack.peek().typedefNameUsed = false;

		try {
			// CivlCParser.g:1830:2: ( blockItem )
			// CivlCParser.g:1830:4: blockItem
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_blockItem_in_blockItemWithScope11299);
			blockItem612=blockItem();
			state._fsp--;
			if (state.failed) return retval;
			if ( state.backtracking==0 ) adaptor.addChild(root_0, blockItem612.getTree());

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "blockItemWithScope"


	public static class blockItem_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "blockItem"
	// CivlCParser.g:1836:1: blockItem : ( ( declarator contract declarationList_opt LCURLY )=> functionDefinition | ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition | declaration | pragma | annotation | statement );
	public final CivlCParser.blockItem_return blockItem() throws RecognitionException {
		CivlCParser.blockItem_return retval = new CivlCParser.blockItem_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope functionDefinition613 =null;
		ParserRuleReturnScope functionDefinition614 =null;
		ParserRuleReturnScope declaration615 =null;
		ParserRuleReturnScope pragma616 =null;
		ParserRuleReturnScope annotation617 =null;
		ParserRuleReturnScope statement618 =null;


		try {
			// CivlCParser.g:1837:2: ( ( declarator contract declarationList_opt LCURLY )=> functionDefinition | ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition | declaration | pragma | annotation | statement )
			int alt148=6;
			alt148 = dfa148.predict(input);
			switch (alt148) {
				case 1 :
					// CivlCParser.g:1837:3: ( declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem11323);
					functionDefinition613=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition613.getTree());

					}
					break;
				case 2 :
					// CivlCParser.g:1839:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_functionDefinition_in_blockItem11344);
					functionDefinition614=functionDefinition();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, functionDefinition614.getTree());

					}
					break;
				case 3 :
					// CivlCParser.g:1841:4: declaration
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_declaration_in_blockItem11349);
					declaration615=declaration();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, declaration615.getTree());

					}
					break;
				case 4 :
					// CivlCParser.g:1842:4: pragma
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_pragma_in_blockItem11354);
					pragma616=pragma();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, pragma616.getTree());

					}
					break;
				case 5 :
					// CivlCParser.g:1843:4: annotation
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_annotation_in_blockItem11359);
					annotation617=annotation();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, annotation617.getTree());

					}
					break;
				case 6 :
					// CivlCParser.g:1844:4: statement
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_statement_in_blockItem11364);
					statement618=statement();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) adaptor.addChild(root_0, statement618.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "blockItem"


	public static class translationUnit_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "translationUnit"
	// CivlCParser.g:1859:1: translationUnit : ( blockItem )* EOF -> ^( TRANSLATION_UNIT ( blockItem )* ) ;
	public final CivlCParser.translationUnit_return translationUnit() throws RecognitionException {
		Symbols_stack.push(new Symbols_scope());
		DeclarationScope_stack.push(new DeclarationScope_scope());

		CivlCParser.translationUnit_return retval = new CivlCParser.translationUnit_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token EOF620=null;
		ParserRuleReturnScope blockItem619 =null;

		Object EOF620_tree=null;
		RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
		RewriteRuleSubtreeStream stream_blockItem=new RewriteRuleSubtreeStream(adaptor,"rule blockItem");


		    Symbols_stack.peek().types = new HashSet<String>();
		    Symbols_stack.peek().enumerationConstants = new HashSet<String>();
		    Symbols_stack.peek().isFunctionDefinition = false;
		    DeclarationScope_stack.peek().isTypedef = false;
		    DeclarationScope_stack.peek().typedefNameUsed = false;

		try {
			// CivlCParser.g:1869:2: ( ( blockItem )* EOF -> ^( TRANSLATION_UNIT ( blockItem )* ) )
			// CivlCParser.g:1869:4: ( blockItem )* EOF
			{
			// CivlCParser.g:1869:4: ( blockItem )*
			loop149:
			while (true) {
				int alt149=2;
				int LA149_0 = input.LA(1);
				if ( (LA149_0==AMPERSAND||LA149_0==ANNOTATION_START||LA149_0==CHARACTER_CONSTANT||LA149_0==ELLIPSIS||LA149_0==FLOATING_CONSTANT||(LA149_0 >= IDENTIFIER && LA149_0 <= IF)||LA149_0==INLINE_ANNOTATION_START||LA149_0==INTEGER_CONSTANT||LA149_0==LCURLY||LA149_0==LPAREN||LA149_0==MINUSMINUS||LA149_0==NOT||LA149_0==PLUS||LA149_0==PLUSPLUS||LA149_0==SEMI||LA149_0==STAR||(LA149_0 >= STRING_LITERAL && LA149_0 <= SUB)||LA149_0==TILDE||(LA149_0 >= ABSTRACT && LA149_0 <= ASM)||(LA149_0 >= ATOMIC && LA149_0 <= BIG_O)||(LA149_0 >= BOOL && LA149_0 <= CASE)||(LA149_0 >= CHAR && LA149_0 <= CIVLFOR)||(LA149_0 >= COMPLEX && LA149_0 <= CONST)||(LA149_0 >= CONTINUE && LA149_0 <= DEFAULT)||(LA149_0 >= DERIV && LA149_0 <= DOUBLE)||(LA149_0 >= ENUM && LA149_0 <= EXISTS)||(LA149_0 >= EXTERN && LA149_0 <= FATOMIC)||(LA149_0 >= FLOAT && LA149_0 <= GOTO)||LA149_0==HERE||(LA149_0 >= INLINE && LA149_0 <= INT)||(LA149_0 >= LONG && LA149_0 <= NORETURN)||LA149_0==OUTPUT||LA149_0==PARFOR||(LA149_0 >= PPRAGMA && LA149_0 <= RANGE)||(LA149_0 >= REAL && LA149_0 <= REGISTER)||(LA149_0 >= RESTRICT && LA149_0 <= SELF)||(LA149_0 >= SHARED && LA149_0 <= SYSTEM)||(LA149_0 >= THREADLOCAL && LA149_0 <= WITH)) ) {
					alt149=1;
				}

				switch (alt149) {
				case 1 :
					// CivlCParser.g:1869:4: blockItem
					{
					pushFollow(FOLLOW_blockItem_in_translationUnit11394);
					blockItem619=blockItem();
					state._fsp--;
					if (state.failed) return retval;
					if ( state.backtracking==0 ) stream_blockItem.add(blockItem619.getTree());
					}
					break;

				default :
					break loop149;
				}
			}

			EOF620=(Token)match(input,EOF,FOLLOW_EOF_in_translationUnit11397); if (state.failed) return retval; 
			if ( state.backtracking==0 ) stream_EOF.add(EOF620);

			// AST REWRITE
			// elements: blockItem
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			if ( state.backtracking==0 ) {
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 1870:3: -> ^( TRANSLATION_UNIT ( blockItem )* )
			{
				// CivlCParser.g:1870:6: ^( TRANSLATION_UNIT ( blockItem )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TRANSLATION_UNIT, "TRANSLATION_UNIT"), root_1);
				// CivlCParser.g:1870:25: ( blockItem )*
				while ( stream_blockItem.hasNext() ) {
					adaptor.addChild(root_1, stream_blockItem.nextTree());
				}
				stream_blockItem.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;
			}

			}

			retval.stop = input.LT(-1);

			if ( state.backtracking==0 ) {
			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
			Symbols_stack.pop();
			DeclarationScope_stack.pop();

		}
		return retval;
	}
	// $ANTLR end "translationUnit"

	// $ANTLR start synpred1_CivlCParser
	public final void synpred1_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:348:4: ( LPAREN typeName RPAREN LCURLY )
		// CivlCParser.g:348:5: LPAREN typeName RPAREN LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred1_CivlCParser2312); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred1_CivlCParser2314);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred1_CivlCParser2316); if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred1_CivlCParser2318); if (state.failed) return;

		}

	}
	// $ANTLR end synpred1_CivlCParser

	// $ANTLR start synpred2_CivlCParser
	public final void synpred2_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:381:4: ( SIZEOF LPAREN typeName )
		// CivlCParser.g:381:5: SIZEOF LPAREN typeName
		{
		match(input,SIZEOF,FOLLOW_SIZEOF_in_synpred2_CivlCParser2621); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred2_CivlCParser2623); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred2_CivlCParser2625);
		typeName();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred2_CivlCParser

	// $ANTLR start synpred3_CivlCParser
	public final void synpred3_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:431:4: ( LPAREN typeName RPAREN ~ LCURLY )
		// CivlCParser.g:431:5: LPAREN typeName RPAREN ~ LCURLY
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred3_CivlCParser3004); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred3_CivlCParser3006);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred3_CivlCParser3008); if (state.failed) return;

		if ( (input.LA(1) >= AMPERSAND && input.LA(1) <= IntegerSuffix)||(input.LA(1) >= LEXCON && input.LA(1) <= TYPE_QUALIFIER_LIST) ) {
			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;
		}
		}

	}
	// $ANTLR end synpred3_CivlCParser

	// $ANTLR start synpred4_CivlCParser
	public final void synpred4_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:441:11: ( AT )
		// CivlCParser.g:441:12: AT
		{
		match(input,AT,FOLLOW_AT_in_synpred4_CivlCParser3089); if (state.failed) return;

		}

	}
	// $ANTLR end synpred4_CivlCParser

	// $ANTLR start synpred5_CivlCParser
	public final void synpred5_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:449:11: ( STAR )
		// CivlCParser.g:449:12: STAR
		{
		match(input,STAR,FOLLOW_STAR_in_synpred5_CivlCParser3170); if (state.failed) return;

		}

	}
	// $ANTLR end synpred5_CivlCParser

	// $ANTLR start synpred6_CivlCParser
	public final void synpred6_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:451:11: ( DIV )
		// CivlCParser.g:451:12: DIV
		{
		match(input,DIV,FOLLOW_DIV_in_synpred6_CivlCParser3221); if (state.failed) return;

		}

	}
	// $ANTLR end synpred6_CivlCParser

	// $ANTLR start synpred7_CivlCParser
	public final void synpred7_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:453:11: ( MOD )
		// CivlCParser.g:453:12: MOD
		{
		match(input,MOD,FOLLOW_MOD_in_synpred7_CivlCParser3272); if (state.failed) return;

		}

	}
	// $ANTLR end synpred7_CivlCParser

	// $ANTLR start synpred8_CivlCParser
	public final void synpred8_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:461:11: ( PLUS )
		// CivlCParser.g:461:12: PLUS
		{
		match(input,PLUS,FOLLOW_PLUS_in_synpred8_CivlCParser3353); if (state.failed) return;

		}

	}
	// $ANTLR end synpred8_CivlCParser

	// $ANTLR start synpred9_CivlCParser
	public final void synpred9_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:463:11: ( SUB )
		// CivlCParser.g:463:12: SUB
		{
		match(input,SUB,FOLLOW_SUB_in_synpred9_CivlCParser3402); if (state.failed) return;

		}

	}
	// $ANTLR end synpred9_CivlCParser

	// $ANTLR start synpred10_CivlCParser
	public final void synpred10_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:472:11: ( DOTDOT )
		// CivlCParser.g:472:12: DOTDOT
		{
		match(input,DOTDOT,FOLLOW_DOTDOT_in_synpred10_CivlCParser3477); if (state.failed) return;

		}

	}
	// $ANTLR end synpred10_CivlCParser

	// $ANTLR start synpred11_CivlCParser
	public final void synpred11_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:479:11: ( HASH )
		// CivlCParser.g:479:12: HASH
		{
		match(input,HASH,FOLLOW_HASH_in_synpred11_CivlCParser3554); if (state.failed) return;

		}

	}
	// $ANTLR end synpred11_CivlCParser

	// $ANTLR start synpred12_CivlCParser
	public final void synpred12_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:487:11: ( SHIFTLEFT )
		// CivlCParser.g:487:12: SHIFTLEFT
		{
		match(input,SHIFTLEFT,FOLLOW_SHIFTLEFT_in_synpred12_CivlCParser3630); if (state.failed) return;

		}

	}
	// $ANTLR end synpred12_CivlCParser

	// $ANTLR start synpred13_CivlCParser
	public final void synpred13_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:489:11: ( SHIFTRIGHT )
		// CivlCParser.g:489:12: SHIFTRIGHT
		{
		match(input,SHIFTRIGHT,FOLLOW_SHIFTRIGHT_in_synpred13_CivlCParser3679); if (state.failed) return;

		}

	}
	// $ANTLR end synpred13_CivlCParser

	// $ANTLR start synpred14_CivlCParser
	public final void synpred14_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:497:11: ( relationalOperator )
		// CivlCParser.g:497:12: relationalOperator
		{
		pushFollow(FOLLOW_relationalOperator_in_synpred14_CivlCParser3760);
		relationalOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred14_CivlCParser

	// $ANTLR start synpred15_CivlCParser
	public final void synpred15_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:512:11: ( equalityOperator )
		// CivlCParser.g:512:12: equalityOperator
		{
		pushFollow(FOLLOW_equalityOperator_in_synpred15_CivlCParser3898);
		equalityOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred15_CivlCParser

	// $ANTLR start synpred16_CivlCParser
	public final void synpred16_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:527:11: ( AMPERSAND )
		// CivlCParser.g:527:12: AMPERSAND
		{
		match(input,AMPERSAND,FOLLOW_AMPERSAND_in_synpred16_CivlCParser4033); if (state.failed) return;

		}

	}
	// $ANTLR end synpred16_CivlCParser

	// $ANTLR start synpred17_CivlCParser
	public final void synpred17_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:535:11: ( BITXOR )
		// CivlCParser.g:535:12: BITXOR
		{
		match(input,BITXOR,FOLLOW_BITXOR_in_synpred17_CivlCParser4116); if (state.failed) return;

		}

	}
	// $ANTLR end synpred17_CivlCParser

	// $ANTLR start synpred18_CivlCParser
	public final void synpred18_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:543:11: ( BITOR )
		// CivlCParser.g:543:12: BITOR
		{
		match(input,BITOR,FOLLOW_BITOR_in_synpred18_CivlCParser4199); if (state.failed) return;

		}

	}
	// $ANTLR end synpred18_CivlCParser

	// $ANTLR start synpred19_CivlCParser
	public final void synpred19_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:551:11: ( AND )
		// CivlCParser.g:551:12: AND
		{
		match(input,AND,FOLLOW_AND_in_synpred19_CivlCParser4282); if (state.failed) return;

		}

	}
	// $ANTLR end synpred19_CivlCParser

	// $ANTLR start synpred20_CivlCParser
	public final void synpred20_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:559:11: ( OR )
		// CivlCParser.g:559:12: OR
		{
		match(input,OR,FOLLOW_OR_in_synpred20_CivlCParser4373); if (state.failed) return;

		}

	}
	// $ANTLR end synpred20_CivlCParser

	// $ANTLR start synpred21_CivlCParser
	public final void synpred21_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:568:11: ( IMPLIES )
		// CivlCParser.g:568:12: IMPLIES
		{
		match(input,IMPLIES,FOLLOW_IMPLIES_in_synpred21_CivlCParser4467); if (state.failed) return;

		}

	}
	// $ANTLR end synpred21_CivlCParser

	// $ANTLR start synpred22_CivlCParser
	public final void synpred22_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:577:11: ( QMARK )
		// CivlCParser.g:577:12: QMARK
		{
		match(input,QMARK,FOLLOW_QMARK_in_synpred22_CivlCParser4553); if (state.failed) return;

		}

	}
	// $ANTLR end synpred22_CivlCParser

	// $ANTLR start synpred23_CivlCParser
	public final void synpred23_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:605:5: ( LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR )
		// CivlCParser.g:605:6: LPAREN typeName RPAREN LAMBDA LPAREN boundVariableDeclarationList BITOR
		{
		match(input,LPAREN,FOLLOW_LPAREN_in_synpred23_CivlCParser4821); if (state.failed) return;

		pushFollow(FOLLOW_typeName_in_synpred23_CivlCParser4823);
		typeName();
		state._fsp--;
		if (state.failed) return;

		match(input,RPAREN,FOLLOW_RPAREN_in_synpred23_CivlCParser4825); if (state.failed) return;

		match(input,LAMBDA,FOLLOW_LAMBDA_in_synpred23_CivlCParser4827); if (state.failed) return;

		match(input,LPAREN,FOLLOW_LPAREN_in_synpred23_CivlCParser4829); if (state.failed) return;

		pushFollow(FOLLOW_boundVariableDeclarationList_in_synpred23_CivlCParser4847);
		boundVariableDeclarationList();
		state._fsp--;
		if (state.failed) return;

		match(input,BITOR,FOLLOW_BITOR_in_synpred23_CivlCParser4849); if (state.failed) return;

		}

	}
	// $ANTLR end synpred23_CivlCParser

	// $ANTLR start synpred24_CivlCParser
	public final void synpred24_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:641:4: ( arrayLambdaExpression )
		// CivlCParser.g:641:5: arrayLambdaExpression
		{
		pushFollow(FOLLOW_arrayLambdaExpression_in_synpred24_CivlCParser5162);
		arrayLambdaExpression();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred24_CivlCParser

	// $ANTLR start synpred25_CivlCParser
	public final void synpred25_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:642:4: ( unaryExpression assignmentOperator )
		// CivlCParser.g:642:5: unaryExpression assignmentOperator
		{
		pushFollow(FOLLOW_unaryExpression_in_synpred25_CivlCParser5172);
		unaryExpression();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_assignmentOperator_in_synpred25_CivlCParser5174);
		assignmentOperator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred25_CivlCParser

	// $ANTLR start synpred26_CivlCParser
	public final void synpred26_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:666:6: ( COMMA )
		// CivlCParser.g:666:7: COMMA
		{
		match(input,COMMA,FOLLOW_COMMA_in_synpred26_CivlCParser5335); if (state.failed) return;

		}

	}
	// $ANTLR end synpred26_CivlCParser

	// $ANTLR start synpred27_CivlCParser
	public final void synpred27_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:760:4: ( typeSpecifier )
		// CivlCParser.g:760:5: typeSpecifier
		{
		pushFollow(FOLLOW_typeSpecifier_in_synpred27_CivlCParser5610);
		typeSpecifier();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred27_CivlCParser

	// $ANTLR start synpred28_CivlCParser
	public final void synpred28_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:979:8: ( SYSTEM libraryName )
		// CivlCParser.g:979:9: SYSTEM libraryName
		{
		match(input,SYSTEM,FOLLOW_SYSTEM_in_synpred28_CivlCParser6827); if (state.failed) return;

		pushFollow(FOLLOW_libraryName_in_synpred28_CivlCParser6829);
		libraryName();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred28_CivlCParser

	// $ANTLR start synpred29_CivlCParser
	public final void synpred29_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1224:4: ( declarator )
		// CivlCParser.g:1224:5: declarator
		{
		pushFollow(FOLLOW_declarator_in_synpred29_CivlCParser8067);
		declarator();
		state._fsp--;
		if (state.failed) return;

		}

	}
	// $ANTLR end synpred29_CivlCParser

	// $ANTLR start synpred30_CivlCParser
	public final void synpred30_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1527:11: ( ELSE )
		// CivlCParser.g:1527:12: ELSE
		{
		match(input,ELSE,FOLLOW_ELSE_in_synpred30_CivlCParser9693); if (state.failed) return;

		}

	}
	// $ANTLR end synpred30_CivlCParser

	// $ANTLR start synpred31_CivlCParser
	public final void synpred31_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1837:3: ( declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1837:4: declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarator_in_synpred31_CivlCParser11310);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred31_CivlCParser11312);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred31_CivlCParser11314);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred31_CivlCParser11316); if (state.failed) return;

		}

	}
	// $ANTLR end synpred31_CivlCParser

	// $ANTLR start synpred32_CivlCParser
	public final void synpred32_CivlCParser_fragment() throws RecognitionException {
		// CivlCParser.g:1839:4: ( declarationSpecifiers declarator contract declarationList_opt LCURLY )
		// CivlCParser.g:1839:5: declarationSpecifiers declarator contract declarationList_opt LCURLY
		{
		pushFollow(FOLLOW_declarationSpecifiers_in_synpred32_CivlCParser11329);
		declarationSpecifiers();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarator_in_synpred32_CivlCParser11331);
		declarator();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_contract_in_synpred32_CivlCParser11333);
		contract();
		state._fsp--;
		if (state.failed) return;

		pushFollow(FOLLOW_declarationList_opt_in_synpred32_CivlCParser11335);
		declarationList_opt();
		state._fsp--;
		if (state.failed) return;

		match(input,LCURLY,FOLLOW_LCURLY_in_synpred32_CivlCParser11337); if (state.failed) return;

		}

	}
	// $ANTLR end synpred32_CivlCParser

	// Delegated rules

	public final boolean synpred2_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred2_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred29_CivlCParser_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 synpred18_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred18_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred1_CivlCParser_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 synpred17_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred17_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred28_CivlCParser_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 synpred19_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred19_CivlCParser_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 synpred12_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred12_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred32_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred21_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred23_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred9_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred10_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred14_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred31_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred8_CivlCParser_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 synpred13_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred13_CivlCParser_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 synpred20_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred20_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred24_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred16_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred30_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred25_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred27_CivlCParser_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 synpred15_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred15_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred26_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred3_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred4_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred5_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred7_CivlCParser_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_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred6_CivlCParser_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 synpred11_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred11_CivlCParser_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 synpred22_CivlCParser() {
		state.backtracking++;
		int start = input.mark();
		try {
			synpred22_CivlCParser_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 DFA75 dfa75 = new DFA75(this);
	protected DFA84 dfa84 = new DFA84(this);
	protected DFA85 dfa85 = new DFA85(this);
	protected DFA97 dfa97 = new DFA97(this);
	protected DFA101 dfa101 = new DFA101(this);
	protected DFA120 dfa120 = new DFA120(this);
	protected DFA148 dfa148 = new DFA148(this);
	static final String DFA75_eotS =
		"\36\uffff";
	static final String DFA75_eofS =
		"\36\uffff";
	static final String DFA75_minS =
		"\1\170\5\uffff\1\25\4\uffff\1\4\1\uffff\2\4\1\uffff\1\0\1\uffff\4\4\1"+
		"\0\2\4\2\0\1\4\2\0";
	static final String DFA75_maxS =
		"\1\u00cf\5\uffff\1\u00da\4\uffff\1\u00da\1\uffff\1\160\1\u00d8\1\uffff"+
		"\1\0\1\uffff\1\u00d8\1\157\1\u00d8\1\157\1\0\1\u00d8\1\157\2\0\1\157\2"+
		"\0";
	static final String DFA75_acceptS =
		"\1\uffff\1\1\1\2\1\3\1\4\1\5\1\uffff\1\10\1\11\1\12\1\13\1\uffff\1\7\2"+
		"\uffff\1\6\1\uffff\1\6\14\uffff";
	static final String DFA75_specialS =
		"\15\uffff\1\11\1\10\1\uffff\1\12\1\uffff\1\3\1\0\1\4\1\6\1\13\1\5\1\1"+
		"\1\14\1\2\1\7\1\15\1\16}>";
	static final String[] DFA75_transitionS = {
			"\1\3\31\uffff\1\10\1\12\10\uffff\1\7\5\uffff\1\11\4\uffff\1\1\6\uffff"+
			"\1\2\10\uffff\1\4\21\uffff\1\5\5\uffff\1\6",
			"",
			"",
			"",
			"",
			"",
			"\1\14\42\uffff\1\14\16\uffff\1\14\1\uffff\1\13\31\uffff\1\14\3\uffff"+
			"\1\14\4\uffff\1\14\13\uffff\2\14\3\uffff\2\14\2\uffff\1\14\4\uffff\1"+
			"\14\4\uffff\2\14\5\uffff\2\14\1\uffff\2\14\1\uffff\1\14\2\uffff\2\14"+
			"\1\uffff\1\14\3\uffff\1\14\4\uffff\3\14\2\uffff\3\14\1\uffff\1\14\6\uffff"+
			"\2\14\1\uffff\2\14\1\uffff\1\14\6\uffff\3\14\2\uffff\1\14\1\uffff\1\14"+
			"\1\uffff\1\14\1\uffff\1\14\1\uffff\3\14\1\uffff\2\14\2\uffff\2\14",
			"",
			"",
			"",
			"",
			"\1\14\16\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\15\10\uffff"+
			"\1\14\5\uffff\1\14\6\uffff\1\14\4\uffff\1\14\7\uffff\1\14\1\uffff\1\14"+
			"\7\uffff\1\14\6\uffff\1\14\1\uffff\2\14\1\uffff\1\14\10\uffff\1\14\2"+
			"\uffff\1\14\1\uffff\1\14\3\uffff\1\14\10\uffff\1\14\4\uffff\1\14\17\uffff"+
			"\1\14\3\uffff\1\14\2\uffff\1\14\7\uffff\1\14\5\uffff\1\14\6\uffff\2\14"+
			"\2\uffff\2\14\4\uffff\2\14\1\uffff\2\14\14\uffff\1\14\1\uffff\1\14",
			"",
			"\2\14\2\uffff\10\14\11\uffff\4\14\7\uffff\1\14\10\uffff\2\14\11\uffff"+
			"\1\17\3\uffff\1\14\10\uffff\1\14\1\uffff\1\14\1\uffff\3\14\2\uffff\4"+
			"\14\4\uffff\1\14\4\uffff\3\14\2\uffff\1\14\4\uffff\1\20\2\uffff\6\14"+
			"\1\uffff\1\16\1\14",
			"\1\14\16\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\23\10\uffff"+
			"\1\14\5\uffff\1\14\6\uffff\1\14\4\uffff\1\14\7\uffff\1\14\1\uffff\1\14"+
			"\7\uffff\1\21\6\uffff\1\14\1\uffff\1\14\1\22\1\uffff\1\14\10\uffff\1"+
			"\14\4\uffff\1\14\3\uffff\1\14\15\uffff\1\14\17\uffff\1\14\3\uffff\1\14"+
			"\20\uffff\1\14\7\uffff\1\14\2\uffff\2\14\4\uffff\2\14\1\uffff\1\14\15"+
			"\uffff\1\14",
			"",
			"\1\uffff",
			"",
			"\1\14\16\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\25\10\uffff"+
			"\1\14\5\uffff\1\14\6\uffff\1\14\4\uffff\1\14\7\uffff\1\14\1\uffff\1\14"+
			"\7\uffff\1\21\6\uffff\1\14\1\uffff\1\14\1\24\1\uffff\1\14\10\uffff\1"+
			"\14\4\uffff\1\14\3\uffff\1\14\15\uffff\1\14\7\uffff\1\14\6\uffff\2\14"+
			"\3\uffff\1\14\20\uffff\1\14\7\uffff\1\14\2\uffff\2\14\4\uffff\2\14\1"+
			"\uffff\1\14\11\uffff\1\14\3\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\12\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\10\uffff\1\14\1\uffff\1\14\1\uffff\3\14\2\uffff\2\14\1\uffff\1\14\4"+
			"\uffff\1\14\4\uffff\1\14\1\uffff\1\14\2\uffff\1\14\4\uffff\1\26\2\uffff"+
			"\1\14\1\uffff\1\14\1\uffff\1\14\2\uffff\1\16",
			"\1\14\16\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\30\10\uffff"+
			"\1\14\5\uffff\1\14\6\uffff\1\14\4\uffff\1\14\7\uffff\1\14\1\uffff\1\14"+
			"\7\uffff\1\21\6\uffff\1\14\1\uffff\1\14\1\27\1\uffff\1\14\10\uffff\1"+
			"\14\4\uffff\1\14\3\uffff\1\14\15\uffff\1\14\7\uffff\1\14\6\uffff\2\14"+
			"\3\uffff\1\14\20\uffff\1\14\7\uffff\1\14\2\uffff\2\14\4\uffff\2\14\1"+
			"\uffff\1\14\11\uffff\1\14\3\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\12\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\10\uffff\1\14\1\uffff\1\14\1\uffff\3\14\2\uffff\2\14\1\uffff\1\14\4"+
			"\uffff\1\14\4\uffff\1\14\1\uffff\1\14\2\uffff\1\14\4\uffff\1\31\2\uffff"+
			"\1\14\1\uffff\1\14\1\uffff\1\14\2\uffff\1\16",
			"\1\uffff",
			"\1\14\16\uffff\1\14\15\uffff\1\14\10\uffff\1\14\15\uffff\1\33\10\uffff"+
			"\1\14\5\uffff\1\14\6\uffff\1\14\4\uffff\1\14\7\uffff\1\14\1\uffff\1\14"+
			"\7\uffff\1\21\6\uffff\1\14\1\uffff\1\14\1\32\1\uffff\1\14\10\uffff\1"+
			"\14\4\uffff\1\14\3\uffff\1\14\15\uffff\1\14\7\uffff\1\14\6\uffff\2\14"+
			"\3\uffff\1\14\20\uffff\1\14\7\uffff\1\14\2\uffff\2\14\4\uffff\2\14\1"+
			"\uffff\1\14\11\uffff\1\14\3\uffff\1\14",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\12\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\10\uffff\1\14\1\uffff\1\14\1\uffff\3\14\2\uffff\2\14\1\uffff\1\14\4"+
			"\uffff\1\14\4\uffff\1\14\1\uffff\1\14\2\uffff\1\14\4\uffff\1\34\2\uffff"+
			"\1\14\1\uffff\1\14\1\uffff\1\14\2\uffff\1\16",
			"\1\uffff",
			"\1\uffff",
			"\2\14\2\uffff\1\14\1\uffff\1\14\1\uffff\1\14\1\uffff\1\14\12\uffff\1"+
			"\14\1\uffff\2\14\7\uffff\1\14\10\uffff\2\14\11\uffff\1\17\3\uffff\1\14"+
			"\10\uffff\1\14\1\uffff\1\14\1\uffff\3\14\2\uffff\2\14\1\uffff\1\14\4"+
			"\uffff\1\14\4\uffff\1\14\1\uffff\1\14\2\uffff\1\14\4\uffff\1\35\2\uffff"+
			"\1\14\1\uffff\1\14\1\uffff\1\14\2\uffff\1\16",
			"\1\uffff",
			"\1\uffff"
	};

	static final short[] DFA75_eot = DFA.unpackEncodedString(DFA75_eotS);
	static final short[] DFA75_eof = DFA.unpackEncodedString(DFA75_eofS);
	static final char[] DFA75_min = DFA.unpackEncodedStringToUnsignedChars(DFA75_minS);
	static final char[] DFA75_max = DFA.unpackEncodedStringToUnsignedChars(DFA75_maxS);
	static final short[] DFA75_accept = DFA.unpackEncodedString(DFA75_acceptS);
	static final short[] DFA75_special = DFA.unpackEncodedString(DFA75_specialS);
	static final short[][] DFA75_transition;

	static {
		int numStates = DFA75_transitionS.length;
		DFA75_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA75_transition[i] = DFA.unpackEncodedString(DFA75_transitionS[i]);
		}
	}

	protected class DFA75 extends DFA {

		public DFA75(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 75;
			this.eot = DFA75_eot;
			this.eof = DFA75_eof;
			this.min = DFA75_min;
			this.max = DFA75_max;
			this.accept = DFA75_accept;
			this.special = DFA75_special;
			this.transition = DFA75_transition;
		}
		@Override
		public String getDescription() {
			return "974:1: functionSpecifier : ( INLINE | NORETURN | abstractSpecifier | PURE -> ^( PURE ) | STATE_F -> ^( STATE_F ) | ( ( SYSTEM libraryName )=> SYSTEM libraryName ) -> ^( SYSTEM libraryName ) | SYSTEM -> ^( SYSTEM ABSENT ) | FATOMIC -> ^( FATOMIC ) | DEVICE | GLOBAL | differentiableSpecifier );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA75_19 = input.LA(1);
						 
						int index75_19 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_19==RSQUARE) ) {s = 22;}
						else if ( (LA75_19==SUB) ) {s = 14;}
						else if ( (LA75_19==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA75_19 >= AMPERSAND && LA75_19 <= AND)||LA75_19==ARROW||LA75_19==AT||LA75_19==BITOR||LA75_19==BITXOR||LA75_19==DIV||(LA75_19 >= DOT && LA75_19 <= DOTDOT)||LA75_19==EQUALS||(LA75_19 >= GT && LA75_19 <= GTE)||LA75_19==IMPLIES||LA75_19==LEXCON||LA75_19==LPAREN||(LA75_19 >= LSQUARE && LA75_19 <= LTE)||(LA75_19 >= MINUSMINUS && LA75_19 <= MOD)||LA75_19==NEQ||LA75_19==OR||LA75_19==PLUS||LA75_19==PLUSPLUS||LA75_19==QMARK||LA75_19==SHIFTLEFT||LA75_19==SHIFTRIGHT||LA75_19==STAR) ) {s = 12;}
						 
						input.seek(index75_19);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA75_24 = input.LA(1);
						 
						int index75_24 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_24==RSQUARE) ) {s = 28;}
						else if ( (LA75_24==SUB) ) {s = 14;}
						else if ( (LA75_24==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA75_24 >= AMPERSAND && LA75_24 <= AND)||LA75_24==ARROW||LA75_24==AT||LA75_24==BITOR||LA75_24==BITXOR||LA75_24==DIV||(LA75_24 >= DOT && LA75_24 <= DOTDOT)||LA75_24==EQUALS||(LA75_24 >= GT && LA75_24 <= GTE)||LA75_24==IMPLIES||LA75_24==LEXCON||LA75_24==LPAREN||(LA75_24 >= LSQUARE && LA75_24 <= LTE)||(LA75_24 >= MINUSMINUS && LA75_24 <= MOD)||LA75_24==NEQ||LA75_24==OR||LA75_24==PLUS||LA75_24==PLUSPLUS||LA75_24==QMARK||LA75_24==SHIFTLEFT||LA75_24==SHIFTRIGHT||LA75_24==STAR) ) {s = 12;}
						 
						input.seek(index75_24);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA75_26 = input.LA(1);
						 
						int index75_26 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_26);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA75_18 = input.LA(1);
						 
						int index75_18 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_18==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA75_18==SUB) ) {s = 20;}
						else if ( (LA75_18==IDENTIFIER) ) {s = 21;}
						else if ( (LA75_18==AMPERSAND||LA75_18==CHARACTER_CONSTANT||LA75_18==ELLIPSIS||LA75_18==FLOATING_CONSTANT||LA75_18==INTEGER_CONSTANT||LA75_18==LPAREN||LA75_18==MINUSMINUS||LA75_18==NOT||LA75_18==PLUS||LA75_18==PLUSPLUS||LA75_18==STAR||LA75_18==STRING_LITERAL||LA75_18==TILDE||LA75_18==ALIGNOF||LA75_18==BIG_O||LA75_18==CALLS||LA75_18==DERIV||LA75_18==EXISTS||(LA75_18 >= FORALL && LA75_18 <= GENERIC)||LA75_18==HERE||LA75_18==PROCNULL||LA75_18==RESULT||(LA75_18 >= SCOPEOF && LA75_18 <= SELF)||(LA75_18 >= SIZEOF && LA75_18 <= SPAWN)||LA75_18==STATE_NULL||LA75_18==UNIFORM||LA75_18==VALUE_AT) ) {s = 12;}
						 
						input.seek(index75_18);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA75_20 = input.LA(1);
						 
						int index75_20 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_20==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA75_20==SUB) ) {s = 23;}
						else if ( (LA75_20==IDENTIFIER) ) {s = 24;}
						else if ( (LA75_20==AMPERSAND||LA75_20==CHARACTER_CONSTANT||LA75_20==ELLIPSIS||LA75_20==FLOATING_CONSTANT||LA75_20==INTEGER_CONSTANT||LA75_20==LPAREN||LA75_20==MINUSMINUS||LA75_20==NOT||LA75_20==PLUS||LA75_20==PLUSPLUS||LA75_20==STAR||LA75_20==STRING_LITERAL||LA75_20==TILDE||LA75_20==ALIGNOF||LA75_20==BIG_O||LA75_20==CALLS||LA75_20==DERIV||LA75_20==EXISTS||(LA75_20 >= FORALL && LA75_20 <= GENERIC)||LA75_20==HERE||LA75_20==PROCNULL||LA75_20==RESULT||(LA75_20 >= SCOPEOF && LA75_20 <= SELF)||(LA75_20 >= SIZEOF && LA75_20 <= SPAWN)||LA75_20==STATE_NULL||LA75_20==UNIFORM||LA75_20==VALUE_AT) ) {s = 12;}
						 
						input.seek(index75_20);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA75_23 = input.LA(1);
						 
						int index75_23 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_23==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA75_23==SUB) ) {s = 26;}
						else if ( (LA75_23==IDENTIFIER) ) {s = 27;}
						else if ( (LA75_23==AMPERSAND||LA75_23==CHARACTER_CONSTANT||LA75_23==ELLIPSIS||LA75_23==FLOATING_CONSTANT||LA75_23==INTEGER_CONSTANT||LA75_23==LPAREN||LA75_23==MINUSMINUS||LA75_23==NOT||LA75_23==PLUS||LA75_23==PLUSPLUS||LA75_23==STAR||LA75_23==STRING_LITERAL||LA75_23==TILDE||LA75_23==ALIGNOF||LA75_23==BIG_O||LA75_23==CALLS||LA75_23==DERIV||LA75_23==EXISTS||(LA75_23 >= FORALL && LA75_23 <= GENERIC)||LA75_23==HERE||LA75_23==PROCNULL||LA75_23==RESULT||(LA75_23 >= SCOPEOF && LA75_23 <= SELF)||(LA75_23 >= SIZEOF && LA75_23 <= SPAWN)||LA75_23==STATE_NULL||LA75_23==UNIFORM||LA75_23==VALUE_AT) ) {s = 12;}
						 
						input.seek(index75_23);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA75_21 = input.LA(1);
						 
						int index75_21 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_21==RSQUARE) ) {s = 25;}
						else if ( (LA75_21==SUB) ) {s = 14;}
						else if ( (LA75_21==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA75_21 >= AMPERSAND && LA75_21 <= AND)||LA75_21==ARROW||LA75_21==AT||LA75_21==BITOR||LA75_21==BITXOR||LA75_21==DIV||(LA75_21 >= DOT && LA75_21 <= DOTDOT)||LA75_21==EQUALS||(LA75_21 >= GT && LA75_21 <= GTE)||LA75_21==IMPLIES||LA75_21==LEXCON||LA75_21==LPAREN||(LA75_21 >= LSQUARE && LA75_21 <= LTE)||(LA75_21 >= MINUSMINUS && LA75_21 <= MOD)||LA75_21==NEQ||LA75_21==OR||LA75_21==PLUS||LA75_21==PLUSPLUS||LA75_21==QMARK||LA75_21==SHIFTLEFT||LA75_21==SHIFTRIGHT||LA75_21==STAR) ) {s = 12;}
						 
						input.seek(index75_21);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA75_27 = input.LA(1);
						 
						int index75_27 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_27==RSQUARE) ) {s = 29;}
						else if ( (LA75_27==SUB) ) {s = 14;}
						else if ( (LA75_27==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( ((LA75_27 >= AMPERSAND && LA75_27 <= AND)||LA75_27==ARROW||LA75_27==AT||LA75_27==BITOR||LA75_27==BITXOR||LA75_27==DIV||(LA75_27 >= DOT && LA75_27 <= DOTDOT)||LA75_27==EQUALS||(LA75_27 >= GT && LA75_27 <= GTE)||LA75_27==IMPLIES||LA75_27==LEXCON||LA75_27==LPAREN||(LA75_27 >= LSQUARE && LA75_27 <= LTE)||(LA75_27 >= MINUSMINUS && LA75_27 <= MOD)||LA75_27==NEQ||LA75_27==OR||LA75_27==PLUS||LA75_27==PLUSPLUS||LA75_27==QMARK||LA75_27==SHIFTLEFT||LA75_27==SHIFTRIGHT||LA75_27==STAR) ) {s = 12;}
						 
						input.seek(index75_27);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA75_14 = input.LA(1);
						 
						int index75_14 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_14==RSQUARE) && (synpred28_CivlCParser())) {s = 17;}
						else if ( (LA75_14==SUB) ) {s = 18;}
						else if ( (LA75_14==IDENTIFIER) ) {s = 19;}
						else if ( (LA75_14==AMPERSAND||LA75_14==CHARACTER_CONSTANT||LA75_14==ELLIPSIS||LA75_14==FLOATING_CONSTANT||LA75_14==INTEGER_CONSTANT||LA75_14==LPAREN||LA75_14==MINUSMINUS||LA75_14==NOT||LA75_14==PLUS||LA75_14==PLUSPLUS||LA75_14==STAR||LA75_14==STRING_LITERAL||LA75_14==TILDE||LA75_14==ALIGNOF||LA75_14==BIG_O||LA75_14==CALLS||LA75_14==DERIV||LA75_14==GENERIC||LA75_14==HERE||LA75_14==PROCNULL||LA75_14==RESULT||(LA75_14 >= SCOPEOF && LA75_14 <= SELF)||(LA75_14 >= SIZEOF && LA75_14 <= SPAWN)||LA75_14==STATE_NULL||LA75_14==VALUE_AT) ) {s = 12;}
						 
						input.seek(index75_14);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA75_13 = input.LA(1);
						 
						int index75_13 = input.index();
						input.rewind();
						s = -1;
						if ( (LA75_13==SUB) ) {s = 14;}
						else if ( (LA75_13==IDENTIFIER) && (synpred28_CivlCParser())) {s = 15;}
						else if ( (LA75_13==RSQUARE) ) {s = 16;}
						else if ( ((LA75_13 >= AMPERSAND && LA75_13 <= AND)||(LA75_13 >= ARROW && LA75_13 <= BITXOREQ)||(LA75_13 >= DIV && LA75_13 <= DOTDOT)||LA75_13==EQUALS||(LA75_13 >= GT && LA75_13 <= GTE)||LA75_13==IMPLIES||LA75_13==LEXCON||LA75_13==LPAREN||(LA75_13 >= LSQUARE && LA75_13 <= LTE)||(LA75_13 >= MINUSMINUS && LA75_13 <= NEQ)||LA75_13==OR||(LA75_13 >= PLUS && LA75_13 <= PLUSPLUS)||LA75_13==QMARK||(LA75_13 >= SHIFTLEFT && LA75_13 <= STAREQ)||LA75_13==SUBEQ) ) {s = 12;}
						 
						input.seek(index75_13);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA75_16 = input.LA(1);
						 
						int index75_16 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_16);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA75_22 = input.LA(1);
						 
						int index75_22 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_22);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA75_25 = input.LA(1);
						 
						int index75_25 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_25);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA75_28 = input.LA(1);
						 
						int index75_28 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_28);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA75_29 = input.LA(1);
						 
						int index75_29 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred28_CivlCParser()) ) {s = 17;}
						else if ( (true) ) {s = 12;}
						 
						input.seek(index75_29);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 75, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA84_eotS =
		"\7\uffff";
	static final String DFA84_eofS =
		"\7\uffff";
	static final String DFA84_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA84_maxS =
		"\2\u00da\1\uffff\1\u00d8\3\uffff";
	static final String DFA84_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA84_specialS =
		"\7\uffff}>";
	static final String[] DFA84_transitionS = {
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1\2"+
			"\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\2\6\uffff\1\3\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\2\uffff\1\1\1\uffff"+
			"\1\2\3\uffff\1\2\10\uffff\1\1\4\uffff\1\2\17\uffff\1\2\3\uffff\1\2\2"+
			"\uffff\1\1\7\uffff\1\1\5\uffff\1\2\6\uffff\1\1\1\2\2\uffff\2\2\4\uffff"+
			"\2\2\1\uffff\1\2\1\4\14\uffff\1\2\1\uffff\1\1",
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1"+
			"\2\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\2\6\uffff\1\3\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\2\uffff\1\1\1\uffff"+
			"\1\2\3\uffff\1\2\10\uffff\1\1\4\uffff\1\2\17\uffff\1\2\3\uffff\1\2\2"+
			"\uffff\1\1\7\uffff\1\1\5\uffff\1\2\6\uffff\1\1\1\2\2\uffff\2\2\4\uffff"+
			"\2\2\1\uffff\1\2\1\5\14\uffff\1\2\1\uffff\1\1",
			"",
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1"+
			"\2\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\6\6\uffff\1\2\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\4\uffff\1\2\3\uffff"+
			"\1\2\15\uffff\1\2\7\uffff\1\2\6\uffff\2\2\3\uffff\1\2\20\uffff\1\2\7"+
			"\uffff\1\2\2\uffff\2\2\4\uffff\2\2\1\uffff\1\2\11\uffff\1\2\3\uffff\1"+
			"\2",
			"",
			"",
			""
	};

	static final short[] DFA84_eot = DFA.unpackEncodedString(DFA84_eotS);
	static final short[] DFA84_eof = DFA.unpackEncodedString(DFA84_eofS);
	static final char[] DFA84_min = DFA.unpackEncodedStringToUnsignedChars(DFA84_minS);
	static final char[] DFA84_max = DFA.unpackEncodedStringToUnsignedChars(DFA84_maxS);
	static final short[] DFA84_accept = DFA.unpackEncodedString(DFA84_acceptS);
	static final short[] DFA84_special = DFA.unpackEncodedString(DFA84_specialS);
	static final short[][] DFA84_transition;

	static {
		int numStates = DFA84_transitionS.length;
		DFA84_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA84_transition[i] = DFA.unpackEncodedString(DFA84_transitionS[i]);
		}
	}

	protected class DFA84 extends DFA {

		public DFA84(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 84;
			this.eot = DFA84_eot;
			this.eof = DFA84_eof;
			this.min = DFA84_min;
			this.max = DFA84_max;
			this.accept = DFA84_accept;
			this.special = DFA84_special;
			this.transition = DFA84_transition;
		}
		@Override
		public String getDescription() {
			return "1080:4: ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt RSQUARE ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression RSQUARE ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression RSQUARE ) | typeQualifierList_opt STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt STAR RSQUARE ) )";
		}
	}

	static final String DFA85_eotS =
		"\11\uffff";
	static final String DFA85_eofS =
		"\11\uffff";
	static final String DFA85_minS =
		"\1\70\1\uffff\1\25\1\uffff\1\41\1\0\1\25\1\uffff\1\0";
	static final String DFA85_maxS =
		"\1\u00da\1\uffff\1\u00da\1\uffff\1\u00da\1\0\1\u00da\1\uffff\1\0";
	static final String DFA85_acceptS =
		"\1\uffff\1\1\1\uffff\1\3\3\uffff\1\2\1\uffff";
	static final String DFA85_specialS =
		"\5\uffff\1\0\2\uffff\1\1}>";
	static final String[] DFA85_transitionS = {
			"\1\2\52\uffff\1\3\24\uffff\2\1\3\uffff\2\1\2\uffff\1\1\4\uffff\1\1\4"+
			"\uffff\2\1\5\uffff\2\1\1\uffff\2\1\1\uffff\1\1\2\uffff\2\1\1\uffff\1"+
			"\1\3\uffff\1\1\4\uffff\3\1\2\uffff\3\1\1\uffff\1\1\6\uffff\2\1\1\uffff"+
			"\2\1\1\uffff\1\1\6\uffff\3\1\2\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
			"\1\1\1\uffff\3\1\1\uffff\2\1\2\uffff\2\1",
			"",
			"\1\4\42\uffff\1\1\16\uffff\1\1\1\uffff\1\1\31\uffff\1\5\10\uffff\1\1"+
			"\13\uffff\2\1\3\uffff\2\1\2\uffff\1\1\4\uffff\1\1\4\uffff\2\1\5\uffff"+
			"\2\1\1\uffff\2\1\1\uffff\1\1\2\uffff\2\1\1\uffff\1\1\3\uffff\1\1\4\uffff"+
			"\3\1\2\uffff\3\1\1\uffff\1\1\6\uffff\2\1\1\uffff\2\1\1\uffff\1\1\6\uffff"+
			"\3\1\2\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff\3\1\1\uffff"+
			"\2\1\2\uffff\2\1",
			"",
			"\1\1\26\uffff\1\6\77\uffff\2\1\3\uffff\2\1\2\uffff\1\1\4\uffff\1\1\4"+
			"\uffff\2\1\5\uffff\2\1\1\uffff\2\1\1\uffff\1\1\2\uffff\2\1\1\uffff\1"+
			"\1\3\uffff\1\1\4\uffff\3\1\2\uffff\3\1\1\uffff\1\1\6\uffff\2\1\1\uffff"+
			"\2\1\1\uffff\1\1\6\uffff\3\1\2\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff"+
			"\1\1\1\uffff\3\1\1\uffff\2\1\2\uffff\2\1",
			"\1\uffff",
			"\1\4\42\uffff\1\1\16\uffff\1\1\1\uffff\1\1\31\uffff\1\10\10\uffff\1"+
			"\1\13\uffff\2\1\3\uffff\2\1\2\uffff\1\1\4\uffff\1\1\4\uffff\2\1\5\uffff"+
			"\2\1\1\uffff\2\1\1\uffff\1\1\2\uffff\2\1\1\uffff\1\1\3\uffff\1\1\4\uffff"+
			"\3\1\2\uffff\3\1\1\uffff\1\1\6\uffff\2\1\1\uffff\2\1\1\uffff\1\1\6\uffff"+
			"\3\1\2\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff\1\1\1\uffff\3\1\1\uffff"+
			"\2\1\2\uffff\2\1",
			"",
			"\1\uffff"
	};

	static final short[] DFA85_eot = DFA.unpackEncodedString(DFA85_eotS);
	static final short[] DFA85_eof = DFA.unpackEncodedString(DFA85_eofS);
	static final char[] DFA85_min = DFA.unpackEncodedStringToUnsignedChars(DFA85_minS);
	static final char[] DFA85_max = DFA.unpackEncodedStringToUnsignedChars(DFA85_maxS);
	static final short[] DFA85_accept = DFA.unpackEncodedString(DFA85_acceptS);
	static final short[] DFA85_special = DFA.unpackEncodedString(DFA85_specialS);
	static final short[][] DFA85_transition;

	static {
		int numStates = DFA85_transitionS.length;
		DFA85_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA85_transition[i] = DFA.unpackEncodedString(DFA85_transitionS[i]);
		}
	}

	protected class DFA85 extends DFA {

		public DFA85(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 85;
			this.eot = DFA85_eot;
			this.eof = DFA85_eof;
			this.min = DFA85_min;
			this.max = DFA85_max;
			this.accept = DFA85_accept;
			this.special = DFA85_special;
			this.transition = DFA85_transition;
		}
		@Override
		public String getDescription() {
			return "1108:4: ( parameterTypeList RPAREN -> ^( FUNCTION_SUFFIX LPAREN parameterTypeList RPAREN ) | identifierList RPAREN -> ^( FUNCTION_SUFFIX LPAREN identifierList RPAREN ) | RPAREN -> ^( FUNCTION_SUFFIX LPAREN ABSENT RPAREN ) )";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA85_5 = input.LA(1);
						 
						int index85_5 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {s = 1;}
						else if ( (true) ) {s = 7;}
						 
						input.seek(index85_5);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA85_8 = input.LA(1);
						 
						int index85_8 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {s = 1;}
						else if ( (true) ) {s = 7;}
						 
						input.seek(index85_8);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 85, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA97_eotS =
		"\6\uffff";
	static final String DFA97_eofS =
		"\1\uffff\1\4\1\uffff\1\4\2\uffff";
	static final String DFA97_minS =
		"\1\107\1\24\1\uffff\1\24\2\uffff";
	static final String DFA97_maxS =
		"\1\154\1\u00da\1\uffff\1\u00da\2\uffff";
	static final String DFA97_acceptS =
		"\2\uffff\1\2\1\uffff\1\1\1\3";
	static final String DFA97_specialS =
		"\6\uffff}>";
	static final String[] DFA97_transitionS = {
			"\1\2\1\uffff\1\2\42\uffff\1\1",
			"\2\4\42\uffff\1\4\16\uffff\1\5\1\uffff\1\5\31\uffff\1\4\10\uffff\1\1"+
			"\20\uffff\1\3\16\uffff\1\3\33\uffff\1\3\7\uffff\1\3\14\uffff\1\3\34\uffff"+
			"\1\3",
			"",
			"\2\4\42\uffff\1\4\16\uffff\1\5\1\uffff\1\5\31\uffff\1\4\10\uffff\1\1"+
			"\20\uffff\1\3\16\uffff\1\3\33\uffff\1\3\7\uffff\1\3\14\uffff\1\3\34\uffff"+
			"\1\3",
			"",
			""
	};

	static final short[] DFA97_eot = DFA.unpackEncodedString(DFA97_eotS);
	static final short[] DFA97_eof = DFA.unpackEncodedString(DFA97_eofS);
	static final char[] DFA97_min = DFA.unpackEncodedStringToUnsignedChars(DFA97_minS);
	static final char[] DFA97_max = DFA.unpackEncodedStringToUnsignedChars(DFA97_maxS);
	static final short[] DFA97_accept = DFA.unpackEncodedString(DFA97_acceptS);
	static final short[] DFA97_special = DFA.unpackEncodedString(DFA97_specialS);
	static final short[][] DFA97_transition;

	static {
		int numStates = DFA97_transitionS.length;
		DFA97_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA97_transition[i] = DFA.unpackEncodedString(DFA97_transitionS[i]);
		}
	}

	protected class DFA97 extends DFA {

		public DFA97(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 97;
			this.eot = DFA97_eot;
			this.eof = DFA97_eof;
			this.min = DFA97_min;
			this.max = DFA97_max;
			this.accept = DFA97_accept;
			this.special = DFA97_special;
			this.transition = DFA97_transition;
		}
		@Override
		public String getDescription() {
			return "1260:1: abstractDeclarator : ( pointer -> ^( ABSTRACT_DECLARATOR pointer ABSENT ) | directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR ABSENT directAbstractDeclarator ) | pointer directAbstractDeclarator -> ^( ABSTRACT_DECLARATOR pointer directAbstractDeclarator ) );";
		}
	}

	static final String DFA101_eotS =
		"\7\uffff";
	static final String DFA101_eofS =
		"\7\uffff";
	static final String DFA101_minS =
		"\2\4\1\uffff\1\4\3\uffff";
	static final String DFA101_maxS =
		"\2\u00da\1\uffff\1\u00d8\3\uffff";
	static final String DFA101_acceptS =
		"\2\uffff\1\1\1\uffff\1\2\1\3\1\4";
	static final String DFA101_specialS =
		"\7\uffff}>";
	static final String[] DFA101_transitionS = {
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1\2"+
			"\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\2\6\uffff\1\3\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\2\uffff\1\1\1\uffff"+
			"\1\2\3\uffff\1\2\10\uffff\1\1\4\uffff\1\2\17\uffff\1\2\3\uffff\1\2\2"+
			"\uffff\1\1\7\uffff\1\1\5\uffff\1\2\6\uffff\1\1\1\2\2\uffff\2\2\4\uffff"+
			"\2\2\1\uffff\1\2\1\4\14\uffff\1\2\1\uffff\1\1",
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1"+
			"\2\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\2\6\uffff\1\2\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\2\uffff\1\1\1\uffff"+
			"\1\2\3\uffff\1\2\10\uffff\1\1\4\uffff\1\2\17\uffff\1\2\3\uffff\1\2\2"+
			"\uffff\1\1\7\uffff\1\1\5\uffff\1\2\6\uffff\1\1\1\2\2\uffff\2\2\4\uffff"+
			"\2\2\1\uffff\1\2\1\5\14\uffff\1\2\1\uffff\1\1",
			"",
			"\1\2\16\uffff\1\2\15\uffff\1\2\10\uffff\1\2\15\uffff\1\2\10\uffff\1"+
			"\2\5\uffff\1\2\6\uffff\1\2\4\uffff\1\2\7\uffff\1\2\1\uffff\1\2\7\uffff"+
			"\1\6\6\uffff\1\2\1\uffff\2\2\1\uffff\1\2\10\uffff\1\2\4\uffff\1\2\3\uffff"+
			"\1\2\15\uffff\1\2\7\uffff\1\2\6\uffff\2\2\3\uffff\1\2\20\uffff\1\2\7"+
			"\uffff\1\2\2\uffff\2\2\4\uffff\2\2\1\uffff\1\2\11\uffff\1\2\3\uffff\1"+
			"\2",
			"",
			"",
			""
	};

	static final short[] DFA101_eot = DFA.unpackEncodedString(DFA101_eotS);
	static final short[] DFA101_eof = DFA.unpackEncodedString(DFA101_eofS);
	static final char[] DFA101_min = DFA.unpackEncodedStringToUnsignedChars(DFA101_minS);
	static final char[] DFA101_max = DFA.unpackEncodedStringToUnsignedChars(DFA101_maxS);
	static final short[] DFA101_accept = DFA.unpackEncodedString(DFA101_acceptS);
	static final short[] DFA101_special = DFA.unpackEncodedString(DFA101_specialS);
	static final short[][] DFA101_transition;

	static {
		int numStates = DFA101_transitionS.length;
		DFA101_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA101_transition[i] = DFA.unpackEncodedString(DFA101_transitionS[i]);
		}
	}

	protected class DFA101 extends DFA {

		public DFA101(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 101;
			this.eot = DFA101_eot;
			this.eof = DFA101_eof;
			this.min = DFA101_min;
			this.max = DFA101_max;
			this.accept = DFA101_accept;
			this.special = DFA101_special;
			this.transition = DFA101_transition;
		}
		@Override
		public String getDescription() {
			return "1331:7: ( typeQualifierList_opt assignmentExpression_opt RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT typeQualifierList_opt assignmentExpression_opt ) | STATIC typeQualifierList_opt assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList_opt assignmentExpression ) | typeQualifierList STATIC assignmentExpression RSQUARE -> ^( ARRAY_SUFFIX LSQUARE STATIC typeQualifierList assignmentExpression ) | STAR RSQUARE -> ^( ARRAY_SUFFIX LSQUARE ABSENT ABSENT STAR ) )";
		}
	}

	static final String DFA120_eotS =
		"\74\uffff";
	static final String DFA120_eofS =
		"\74\uffff";
	static final String DFA120_minS =
		"\1\4\22\uffff\1\0\50\uffff";
	static final String DFA120_maxS =
		"\1\u00da\22\uffff\1\0\50\uffff";
	static final String DFA120_acceptS =
		"\1\uffff\1\1\42\uffff\1\2\27\uffff";
	static final String DFA120_specialS =
		"\23\uffff\1\0\50\uffff}>";
	static final String[] DFA120_transitionS = {
			"\1\44\16\uffff\1\44\15\uffff\1\44\10\uffff\1\44\15\uffff\1\23\10\uffff"+
			"\1\44\5\uffff\1\44\6\uffff\1\44\4\uffff\1\44\7\uffff\1\44\1\uffff\1\44"+
			"\11\uffff\1\44\4\uffff\1\44\1\uffff\2\44\1\uffff\1\44\6\uffff\2\1\1\44"+
			"\2\uffff\2\1\1\44\1\uffff\1\1\1\uffff\1\44\2\uffff\1\1\4\uffff\2\1\4"+
			"\uffff\1\44\2\1\1\uffff\2\1\1\uffff\1\1\1\44\1\uffff\2\1\1\uffff\1\1"+
			"\1\uffff\2\44\1\1\2\uffff\1\44\1\uffff\3\1\2\uffff\3\1\1\uffff\1\1\5"+
			"\uffff\1\44\2\1\1\uffff\2\1\1\uffff\1\1\1\44\2\uffff\2\44\1\uffff\3\1"+
			"\2\44\1\1\1\44\3\1\1\uffff\1\1\1\uffff\3\1\1\44\2\1\1\uffff\1\44\2\1",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"\1\uffff",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			"",
			""
	};

	static final short[] DFA120_eot = DFA.unpackEncodedString(DFA120_eotS);
	static final short[] DFA120_eof = DFA.unpackEncodedString(DFA120_eofS);
	static final char[] DFA120_min = DFA.unpackEncodedStringToUnsignedChars(DFA120_minS);
	static final char[] DFA120_max = DFA.unpackEncodedStringToUnsignedChars(DFA120_maxS);
	static final short[] DFA120_accept = DFA.unpackEncodedString(DFA120_acceptS);
	static final short[] DFA120_special = DFA.unpackEncodedString(DFA120_specialS);
	static final short[][] DFA120_transition;

	static {
		int numStates = DFA120_transitionS.length;
		DFA120_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA120_transition[i] = DFA.unpackEncodedString(DFA120_transitionS[i]);
		}
	}

	protected class DFA120 extends DFA {

		public DFA120(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 120;
			this.eot = DFA120_eot;
			this.eof = DFA120_eof;
			this.min = DFA120_min;
			this.max = DFA120_max;
			this.accept = DFA120_accept;
			this.special = DFA120_special;
			this.transition = DFA120_transition;
		}
		@Override
		public String getDescription() {
			return "1568:4: (d= declaration e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $d $e1 $e2 $s $i) |e0= expression_opt SEMI e1= expression_opt SEMI e2= expression_opt RPAREN i= invariant_opt s= statementWithScope -> ^( FOR $e0 $e1 $e2 $s $i) )";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA120_19 = input.LA(1);
						 
						int index120_19 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {s = 1;}
						else if ( (true) ) {s = 36;}
						 
						input.seek(index120_19);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 120, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	static final String DFA148_eotS =
		"\127\uffff";
	static final String DFA148_eofS =
		"\127\uffff";
	static final String DFA148_minS =
		"\1\4\44\0\62\uffff";
	static final String DFA148_maxS =
		"\1\u00dd\44\0\62\uffff";
	static final String DFA148_acceptS =
		"\45\uffff\1\3\1\4\1\5\1\uffff\1\6\53\uffff\1\1\1\2";
	static final String DFA148_specialS =
		"\1\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\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+
		"\1\34\1\35\1\36\1\37\1\40\1\41\1\42\1\43\62\uffff}>";
	static final String[] DFA148_transitionS = {
			"\1\51\2\uffff\1\47\13\uffff\1\51\15\uffff\1\51\10\uffff\1\51\15\uffff"+
			"\1\1\1\51\5\uffff\1\47\1\uffff\1\51\2\uffff\1\51\2\uffff\1\2\6\uffff"+
			"\1\51\4\uffff\1\51\7\uffff\1\51\1\uffff\1\51\11\uffff\1\51\4\uffff\1"+
			"\3\1\uffff\2\51\1\uffff\1\51\6\uffff\1\34\1\44\2\51\1\uffff\1\23\1\5"+
			"\1\51\1\uffff\1\17\3\51\1\uffff\1\7\3\51\1\uffff\1\20\1\31\1\uffff\2"+
			"\51\1\uffff\1\51\1\41\1\43\1\51\1\26\1\14\1\uffff\1\25\1\51\1\uffff\1"+
			"\5\1\40\1\uffff\1\13\3\51\1\42\1\51\1\uffff\1\51\1\uffff\1\32\1\31\1"+
			"\11\2\uffff\1\12\1\30\1\33\1\uffff\1\31\1\uffff\1\51\2\uffff\1\46\1\51"+
			"\1\35\1\22\1\uffff\1\21\1\5\1\uffff\1\31\5\51\1\uffff\1\5\1\10\1\15\2"+
			"\51\1\36\1\51\1\5\1\45\1\24\1\51\1\37\1\uffff\1\5\1\4\1\27\1\51\1\24"+
			"\1\16\2\51\1\6\1\31\3\51",
			"\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",
			"\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[] DFA148_eot = DFA.unpackEncodedString(DFA148_eotS);
	static final short[] DFA148_eof = DFA.unpackEncodedString(DFA148_eofS);
	static final char[] DFA148_min = DFA.unpackEncodedStringToUnsignedChars(DFA148_minS);
	static final char[] DFA148_max = DFA.unpackEncodedStringToUnsignedChars(DFA148_maxS);
	static final short[] DFA148_accept = DFA.unpackEncodedString(DFA148_acceptS);
	static final short[] DFA148_special = DFA.unpackEncodedString(DFA148_specialS);
	static final short[][] DFA148_transition;

	static {
		int numStates = DFA148_transitionS.length;
		DFA148_transition = new short[numStates][];
		for (int i=0; i<numStates; i++) {
			DFA148_transition[i] = DFA.unpackEncodedString(DFA148_transitionS[i]);
		}
	}

	protected class DFA148 extends DFA {

		public DFA148(BaseRecognizer recognizer) {
			this.recognizer = recognizer;
			this.decisionNumber = 148;
			this.eot = DFA148_eot;
			this.eof = DFA148_eof;
			this.min = DFA148_min;
			this.max = DFA148_max;
			this.accept = DFA148_accept;
			this.special = DFA148_special;
			this.transition = DFA148_transition;
		}
		@Override
		public String getDescription() {
			return "1836:1: blockItem : ( ( declarator contract declarationList_opt LCURLY )=> functionDefinition | ( declarationSpecifiers declarator contract declarationList_opt LCURLY )=> functionDefinition | declaration | pragma | annotation | statement );";
		}
		@Override
		public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
			TokenStream input = (TokenStream)_input;
			int _s = s;
			switch ( s ) {
					case 0 : 
						int LA148_1 = input.LA(1);
						 
						int index148_1 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 85;}
						else if ( (synpred32_CivlCParser()) ) {s = 86;}
						else if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&(!DeclarationScope_stack.peek().typedefNameUsed && isTypeName(input.LT(1).getText())))) ) {s = 37;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index148_1);
						if ( s>=0 ) return s;
						break;

					case 1 : 
						int LA148_2 = input.LA(1);
						 
						int index148_2 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 85;}
						else if ( (synpred32_CivlCParser()) ) {s = 86;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index148_2);
						if ( s>=0 ) return s;
						break;

					case 2 : 
						int LA148_3 = input.LA(1);
						 
						int index148_3 = input.index();
						input.rewind();
						s = -1;
						if ( (synpred31_CivlCParser()) ) {s = 85;}
						else if ( (synpred32_CivlCParser()) ) {s = 86;}
						else if ( (true) ) {s = 41;}
						 
						input.seek(index148_3);
						if ( s>=0 ) return s;
						break;

					case 3 : 
						int LA148_4 = input.LA(1);
						 
						int index148_4 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_4);
						if ( s>=0 ) return s;
						break;

					case 4 : 
						int LA148_5 = input.LA(1);
						 
						int index148_5 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_5);
						if ( s>=0 ) return s;
						break;

					case 5 : 
						int LA148_6 = input.LA(1);
						 
						int index148_6 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_6);
						if ( s>=0 ) return s;
						break;

					case 6 : 
						int LA148_7 = input.LA(1);
						 
						int index148_7 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_7);
						if ( s>=0 ) return s;
						break;

					case 7 : 
						int LA148_8 = input.LA(1);
						 
						int index148_8 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_8);
						if ( s>=0 ) return s;
						break;

					case 8 : 
						int LA148_9 = input.LA(1);
						 
						int index148_9 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_9);
						if ( s>=0 ) return s;
						break;

					case 9 : 
						int LA148_10 = input.LA(1);
						 
						int index148_10 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_10);
						if ( s>=0 ) return s;
						break;

					case 10 : 
						int LA148_11 = input.LA(1);
						 
						int index148_11 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_11);
						if ( s>=0 ) return s;
						break;

					case 11 : 
						int LA148_12 = input.LA(1);
						 
						int index148_12 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_12);
						if ( s>=0 ) return s;
						break;

					case 12 : 
						int LA148_13 = input.LA(1);
						 
						int index148_13 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_13);
						if ( s>=0 ) return s;
						break;

					case 13 : 
						int LA148_14 = input.LA(1);
						 
						int index148_14 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_14);
						if ( s>=0 ) return s;
						break;

					case 14 : 
						int LA148_15 = input.LA(1);
						 
						int index148_15 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_15);
						if ( s>=0 ) return s;
						break;

					case 15 : 
						int LA148_16 = input.LA(1);
						 
						int index148_16 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_16);
						if ( s>=0 ) return s;
						break;

					case 16 : 
						int LA148_17 = input.LA(1);
						 
						int index148_17 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_17);
						if ( s>=0 ) return s;
						break;

					case 17 : 
						int LA148_18 = input.LA(1);
						 
						int index148_18 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_18);
						if ( s>=0 ) return s;
						break;

					case 18 : 
						int LA148_19 = input.LA(1);
						 
						int index148_19 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_19);
						if ( s>=0 ) return s;
						break;

					case 19 : 
						int LA148_20 = input.LA(1);
						 
						int index148_20 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_20);
						if ( s>=0 ) return s;
						break;

					case 20 : 
						int LA148_21 = input.LA(1);
						 
						int index148_21 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_21);
						if ( s>=0 ) return s;
						break;

					case 21 : 
						int LA148_22 = input.LA(1);
						 
						int index148_22 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_22);
						if ( s>=0 ) return s;
						break;

					case 22 : 
						int LA148_23 = input.LA(1);
						 
						int index148_23 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_23);
						if ( s>=0 ) return s;
						break;

					case 23 : 
						int LA148_24 = input.LA(1);
						 
						int index148_24 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_24);
						if ( s>=0 ) return s;
						break;

					case 24 : 
						int LA148_25 = input.LA(1);
						 
						int index148_25 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_25);
						if ( s>=0 ) return s;
						break;

					case 25 : 
						int LA148_26 = input.LA(1);
						 
						int index148_26 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_26);
						if ( s>=0 ) return s;
						break;

					case 26 : 
						int LA148_27 = input.LA(1);
						 
						int index148_27 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_27);
						if ( s>=0 ) return s;
						break;

					case 27 : 
						int LA148_28 = input.LA(1);
						 
						int index148_28 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_28);
						if ( s>=0 ) return s;
						break;

					case 28 : 
						int LA148_29 = input.LA(1);
						 
						int index148_29 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_29);
						if ( s>=0 ) return s;
						break;

					case 29 : 
						int LA148_30 = input.LA(1);
						 
						int index148_30 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_30);
						if ( s>=0 ) return s;
						break;

					case 30 : 
						int LA148_31 = input.LA(1);
						 
						int index148_31 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_31);
						if ( s>=0 ) return s;
						break;

					case 31 : 
						int LA148_32 = input.LA(1);
						 
						int index148_32 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_32);
						if ( s>=0 ) return s;
						break;

					case 32 : 
						int LA148_33 = input.LA(1);
						 
						int index148_33 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_33);
						if ( s>=0 ) return s;
						break;

					case 33 : 
						int LA148_34 = input.LA(1);
						 
						int index148_34 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_34);
						if ( s>=0 ) return s;
						break;

					case 34 : 
						int LA148_35 = input.LA(1);
						 
						int index148_35 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_35);
						if ( s>=0 ) return s;
						break;

					case 35 : 
						int LA148_36 = input.LA(1);
						 
						int index148_36 = input.index();
						input.rewind();
						s = -1;
						if ( (((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )&&synpred31_CivlCParser())) ) {s = 85;}
						else if ( ((synpred32_CivlCParser()&&(!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI ))) ) {s = 86;}
						else if ( ((!DeclarationScope_stack.peek().isTypedef || input.LT(2).getType() != SEMI )) ) {s = 37;}
						 
						input.seek(index148_36);
						if ( s>=0 ) return s;
						break;
			}
			if (state.backtracking>0) {state.failed=true; return -1;}
			NoViableAltException nvae =
				new NoViableAltException(getDescription(), 148, _s, input);
			error(nvae);
			throw nvae;
		}
	}

	public static final BitSet FOLLOW_quantifier_in_quantifiedExpression1140 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000280L});
	public static final BitSet FOLLOW_intervalSeq_in_quantifiedExpression1142 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_quantifiedExpression1144 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_quantifiedExpression1146 = new BitSet(new long[]{0x0000000000001000L,0x0000000800000000L});
	public static final BitSet FOLLOW_BITOR_in_quantifiedExpression1158 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_conditionalExpression_in_quantifiedExpression1175 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_quantifiedExpression1181 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1196 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1212 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_quantifiedExpression1270 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_quantifiedExpression1286 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerationConstant_in_constant1354 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_constant1359 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOATING_CONSTANT_in_constant1364 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHARACTER_CONSTANT_in_constant1369 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SELF_in_constant1374 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROCNULL_in_constant1382 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATE_NULL_in_constant1390 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RESULT_in_constant1395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HERE_in_constant1400 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELLIPSIS_in_constant1408 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerationConstant1423 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constant_in_primaryExpression1447 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_primaryExpression1452 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_primaryExpression1457 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1465 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_compoundStatement_in_primaryExpression1467 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1469 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_primaryExpression1494 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_primaryExpression1496 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_primaryExpression1498 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericSelection_in_primaryExpression1523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_derivativeExpression_in_primaryExpression1528 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GENERIC_in_genericSelection1541 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_genericSelection1543 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericSelection1545 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_genericSelection1547 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041609842L,0x0000000006682060L});
	public static final BitSet FOLLOW_genericAssocList_in_genericSelection1549 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_genericSelection1551 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DERIV_in_derivativeExpression1582 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_LSQUARE_in_derivativeExpression1584 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_derivativeExpression1586 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_derivativeExpression1588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_partialList_in_derivativeExpression1590 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_derivativeExpression1592 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_derivativeExpression1602 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_derivativeExpression1604 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_derivativeExpression1606 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_partial_in_partialList1653 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_partialList1656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_partial_in_partialList1658 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_LCURLY_in_partial1682 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_partial1684 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_partial1686 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_partial1688 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_partial1690 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1721 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_genericAssocList1724 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041609842L,0x0000000006682060L});
	public static final BitSet FOLLOW_genericAssociation_in_genericAssocList1726 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_typeName_in_genericAssociation1758 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1760 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_genericAssociation1785 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_genericAssociation1787 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_genericAssociation1789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_postfixExpression1821 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_LSQUARE_in_postfixExpression1853 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_postfixExpression1855 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_postfixExpression1857 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression1962 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression1964 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression1966 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_LEXCON_in_postfixExpression2038 = new BitSet(new long[]{0x0100040200080010L,0x8402D00428084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression2042 = new BitSet(new long[]{0x0000000000000000L,0x0000000400000000L});
	public static final BitSet FOLLOW_REXCON_in_postfixExpression2044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpression2058 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_postfixExpression2062 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpression2064 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_DOT_in_postfixExpression2109 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression2111 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_ARROW_in_postfixExpression2146 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_postfixExpression2148 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_PLUSPLUS_in_postfixExpression2185 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_MINUSMINUS_in_postfixExpression2243 = new BitSet(new long[]{0x0000000008000102L,0x00000000200042A0L});
	public static final BitSet FOLLOW_LPAREN_in_postfixExpressionRoot2330 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_postfixExpressionRoot2332 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_postfixExpressionRoot2334 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_postfixExpressionRoot2336 = new BitSet(new long[]{0x0100040208080010L,0x8402D00028084292L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_initializerList_in_postfixExpressionRoot2338 = new BitSet(new long[]{0x0000000000200000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2344 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_postfixExpressionRoot2350 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_postfixExpressionRoot2352 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_primaryExpression_in_postfixExpressionRoot2383 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2399 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2405 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_argumentExpressionList2417 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_assignmentExpression_in_argumentExpressionList2422 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_argumentExpressionList2428 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_postfixExpression_in_unaryExpression2487 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUSPLUS_in_unaryExpression2494 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2496 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MINUSMINUS_in_unaryExpression2538 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2540 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryOperator_in_unaryExpression2580 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_castExpression_in_unaryExpression2585 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_unaryExpression2591 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2629 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2631 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2633 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2635 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_unaryExpression2658 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2660 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SCOPEOF_in_unaryExpression2683 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_unaryExpression_in_unaryExpression2685 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNOF_in_unaryExpression2706 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2708 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_unaryExpression2710 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2712 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VALUE_AT_in_unaryExpression2733 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_unaryExpression2735 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2747 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_unaryExpression2749 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2761 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_unaryExpression2763 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_assignmentExpression_in_unaryExpression2776 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_unaryExpression2782 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_unaryExpression2785 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_spawnExpression_in_unaryExpression2810 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_callsExpression_in_unaryExpression2818 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SPAWN_in_spawnExpression2831 = new BitSet(new long[]{0x0100040200080000L,0x0000400000000082L,0x4040002200020000L,0x0000000000000404L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_spawnExpression2833 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_spawnExpression2835 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_spawnExpression2837 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_spawnExpression2839 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALLS_in_callsExpression2888 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2890 = new BitSet(new long[]{0x0100040200080000L,0x0000400000000082L,0x4040002200020000L,0x0000000000000404L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_callsExpression2892 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_callsExpression2894 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_callsExpression2904 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2906 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_callsExpression2908 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_castExpression3025 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_castExpression3027 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_castExpression3029 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_castExpression_in_castExpression3031 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_castExpression3057 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_castExpression_in_remoteExpression3071 = new BitSet(new long[]{0x0000000000000402L});
	public static final BitSet FOLLOW_AT_in_remoteExpression3093 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_castExpression_in_remoteExpression3097 = new BitSet(new long[]{0x0000000000000402L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3152 = new BitSet(new long[]{0x0000000002000002L,0x0000100000008000L});
	public static final BitSet FOLLOW_STAR_in_multiplicativeExpression3174 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3178 = new BitSet(new long[]{0x0000000002000002L,0x0000100000008000L});
	public static final BitSet FOLLOW_DIV_in_multiplicativeExpression3225 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3229 = new BitSet(new long[]{0x0000000002000002L,0x0000100000008000L});
	public static final BitSet FOLLOW_MOD_in_multiplicativeExpression3276 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_remoteExpression_in_multiplicativeExpression3280 = new BitSet(new long[]{0x0000000002000002L,0x0000100000008000L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3335 = new BitSet(new long[]{0x0000000000000002L,0x0000800008000000L});
	public static final BitSet FOLLOW_PLUS_in_additiveExpression3357 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3361 = new BitSet(new long[]{0x0000000000000002L,0x0000800008000000L});
	public static final BitSet FOLLOW_SUB_in_additiveExpression3406 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression3410 = new BitSet(new long[]{0x0000000000000002L,0x0000800008000000L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeExpression3464 = new BitSet(new long[]{0x0000000010000002L});
	public static final BitSet FOLLOW_DOTDOT_in_rangeExpression3481 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_rangeSuffix_in_rangeExpression3485 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3541 = new BitSet(new long[]{0x0000800000000002L});
	public static final BitSet FOLLOW_HASH_in_rangeSuffix3558 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_additiveExpression_in_rangeSuffix3562 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3612 = new BitSet(new long[]{0x0000000000000002L,0x0000050000000000L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_shiftExpression3634 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3638 = new BitSet(new long[]{0x0000000000000002L,0x0000050000000000L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_shiftExpression3683 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_rangeExpression_in_shiftExpression3687 = new BitSet(new long[]{0x0000000000000002L,0x0000050000000000L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3741 = new BitSet(new long[]{0x0000600000000002L,0x0000000000000C00L});
	public static final BitSet FOLLOW_relationalOperator_in_relationalExpression3764 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_shiftExpression_in_relationalExpression3781 = new BitSet(new long[]{0x0000600000000002L,0x0000000000000C00L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression3879 = new BitSet(new long[]{0x0000001000000002L,0x0000000000020000L});
	public static final BitSet FOLLOW_equalityOperator_in_equalityExpression3901 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_relationalExpression_in_equalityExpression3918 = new BitSet(new long[]{0x0000001000000002L,0x0000000000020000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_equalityExpression3924 = new BitSet(new long[]{0x0000001000000002L,0x0000000000020000L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression4014 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_AMPERSAND_in_andExpression4037 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_equalityExpression_in_andExpression4041 = new BitSet(new long[]{0x0000000000000012L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression4097 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_BITXOR_in_exclusiveOrExpression4120 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_andExpression_in_exclusiveOrExpression4124 = new BitSet(new long[]{0x0000000000004002L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4180 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_BITOR_in_inclusiveOrExpression4203 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_exclusiveOrExpression_in_inclusiveOrExpression4207 = new BitSet(new long[]{0x0000000000001002L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression4263 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_AND_in_logicalAndExpression4286 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_inclusiveOrExpression_in_logicalAndExpression4291 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalAndExpression4297 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4354 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
	public static final BitSet FOLLOW_OR_in_logicalOrExpression4377 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_logicalAndExpression_in_logicalOrExpression4382 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalOrExpression4388 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
	public static final BitSet FOLLOW_logicalOrExpression_in_logicalImpliesExpression4447 = new BitSet(new long[]{0x1000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_logicalImpliesExpression4471 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_logicalImpliesExpression4476 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_logicalImpliesExpression4482 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_logicalImpliesExpression_in_conditionalExpression4540 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
	public static final BitSet FOLLOW_QMARK_in_conditionalExpression4557 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_conditionalExpression4559 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_conditionalExpression4561 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_conditionalExpression_in_conditionalExpression4578 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_conditionalExpression4584 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_interval4729 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_conditionalExpression_in_interval4731 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_interval4733 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_conditionalExpression_in_interval4735 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_interval4737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_interval_in_intervalSeq4777 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_interval_in_intervalSeq4782 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4866 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression4868 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4870 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression4872 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4874 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression4888 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_arrayLambdaExpression4890 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_conditionalExpression_in_arrayLambdaExpression4907 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4913 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4928 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression4945 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression4951 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4985 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_arrayLambdaExpression4987 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression4989 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_arrayLambdaExpression4991 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_arrayLambdaExpression4993 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_arrayLambdaExpression5003 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_arrayLambdaExpression5005 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_assignmentExpression_in_arrayLambdaExpression5018 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_arrayLambdaExpression5024 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_boundVariableDeclarationSubList5057 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5059 = new BitSet(new long[]{0x0000000000300002L});
	public static final BitSet FOLLOW_COMMA_in_boundVariableDeclarationSubList5062 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_boundVariableDeclarationSubList5064 = new BitSet(new long[]{0x0000000000300002L});
	public static final BitSet FOLLOW_COLON_in_boundVariableDeclarationSubList5069 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_rangeExpression_in_boundVariableDeclarationSubList5071 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5122 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_boundVariableDeclarationList5125 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_boundVariableDeclarationSubList_in_boundVariableDeclarationList5127 = new BitSet(new long[]{0x0000000000000002L,0x0000008000000000L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_assignmentExpression5166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_assignmentExpression5188 = new BitSet(new long[]{0x000000000400AA00L,0x00012A0010010000L});
	public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpression5200 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression5213 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_assignmentExpression5219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_assignmentExpression5252 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression5321 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_commaExpression5339 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_commaExpression5343 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_quantifiedExpression_in_expression5388 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_commaExpression_in_expression5392 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conditionalExpression_in_constantExpression5405 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_declaration5434 = new BitSet(new long[]{0x0100000000000000L,0x0000108000000080L});
	public static final BitSet FOLLOW_initDeclaratorList_in_declaration5448 = new BitSet(new long[]{0x0000000000000000L,0x1000008000000000L,0x1200001000810000L});
	public static final BitSet FOLLOW_contract_in_declaration5450 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_declaration5452 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_declaration5478 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_declaration5506 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifierList_in_declarationSpecifiers5522 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifier_in_declarationSpecifierList5562 = new BitSet(new long[]{0x0100000000000002L,0x6300000000000000L,0x2D817384596C1842L,0x00000000066EAA70L});
	public static final BitSet FOLLOW_storageClassSpecifier_in_declarationSpecifier5581 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_declarationSpecifier5586 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionSpecifier_in_declarationSpecifier5591 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_alignmentSpecifier_in_declarationSpecifier5596 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_typeSpecifierOrQualifier5614 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeSpecifierOrQualifier5626 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5641 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_initDeclaratorList5644 = new BitSet(new long[]{0x0100000000000000L,0x0000100000000080L});
	public static final BitSet FOLLOW_initDeclarator_in_initDeclaratorList5648 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_declarator_in_initDeclarator5678 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_initDeclarator5703 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084092L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_initializer_in_initDeclarator5707 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEDEF_in_storageClassSpecifier5738 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_storageClassSpecifier5745 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VOID_in_typeSpecifier5780 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHAR_in_typeSpecifier5784 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHORT_in_typeSpecifier5788 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INT_in_typeSpecifier5792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LONG_in_typeSpecifier5796 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLOAT_in_typeSpecifier5800 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOUBLE_in_typeSpecifier5804 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIGNED_in_typeSpecifier5809 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UNSIGNED_in_typeSpecifier5813 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BOOL_in_typeSpecifier5817 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMPLEX_in_typeSpecifier5821 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REAL_in_typeSpecifier5825 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RANGE_in_typeSpecifier5829 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicTypeSpecifier_in_typeSpecifier5834 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnionSpecifier_in_typeSpecifier5839 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumSpecifier_in_typeSpecifier5844 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typedefName_in_typeSpecifier5849 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_domainSpecifier_in_typeSpecifier5854 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeofSpecifier_in_typeSpecifier5862 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_memSpecifier_in_typeSpecifier5870 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TYPEOF_in_typeofSpecifier5886 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_typeofSpecifier5888 = new BitSet(new long[]{0x0100040200080010L,0xA402D00028084082L,0x654133224162184AL,0x00000000076825E6L});
	public static final BitSet FOLLOW_commaExpression_in_typeofSpecifier5900 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier5902 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeofSpecifier5936 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_typeofSpecifier5938 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structOrUnion_in_structOrUnionSpecifier5986 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier5995 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier5997 = new BitSet(new long[]{0x0100000000000000L,0x2000000200000000L,0x2501330041601842L,0x0000000006683060L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier5999 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier6001 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_structOrUnionSpecifier6029 = new BitSet(new long[]{0x0100000000000000L,0x2000000200000000L,0x2501330041601842L,0x0000000006683060L});
	public static final BitSet FOLLOW_structDeclarationList_in_structOrUnionSpecifier6031 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_structOrUnionSpecifier6033 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_structOrUnionSpecifier6061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_structDeclaration_in_structDeclarationList6115 = new BitSet(new long[]{0x0100000000000002L,0x2000000000000000L,0x2501330041601842L,0x0000000006683060L});
	public static final BitSet FOLLOW_specifierQualifierList_in_structDeclaration6156 = new BitSet(new long[]{0x0100000000100000L,0x0000108000000080L});
	public static final BitSet FOLLOW_structDeclaratorList_in_structDeclaration6185 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_structDeclaration6220 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_staticAssertDeclaration_in_structDeclaration6228 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifierOrQualifier_in_specifierQualifierList6247 = new BitSet(new long[]{0x0100000000000002L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList6284 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_structDeclaratorList6287 = new BitSet(new long[]{0x0100000000100000L,0x0000100000000080L});
	public static final BitSet FOLLOW_structDeclarator_in_structDeclaratorList6291 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_declarator_in_structDeclarator6328 = new BitSet(new long[]{0x0000000000100002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator6357 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator6359 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COLON_in_structDeclarator6394 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_structDeclarator6396 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENUM_in_enumSpecifier6431 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6443 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumSpecifier6475 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6477 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6479 = new BitSet(new long[]{0x0000000000200000L,0x0000000200000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6481 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6484 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_enumSpecifier6516 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_enumeratorList_in_enumSpecifier6518 = new BitSet(new long[]{0x0000000000200000L,0x0000000200000000L});
	public static final BitSet FOLLOW_COMMA_in_enumSpecifier6520 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_enumSpecifier6523 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6572 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_enumeratorList6575 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_enumerator_in_enumeratorList6577 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_enumerator6610 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_ASSIGN_in_enumerator6651 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_enumerator6653 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ATOMIC_in_atomicTypeSpecifier6699 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_atomicTypeSpecifier6701 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_atomicTypeSpecifier6703 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_atomicTypeSpecifier6705 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_in_functionSpecifier6777 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NORETURN_in_functionSpecifier6781 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractSpecifier_in_functionSpecifier6789 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PURE_in_functionSpecifier6797 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATE_F_in_functionSpecifier6811 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6834 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_libraryName_in_functionSpecifier6836 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_functionSpecifier6853 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FATOMIC_in_functionSpecifier6870 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEVICE_in_functionSpecifier6884 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GLOBAL_in_functionSpecifier6892 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_differentiableSpecifier_in_functionSpecifier6900 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ABSTRACT_in_abstractSpecifier6917 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L,0x0000000000002000L});
	public static final BitSet FOLLOW_CONTIN_in_abstractSpecifier6947 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_abstractSpecifier6949 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_abstractSpecifier6951 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_abstractSpecifier6953 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_abstractSpecifier6999 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_abstractSpecifier7001 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_abstractSpecifier7003 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIFFERENTIABLE_in_differentiableSpecifier7060 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_differentiableSpecifier7062 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_differentiableSpecifier7064 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_differentiableSpecifier7066 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000200L});
	public static final BitSet FOLLOW_intervalSeq_in_differentiableSpecifier7068 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_differentiableSpecifier7070 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_libraryName7097 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName7101 = new BitSet(new long[]{0x0100000000000000L,0x0000802000000000L});
	public static final BitSet FOLLOW_SUB_in_libraryName7106 = new BitSet(new long[]{0x0100000000000000L,0x0000802000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_libraryName7110 = new BitSet(new long[]{0x0100000000000000L,0x0000802000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_libraryName7114 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ALIGNAS_in_alignmentSpecifier7144 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_alignmentSpecifier7146 = new BitSet(new long[]{0x0100040200080010L,0xA402D00028084082L,0x654133224162184AL,0x00000000076825E6L});
	public static final BitSet FOLLOW_typeName_in_alignmentSpecifier7158 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier7160 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_constantExpression_in_alignmentSpecifier7192 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_alignmentSpecifier7194 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator7242 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_declarator7261 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_directDeclarator_in_declarator7265 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorPrefix_in_directDeclarator7294 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000280L});
	public static final BitSet FOLLOW_directDeclaratorSuffix_in_directDeclarator7317 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000280L});
	public static final BitSet FOLLOW_IDENTIFIER_in_directDeclaratorPrefix7348 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorPrefix7357 = new BitSet(new long[]{0x0100000000000000L,0x0000100000000080L});
	public static final BitSet FOLLOW_declarator_in_directDeclaratorPrefix7360 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorPrefix7362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorArraySuffix_in_directDeclaratorSuffix7375 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directDeclaratorFunctionSuffix_in_directDeclaratorSuffix7380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directDeclaratorArraySuffix7393 = new BitSet(new long[]{0x0100040200080010L,0xA402D02028084082L,0x6041012200021008L,0x0000000005000D86L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7400 = new BitSet(new long[]{0x0100040200080010L,0x8402D02028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directDeclaratorArraySuffix7402 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7404 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix7442 = new BitSet(new long[]{0x0100040200080010L,0xA402D00028084082L,0x6041012200021008L,0x0000000005000586L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7444 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7446 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7448 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directDeclaratorArraySuffix7488 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_STATIC_in_directDeclaratorArraySuffix7490 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_directDeclaratorArraySuffix7492 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7494 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directDeclaratorArraySuffix7534 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_STAR_in_directDeclaratorArraySuffix7536 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directDeclaratorArraySuffix7538 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directDeclaratorFunctionSuffix7597 = new BitSet(new long[]{0x0100000000000000L,0x6300000800000000L,0x2D817384596C1842L,0x00000000066EAA70L});
	public static final BitSet FOLLOW_parameterTypeList_in_directDeclaratorFunctionSuffix7604 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7606 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_identifierList_in_directDeclaratorFunctionSuffix7631 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7633 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directDeclaratorFunctionSuffix7657 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList_opt7687 = new BitSet(new long[]{0x0000000000000002L,0x2000000000000000L,0x2001010000001000L,0x0000000004000000L});
	public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression_opt7718 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_part_in_pointer7734 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
	public static final BitSet FOLLOW_STAR_in_pointer_part7760 = new BitSet(new long[]{0x0000000000000000L,0x2000000000000000L,0x2001010000001000L,0x0000000004000000L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_pointer_part7762 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifier_in_typeQualifierList7787 = new BitSet(new long[]{0x0000000000000002L,0x2000000000000000L,0x2001010000001000L,0x0000000004000000L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeList7816 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithScope_in_parameterTypeList7821 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterTypeListWithoutScope_in_parameterTypeListWithScope7842 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterList_in_parameterTypeListWithoutScope7856 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_parameterTypeListWithoutScope7884 = new BitSet(new long[]{0x0000000200000000L});
	public static final BitSet FOLLOW_ELLIPSIS_in_parameterTypeListWithoutScope7886 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList7931 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_parameterList7934 = new BitSet(new long[]{0x0100000000000000L,0x6300000000000000L,0x2D817384596C1842L,0x00000000066EAA70L});
	public static final BitSet FOLLOW_parameterDeclaration_in_parameterList7936 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_parameterDeclaration7982 = new BitSet(new long[]{0x0100000000000002L,0x0000100000000280L});
	public static final BitSet FOLLOW_declaratorOrAbstractDeclarator_in_parameterDeclaration8010 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_declaratorOrAbstractDeclarator8071 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_abstractDeclarator_in_declaratorOrAbstractDeclarator8076 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList8093 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_identifierList8097 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_identifierList8099 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_specifierQualifierList_in_typeName8136 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000280L});
	public static final BitSet FOLLOW_abstractDeclarator_in_typeName8164 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator8209 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator8233 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pointer_in_abstractDeclarator8257 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000280L});
	public static final BitSet FOLLOW_directAbstractDeclarator_in_abstractDeclarator8259 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclarator8294 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000280L});
	public static final BitSet FOLLOW_abstractDeclarator_in_directAbstractDeclarator8296 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclarator8298 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000280L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8300 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000280L});
	public static final BitSet FOLLOW_directAbstractDeclaratorSuffix_in_directAbstractDeclarator8337 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000280L});
	public static final BitSet FOLLOW_IDENTIFIER_in_typedefName8387 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_directAbstractDeclaratorSuffix8420 = new BitSet(new long[]{0x0100040200080010L,0xA402D02028084082L,0x6041012200021008L,0x0000000005000D86L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8430 = new BitSet(new long[]{0x0100040200080010L,0x8402D02028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_opt_in_directAbstractDeclaratorSuffix8432 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8434 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8479 = new BitSet(new long[]{0x0100040200080010L,0xA402D00028084082L,0x6041012200021008L,0x0000000005000586L});
	public static final BitSet FOLLOW_typeQualifierList_opt_in_directAbstractDeclaratorSuffix8481 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8483 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8485 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeQualifierList_in_directAbstractDeclaratorSuffix8530 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000000000800L});
	public static final BitSet FOLLOW_STATIC_in_directAbstractDeclaratorSuffix8532 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_directAbstractDeclaratorSuffix8534 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8536 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_directAbstractDeclaratorSuffix8568 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_directAbstractDeclaratorSuffix8570 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_directAbstractDeclaratorSuffix8608 = new BitSet(new long[]{0x0100000000000000L,0x6300000800000000L,0x2D817384596C1842L,0x00000000066EAA70L});
	public static final BitSet FOLLOW_parameterTypeList_in_directAbstractDeclaratorSuffix8618 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8620 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RPAREN_in_directAbstractDeclaratorSuffix8650 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_assignmentExpression_in_initializer8697 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_initializer8713 = new BitSet(new long[]{0x0100040208080010L,0x8402D00028084292L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_initializerList_in_initializer8715 = new BitSet(new long[]{0x0000000000200000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8729 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_initializer8743 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_initializer8745 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8784 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_COMMA_in_initializerList8787 = new BitSet(new long[]{0x0100040208080010L,0x8402D00028084292L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_designatedInitializer_in_initializerList8789 = new BitSet(new long[]{0x0000000000200002L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8820 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designation_in_designatedInitializer8838 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084092L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_initializer_in_designatedInitializer8840 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designatorList_in_designation8869 = new BitSet(new long[]{0x0000000000000200L});
	public static final BitSet FOLLOW_ASSIGN_in_designation8871 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_designator_in_designatorList8898 = new BitSet(new long[]{0x0000000008000002L,0x0000000000000200L});
	public static final BitSet FOLLOW_LSQUARE_in_designator8918 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_designator8920 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_designator8922 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOT_in_designator8944 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_designator8946 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STATICASSERT_in_staticAssertDeclaration8979 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_staticAssertDeclaration8981 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_staticAssertDeclaration8983 = new BitSet(new long[]{0x0000000000200000L});
	public static final BitSet FOLLOW_COMMA_in_staticAssertDeclaration8985 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
	public static final BitSet FOLLOW_STRING_LITERAL_in_staticAssertDeclaration8987 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_staticAssertDeclaration8995 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_staticAssertDeclaration8997 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOMAIN_in_domainSpecifier9029 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_domainSpecifier9047 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L});
	public static final BitSet FOLLOW_INTEGER_CONSTANT_in_domainSpecifier9049 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_domainSpecifier9051 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MEM_TYPE_in_memSpecifier9082 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_labeledStatement_in_statement9106 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_compoundStatement_in_statement9122 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expressionStatement_in_statement9138 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_selectionStatement_in_statement9154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_iterationStatement_in_statement9170 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_jumpStatement_in_statement9186 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_whenStatement_in_statement9202 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_chooseStatement_in_statement9218 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atomicStatement_in_statement9234 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_runStatement_in_statement9250 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_withStatement_in_statement9266 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_updateStatement_in_statement9282 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_asmStatement_in_statement9298 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_statementWithScope9330 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_statementWithScope9335 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_statementWithScope9338 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IDENTIFIER_in_labeledStatement9377 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9379 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9381 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CASE_in_labeledStatement9405 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_constantExpression_in_labeledStatement9407 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9409 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9411 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEFAULT_in_labeledStatement9437 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_labeledStatement9439 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_labeledStatement9441 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LCURLY_in_compoundStatement9491 = new BitSet(new long[]{0x8300040200080090L,0xEF02D08228084092L,0xEDE573AFDB7EDBDEL,0x000000003FFEFFF7L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement9501 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItemList_in_compoundStatement9531 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_compoundStatement9533 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_blockItemList9580 = new BitSet(new long[]{0x8300040200080092L,0xEF02D08028084092L,0xEDE573AFDB7EDBDEL,0x000000003FFEFFF7L});
	public static final BitSet FOLLOW_expression_in_expressionStatement9611 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9613 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEMI_in_expressionStatement9631 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IF_in_selectionStatement9670 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9672 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9674 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9676 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9680 = new BitSet(new long[]{0x0000000400000002L});
	public static final BitSet FOLLOW_ELSE_in_selectionStatement9697 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9701 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SWITCH_in_selectionStatement9766 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_selectionStatement9768 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_selectionStatement9770 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_selectionStatement9772 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_selectionStatement9776 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9819 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9821 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9823 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9825 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064042B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9827 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9834 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DO_in_iterationStatement9855 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9859 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000000L,0x0000000010000000L});
	public static final BitSet FOLLOW_WHILE_in_iterationStatement9861 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9863 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_iterationStatement9865 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9867 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L,0x0000040000000000L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9872 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9874 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FOR_in_iterationStatement9895 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement9897 = new BitSet(new long[]{0x0100040200080010L,0xE702D08028084082L,0x6DC173A75B6E184AL,0x00000000077EBFF6L});
	public static final BitSet FOLLOW_declaration_in_iterationStatement9911 = new BitSet(new long[]{0x0100040200080010L,0x8402D08028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9915 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9917 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9921 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9928 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064042B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9932 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement9936 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9971 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9973 = new BitSet(new long[]{0x0100040200080010L,0x8402D08028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9977 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_iterationStatement9979 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_opt_in_iterationStatement9988 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement9990 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064042B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement9994 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement10003 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLFOR_in_iterationStatement10042 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_PARFOR_in_iterationStatement10048 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_iterationStatement10051 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_opt_in_iterationStatement10060 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_identifierList_in_iterationStatement10064 = new BitSet(new long[]{0x0000000000100000L});
	public static final BitSet FOLLOW_COLON_in_iterationStatement10066 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_iterationStatement10070 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_iterationStatement10072 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064042B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_invariant_opt_in_iterationStatement10081 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_iterationStatement10085 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expression_opt10123 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INVARIANT_in_invariant_opt10148 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_invariant_opt10150 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_invariant_opt10152 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_invariant_opt10154 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeName_in_typeName_opt10175 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GOTO_in_jumpStatement10198 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_jumpStatement10200 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10202 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONTINUE_in_jumpStatement10220 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10222 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BREAK_in_jumpStatement10238 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10240 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RETURN_in_jumpStatement10256 = new BitSet(new long[]{0x0100040200080010L,0x8402D08028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_opt_in_jumpStatement10258 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_jumpStatement10260 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma10289 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma10291 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma10293 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PPRAGMA_in_pragma10323 = new BitSet(new long[]{0x0100000000000000L});
	public static final BitSet FOLLOW_IDENTIFIER_in_pragma10325 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFBFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_inlineList_in_pragma10327 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_NEWLINE_in_pragma10329 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INLINE_ANNOTATION_START_in_annotation10386 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_NEWLINE_in_annotation10395 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_inlineList_in_annotation10425 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
	public static final BitSet FOLLOW_NEWLINE_in_annotation10427 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation10464 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation10466 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ANNOTATION_START_in_annotation10494 = new BitSet(new long[]{0xFFFFFFFFFFFFFFB0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_annotationBody_in_annotation10496 = new BitSet(new long[]{0x0000000000000040L});
	public static final BitSet FOLLOW_ANNOTATION_END_in_annotation10498 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RUN_in_runStatement10554 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_runStatement10556 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WITH_in_withStatement10580 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_withStatement10582 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_withStatement10584 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_withStatement10586 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_withStatement10588 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_UPDATE_in_updateStatement10621 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_updateStatement10623 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002200020008L,0x0000000001000586L});
	public static final BitSet FOLLOW_assignmentExpression_in_updateStatement10625 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_updateStatement10627 = new BitSet(new long[]{0x0100040200080000L,0x0000400000000082L,0x4040002200020000L,0x0000000000000404L});
	public static final BitSet FOLLOW_postfixExpressionRoot_in_updateStatement10632 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_updateStatement10634 = new BitSet(new long[]{0x0100040200080010L,0x8402D00828084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_updateStatement10636 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_updateStatement10638 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_updateStatement10640 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_set_in_balancedToken10688 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_balancedToken10700 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_balancedToken10702 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_balancedToken10705 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASM_in_asmStatement10716 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L,0x0000000800000000L,0x0000000004000000L});
	public static final BitSet FOLLOW_VOLATILE_in_asmStatement10718 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L,0x0000000800000000L});
	public static final BitSet FOLLOW_GOTO_in_asmStatement10721 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_asmStatement10724 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_balancedToken_in_asmStatement10729 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_RPAREN_in_asmStatement10735 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
	public static final BitSet FOLLOW_SEMI_in_asmStatement10737 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHEN_in_whenStatement10772 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_whenStatement10774 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_whenStatement10776 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_whenStatement10778 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_whenStatement10780 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CHOOSE_in_chooseStatement10805 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_chooseStatement10807 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statement_in_chooseStatement10809 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08228084092L,0xC044002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_RCURLY_in_chooseStatement10812 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CIVLATOMIC_in_atomicStatement10836 = new BitSet(new long[]{0x0300040200080010L,0x8C02D08028084092L,0xC064002B8212C39CL,0x0000000039904587L});
	public static final BitSet FOLLOW_statementWithScope_in_atomicStatement10840 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10880 = new BitSet(new long[]{0x0100000000000000L,0x7300000000000010L,0x3F81739459ED1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10885 = new BitSet(new long[]{0x0100000000000000L,0x6300000000000010L,0x2D817384596C1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition10890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition10895 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_functionDefinition10940 = new BitSet(new long[]{0x0100000000000000L,0x0000100000000080L});
	public static final BitSet FOLLOW_declarator_in_functionDefinition10945 = new BitSet(new long[]{0x0100000000000000L,0x7300000000000010L,0x3F81739459ED1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_contract_in_functionDefinition10950 = new BitSet(new long[]{0x0100000000000000L,0x6300000000000010L,0x2D817384596C1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_declarationList_opt_in_functionDefinition10955 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_compoundStatement_in_functionDefinition10960 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_declarationList_opt11009 = new BitSet(new long[]{0x0100000000000002L,0x6300000000000000L,0x2D817384596C1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_separationLogicItem_in_contractItem11032 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_porItem_in_contractItem11040 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REQUIRES_in_separationLogicItem11060 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem11062 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem11064 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem11066 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ENSURES_in_separationLogicItem11081 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_separationLogicItem11083 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_separationLogicItem11085 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_separationLogicItem11087 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DEPENDS_in_porItem11120 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000210L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11123 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_porItem11125 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11127 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11131 = new BitSet(new long[]{0x0100040200080010L,0x8402D00228084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11133 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11135 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GUARD_in_porItem11154 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000210L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11157 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_porItem11159 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11161 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11165 = new BitSet(new long[]{0x0100040200080010L,0x8402D00228084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11167 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11169 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ASSIGNS_in_porItem11188 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000210L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11191 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_porItem11193 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11195 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11199 = new BitSet(new long[]{0x0100040200080010L,0x8402D00228084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11201 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11203 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_READS_in_porItem11222 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000210L});
	public static final BitSet FOLLOW_LSQUARE_in_porItem11225 = new BitSet(new long[]{0x0100040200080010L,0x8402D00028084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_expression_in_porItem11227 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_porItem11229 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_porItem11233 = new BitSet(new long[]{0x0100040200080010L,0x8402D00228084082L,0x4040002302020008L,0x0000000001100586L});
	public static final BitSet FOLLOW_argumentExpressionList_in_porItem11235 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_RCURLY_in_porItem11237 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_contractItem_in_contract11265 = new BitSet(new long[]{0x0000000000000002L,0x1000000000000000L,0x1200001000810000L});
	public static final BitSet FOLLOW_blockItem_in_blockItemWithScope11299 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem11323 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_functionDefinition_in_blockItem11344 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declaration_in_blockItem11349 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_pragma_in_blockItem11354 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_annotation_in_blockItem11359 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_statement_in_blockItem11364 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_blockItem_in_translationUnit11394 = new BitSet(new long[]{0x8300040200080090L,0xEF02D08028084092L,0xEDE573AFDB7EDBDEL,0x000000003FFEFFF7L});
	public static final BitSet FOLLOW_EOF_in_translationUnit11397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred1_CivlCParser2312 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_synpred1_CivlCParser2314 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred1_CivlCParser2316 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_synpred1_CivlCParser2318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIZEOF_in_synpred2_CivlCParser2621 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_synpred2_CivlCParser2623 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_synpred2_CivlCParser2625 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred3_CivlCParser3004 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_synpred3_CivlCParser3006 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred3_CivlCParser3008 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFEFL,0xFFFFFFFFFFFFFFFFL,0xFFFFFFFFFFFFFFFFL,0x000003FFFFFFFFFFL});
	public static final BitSet FOLLOW_set_in_synpred3_CivlCParser3010 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AT_in_synpred4_CivlCParser3089 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_synpred5_CivlCParser3170 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIV_in_synpred6_CivlCParser3221 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MOD_in_synpred7_CivlCParser3272 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PLUS_in_synpred8_CivlCParser3353 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUB_in_synpred9_CivlCParser3402 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DOTDOT_in_synpred10_CivlCParser3477 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HASH_in_synpred11_CivlCParser3554 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTLEFT_in_synpred12_CivlCParser3630 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SHIFTRIGHT_in_synpred13_CivlCParser3679 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_relationalOperator_in_synpred14_CivlCParser3760 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_equalityOperator_in_synpred15_CivlCParser3898 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AMPERSAND_in_synpred16_CivlCParser4033 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITXOR_in_synpred17_CivlCParser4116 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BITOR_in_synpred18_CivlCParser4199 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AND_in_synpred19_CivlCParser4282 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OR_in_synpred20_CivlCParser4373 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IMPLIES_in_synpred21_CivlCParser4467 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_QMARK_in_synpred22_CivlCParser4553 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_synpred23_CivlCParser4821 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_typeName_in_synpred23_CivlCParser4823 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_RPAREN_in_synpred23_CivlCParser4825 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_LAMBDA_in_synpred23_CivlCParser4827 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
	public static final BitSet FOLLOW_LPAREN_in_synpred23_CivlCParser4829 = new BitSet(new long[]{0x0100000000000000L,0x2000000000000000L,0x2501330041601842L,0x0000000006682060L});
	public static final BitSet FOLLOW_boundVariableDeclarationList_in_synpred23_CivlCParser4847 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_BITOR_in_synpred23_CivlCParser4849 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_arrayLambdaExpression_in_synpred24_CivlCParser5162 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_unaryExpression_in_synpred25_CivlCParser5172 = new BitSet(new long[]{0x000000000400AA00L,0x00012A0010010000L});
	public static final BitSet FOLLOW_assignmentOperator_in_synpred25_CivlCParser5174 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COMMA_in_synpred26_CivlCParser5335 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_typeSpecifier_in_synpred27_CivlCParser5610 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SYSTEM_in_synpred28_CivlCParser6827 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
	public static final BitSet FOLLOW_libraryName_in_synpred28_CivlCParser6829 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred29_CivlCParser8067 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ELSE_in_synpred30_CivlCParser9693 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarator_in_synpred31_CivlCParser11310 = new BitSet(new long[]{0x0100000000000000L,0x7300000000000010L,0x3F81739459ED1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_contract_in_synpred31_CivlCParser11312 = new BitSet(new long[]{0x0100000000000000L,0x6300000000000010L,0x2D817384596C1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred31_CivlCParser11314 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_synpred31_CivlCParser11316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_declarationSpecifiers_in_synpred32_CivlCParser11329 = new BitSet(new long[]{0x0100000000000000L,0x0000100000000080L});
	public static final BitSet FOLLOW_declarator_in_synpred32_CivlCParser11331 = new BitSet(new long[]{0x0100000000000000L,0x7300000000000010L,0x3F81739459ED1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_contract_in_synpred32_CivlCParser11333 = new BitSet(new long[]{0x0100000000000000L,0x6300000000000010L,0x2D817384596C1842L,0x00000000066EBA70L});
	public static final BitSet FOLLOW_declarationList_opt_in_synpred32_CivlCParser11335 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
	public static final BitSet FOLLOW_LCURLY_in_synpred32_CivlCParser11337 = new BitSet(new long[]{0x0000000000000002L});
}